Обзор
Этот API позволяет указывать возможные скидки. Из указанных промоакций Google применяет ту, которая позволяет получить самую низкую цену. Если вам нужен API, который поддерживает произвольные корректировки цен, позволяющие увеличивать или уменьшать цену при выполнении условий, используйте Rate Modifications API. Если используются оба API, то сначала применяются изменения тарифов, а затем – промоакции.
Запросы
Синтаксис
Сообщение Promotions использует следующий синтаксис:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner= "partner_key"
id="message_ID"
timestamp="timestamp">
<HotelPromotions hotel_id="HotelID" action="[overlay]">
<Promotion id="PromotionID" action="[delete]">
<BookingDates>
<DateRange start="YYYY-MM-DD[THH:mm:ss]" end="YYYY-MM-DD[THH:mm:ss]"
days_of_week="MTWHFSU_or_subset"/>
<DateRange start="YYYY-MM-DD[THH:mm:ss]" end="YYYY-MM-DD[THH:mm:ss]"
days_of_week="MTWHFSU_or_subset"/>
</BookingDates>
<BookingWindow min="integer_or_duration" max="integer_or_duration"/>
<Ceiling amount_per_night="float"/>
<Floor amount_per_night="float"/>
<CheckinDates>
<DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
</CheckinDates>
<CheckoutDates>
<DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
</CheckoutDates>
<!-- Specify only one of percentage, percentage_of_base, fixed_amount,
fixed_amount_per_night, fixed_price, or fixed_price_per_night;
applied_nights is only used with percentage, fixed_amount_per_night,
and fixed_price_per_night. -->
<Discount percentage="float" percentage_of_base="float"
fixed_amount="float" fixed_amount_per_night="float"
fixed_price="float" fixed_price_per_night="float"
applied_nights="integer_1_to_99" rank="integer_1_to_99">
<!-- FreeNights may not be used in conjunction with attributes on Discount -->
<FreeNights stay_nights="integer" discount_nights="integer"
discount_percentage="float" night_selection="[cheapest|last]"
repeats="boolean"/>
</Discount>
<!-- Exactly one of Discount or BestDailyDiscount must be specified.
Specify only one of percentage, fixed_amount, or fixed_price. -->
<BestDailyDiscount percentage="float" fixed_amount="float" fixed_price="float"/>
<Devices>
<Device type="[desktop|tablet|mobile]"/>
</Devices>
<InventoryCount min="integer" max="integer"/>
<LengthOfStay min="integer" max="integer"/>
<MembershipRateRule id="RateRuleID"/>
<MinimumAmount before_discount="integer"/>
<Occupancy min="integer" max="integer"/>
<RatePlans>
<RatePlan id="PackageID_1"/>
<RatePlan id="PackageID_2"/>
</RatePlans>
<RoomTypes>
<RoomType id="RoomID_1"/>
<RoomType id="RoomID_2"/>
</RoomTypes>
<Stacking type="[any|base|none|second]"/>
<StayDates application="[all|any|overlap]">
<DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
</StayDates>
<UserCountries type="[include|exclude]">
<Country code="country_code"/>
</UserCountries>
</Promotion>
</HotelPromotions>
</Promotions>
Элементы и атрибуты
Сообщение Promotions содержит следующие элементы и атрибуты:
| Элемент / @атрибут | Количество | Тип | Описание |
|---|---|---|---|
| Promotions | 1 | Complex element | Корневой элемент сообщения о промоакциях. |
| Promotions / @partner | 1 | string | Аккаунт партнера для этого сообщения. Это строковое значение, которое соответствует значению "Ключ партнера" на
странице настроек аккаунта в Hotel Center.
Если у вас есть серверная часть, которая предоставляет фиды для нескольких аккаунтов, это значение должно совпадать со значением атрибута |
| Promotions / @id | 1 | string | Уникальный идентификатор этого сообщения запроса. Это значение возвращается в ответном сообщении. Допустимые символы: a–z, A–Z, 0–9, _ (подчеркивание) и - (дефис). |
| Promotions / @timestamp | 1 | DateTime | Дата и время создания этого сообщения. |
| Promotions / HotelPromotions | 0..n | HotelPromotions | Промоакции для объекта. Каждая промоакция применяется к одному объекту. Если не используется |
| Promotions / HotelPromotions / @hotel_id | 1 | string | Уникальный идентификатор ресурса. Это значение должно совпадать с идентификатором гостиницы, указанным с помощью
<id> в элементе <listing> в фиде со списком отелей. Идентификатор гостиницы также указан в Hotel Center. |
| Promotions / HotelPromotions / @action | 0..1 | enum | Если значение указано, оно должно быть равно Если значение не указано, то для каждой промоакции, указанной в текущем сообщении, выполняется одно из следующих действий:
|
| Promotions / HotelPromotions / Promotion | 0..99 | Promotion | Одна промоакция для объекта. Обратите внимание, что если не указать Если вам нужно использовать больше 99 промоакций, обратитесь к техническому менеджеру аккаунта. |
| Promotions / HotelPromotions / Promotion / @id | 1 | string | Уникальный идентификатор промоакции. Максимальное количество символов – 40. Допустимые символы: a–z, A–Z, 0–9, _ (подчеркивание), - (дефис) и . (точка). |
| Promotions /HotelPromotions / Promotion / @action | 0..1 | enum | Если значение указано, оно должно быть равно Если указан атрибут |
| Promotions / HotelPromotions / Promotion / BookingDates | 0..1 | BookingDates | Контейнер для одного или нескольких диапазонов, определяющих, когда должно быть выполнено бронирование, чтобы можно было применить промоакцию. |
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange | 1..99 | DateRange | Диапазон дат, в течение которого должно быть выполнено бронирование, чтобы можно было применить промоакцию. |
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @start | 0..1 | Date или DateTime | Дата или дата и время начала диапазона (в часовом поясе ресурса).
|
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end | 0..1 | Date или DateTime | Дата или дата и время окончания диапазона (включительно) по часовому поясу ресурса.
|
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @days_of_week | 0..1 | string | Дни недели, которые разрешены в диапазоне дат. Если не указано, разрешены все дни в диапазоне дат. Каждый символ в строке обозначает день. Например, MTWHF означает, что в диапазоне дат разрешены будние дни. Допустимые символы:
Допустимы любые комбинации символов. |
| Promotions / HotelPromotions / Promotion / BookingWindow | 0..1 | BookingWindow | Указывает период времени, в течение которого должно быть выполнено бронирование, относительно даты заезда (на основе часового пояса объекта). Например, можно указать, что бронирование должно быть выполнено не менее чем за 7 дней и не более чем за 180 дней до даты заезда. |
| Promotions / HotelPromotions / Promotion / BookingWindow / @min | 0..1 | integer or duration | Минимальный срок до заезда, в течение которого должно быть оформлено бронирование, чтобы к нему была применена промоакция. Если значение не указано или равно 0, минимального уровня нет.
Допустимые типы значений:
|
| Promotions / HotelPromotions / Promotion / BookingWindow / @max | 0..1 | integer or duration | Максимальное количество дней до даты заезда, за которое нужно забронировать номер, чтобы получить скидку. Если значение не указано или равно 0, максимальное значение не задано.
Допустимые типы значений:
|
| Promotions / HotelPromotions / Promotion / Ceiling | 0..1 | Ceiling |
Определяет ограничения на максимальное значение, которое может быть установлено для тарифа после применения промоакций. В промоакциях всегда должны быть указаны атрибуты Если настроено суммирование, то к одному бронированию может применяться несколько промоакций с атрибутом Пример: Расчет цены за одну ночь, если
Вот порядок расчета:
Тот факт, что 60 – это более строгое общее ограничение, не имеет значения, поскольку оно действительно только для собственной промоакции, и не может быть единого ограничения, охватывающего весь стек промоакций. |
| Promotions / HotelPromotions / Promotion / Ceiling / @amount_per_night | 1 | float |
Максимальная цена за ночь, которая может быть установлена после применения скидки. Если также указан элемент
|
| Promotions / HotelPromotions / Promotion / Floor | 0..1 | Floor |
Определяет ограничения на минимальное значение, которое может быть установлено для тарифа после применения промоакций. В промоакциях всегда должны быть указаны атрибуты Логика Если настроено суммирование, то к одному бронированию может применяться несколько промоакций с атрибутом Пример: Расчет цены за одну ночь, если
Вот порядок расчета:
Тот факт, что 90 – это более строгая минимальная цена, не имеет значения, поскольку она действительна только для своего промоакции, и не может быть единой минимальной цены, которая охватывает весь стек промоакций. |
| Promotions / HotelPromotions / Promotion / Floor / @amount_per_night | 1 | float |
Минимальная цена за ночь, которая может быть установлена после применения скидки. Если также указан элемент
|
| Promotions / HotelPromotions / Promotion / CheckinDates | 0..1 | CheckinDates | Контейнер для одного или нескольких диапазонов дат, определяющих, когда должна произойти регистрация, чтобы промоакция была применена. |
| Promotions / HotelPromotions / Promotion / CheckinDates / DateRange | 1..20 | DateRange | Диапазон дат, в который должен произойти заезд, чтобы применилось специальное предложение. Если вы удаляете одну или несколько промоакций, этот элемент не требуется. Также поддерживается формат YearlessDate.
|
| Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @start | 0..1 | Date or YearlessDate | Дата начала диапазона дат (включая ее) в часовом поясе ресурса. Эта дата должна быть не позже даты end. Если параметр start не указан, то диапазон дат не ограничен датой начала. |
| Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @end | 0..1 | Date or YearlessDate | Дата окончания диапазона дат (включительно) по часовому поясу ресурса. Эта дата должна совпадать с датой start или быть позже нее. Если параметр end не указан, диапазон дат не ограничен датой окончания. |
| Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @days_of_week | 0..1 | string | Дни недели, которые разрешены в диапазоне дат. Если не указано, разрешены все дни в диапазоне дат. Каждый символ в строке обозначает день. Например, MTWHF означает, что в диапазоне дат разрешены будние дни. Допустимые символы:
Допустимы любые комбинации символов. |
| Promotions / HotelPromotions / Promotion / CheckoutDates | 0..1 | CheckoutDates | Контейнер для одного или нескольких диапазонов дат, определяющих, когда должен произойти выезд, чтобы можно было применить промоакцию. |
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange | 1..20 | DateRange | Диапазон дат, в который должен произойти выезд, чтобы промоакция была применена. Этот элемент не является обязательным, если вы удаляете одну или несколько промоакций. Также поддерживается формат YearlessDate.
|
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @start | 0..1 | Date or YearlessDate | Дата начала диапазона дат (включая ее) в часовом поясе ресурса. Эта дата должна быть не позже даты end. Если параметр start не указан, то диапазон дат не ограничен датой начала. |
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @end | 0..1 | Date or YearlessDate | Дата окончания диапазона дат (включительно) по часовому поясу ресурса. Эта дата должна совпадать с датой start или быть позже нее. Если параметр end не указан, диапазон дат не ограничен датой окончания. |
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @days_of_week | 0..1 | string | Дни недели, которые разрешены в диапазоне дат. Если не указано, разрешены все дни в диапазоне дат. Каждый символ в строке обозначает день. Например, MTWHF означает, что в диапазоне дат разрешены будние дни. Допустимые символы:
Допустимы любые комбинации символов. |
| Promotions / HotelPromotions / Promotion / Devices | 0..1 | Devices | Контейнер для списка устройств пользователя, которые соответствуют условиям промоакции. Если указано, то только пользователи, соответствующие требованиям, на перечисленных устройствах получат цену со скидкой. Если не указать, то цена со скидкой будет предлагаться соответствующим требованиям пользователям на любых устройствах. |
| Promotions / HotelPromotions / Promotion / Devices / Device | 1..3 | Device | Определяет один тип пользовательского устройства, которое подходит для промоакции. |
| Promotions / HotelPromotions / Promotion / Devices / Device / @type | 1 | enum | Тип устройства. Возможное значение: desktop, tablet или mobile. |
| Promotions / HotelPromotions / Promotion / Discount | 1 | Discount | Необходимо указать только одно значение: Указывает скидку, которая будет применяться в рамках этой промоакции. |
| Promotions / HotelPromotions / Promotion / Discount / @percentage | 0..1 | float | Необходимо указать только одно из следующих значений: Десятичное значение от 0 до 100, которое указывает процент скидки.
Оно применяется к свойству Примеры:
|
| Promotions / HotelPromotions / Promotion / Discount / @percentage_of_base | 0..1 | float | Необходимо указать только одно из следующих значений: Десятичное значение от 0 до 100, которое указывает процент базовой скидки. Как и В отличие от Пример:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_amount | 0..1 | float | Необходимо указать только одно из следующих значений: Фиксированная сумма, которая вычитается из суммы цен за Примеры:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_amount_per_night | 0..1 | float | Необходимо указать только одно из следующих значений: Фиксированная скидка, которая применяется к каждой из Примеры:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_price | 0..1 | float | Необходимо указать только одно из следующих значений: Если указано Если Примеры:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_price_per_night | 0..1 | float | Необходимо указать только одно из следующих значений: Если указано Если Если указан атрибут Примеры:
|
| Promotions / HotelPromotions / Promotion / Discount / @applied_nights | 0..1 | integer | Этот атрибут следует использовать только с атрибутами Количество ночей, к которым применяется скидка, начиная с самой дешевой. Укажите целое число от 1 до 99. Если не указано, скидка применяется ко всем ночам. |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights | 0..1 | FreeNights | Скидка на определенные ночи при условии, что длительность пребывания не меньше минимального срока пребывания. Если используется этот элемент, атрибуты в родительском элементе Discount не допускаются. |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights | 1 | integer | Количество ночей, необходимое для применения скидки. Каждая скидка применяется к отдельному сегменту ночей проживания. Например, если гость бронирует номер на 10 ночей, а значение |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_nights | 1 | integer | Количество ночей со скидкой в каждом сегменте. |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_percentage | 1 | float | Скидка, которая применяется к ночам со скидкой. Если значение равно 50, то каждая выбранная ночь будет стоить на 50% дешевле. |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection | 1 | string | Допустимые значения: cheapest или last. Если last, то скидка применяется к ночам в конце сегмента. Если указано значение cheapest, то скидка применяется к самым дешевым ночам в рамках сегмента. |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats | 1 | boolean | Можно ли применить скидку к нескольким сегментам ночей. Если указано значение Например, если значение |
| Promotions / HotelPromotions / Promotion / Discount / @rank | 0..1 | integer | Присваивает промоакции ранг и включает ее в ранжированный выбор, в котором применяется только промоакция с самым низким рангом. Значения должны быть в диапазоне от 1 до 99 (включительно). Если у нескольких промоакций одинаковый ранг, то одна из них выбирается и применяется случайным образом. |
| Promotions / HotelPromotions / Promotion / BestDailyDiscount | 1 | Discount | Необходимо указать только одно значение: Указывает ежедневную скидку, которая может быть применена к ночи проживания. В отличие от Для каждого объекта можно указать одну группу специальных предложений, которые считаются лучшими за день. Это значит, что для каждой ночи проживания выбирается и применяется одна "лучшая ежедневная" промоакция, которая соответствует условиям и дает самую большую скидку.
Для этого типа скидки можно указать |
| Promotions / HotelPromotions / Promotion / BestDailyDiscount / @percentage | 0..1 | float | Необходимо указать только одно из следующих значений: Десятичное значение от 0 до 100, которое указывает процент скидки.
Оно применяется к свойству Примеры:
|
| Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_amount | 0..1 | float | Необходимо указать только одно из следующих значений: Фиксированная сумма, которая вычитается из цены за ночь для одного человека ( Примеры:
|
| Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_price | 0..1 | float | Необходимо указать только одно из следующих значений: Если указано Примеры:
|
| Promotions / HotelPromotions / Promotion / InventoryCount | 0..1 | InventoryCount | Ограничения на количество номеров, которые должны быть доступны, чтобы можно было применить промоакцию. Скидка применяется только к тем ночам, которые соответствуют ограничению. Нельзя использовать со скидкой fixed_amount. Обратите внимание, что количество доступных номеров указывается в элементе OTA_HotelInvCountNotifRQ (InvCount) или OTA_HotelAvailNotifRQ (BookingLimit). |
| Promotions / HotelPromotions / Promotion / InventoryCount / @min | 0..1 | integer | Минимальное количество номеров, которое должно быть доступно, чтобы промоакция применялась к цене за ночь. Если это значение не указано, минимального ограничения нет. |
| Promotions / HotelPromotions / Promotion / InventoryCount / @max | 0..1 | integer | Максимальное количество номеров, которые должны быть доступны, чтобы промоакция применялась к цене за ночь. Если этот параметр не задан, ограничения нет. |
| Promotions / HotelPromotions / Promotion / LengthOfStay | 0..1 | LengthOfStay | Определяет ограничения по длительности пребывания, в рамках которых может применяться промоакция. Промоакция не применяется, если длительность пребывания не соответствует минимальному и максимальному ограничениям. |
| Promotions / HotelPromotions / Promotion / LengthOfStay / @min | 0..1 | integer | Минимальное количество ночей, которое нужно забронировать, чтобы воспользоваться промоакцией. Если это значение не указано, минимального ограничения нет. |
| Promotions / HotelPromotions / Promotion / LengthOfStay / @max | 0..1 | integer | Максимальное количество ночей, на которое распространяется промоакция. Если этот параметр не задан, ограничения нет. |
| Promotions / HotelPromotions / Promotion / MembershipRateRule | 0..1 | MembershipRateRule |
Контейнер для правила, которое активирует определенный элемент интерфейса для связанной скидки. Этот элемент не должен быть указан, если не указан элемент |
| Promotions / HotelPromotions / Promotion / MembershipRateRule / @id | 1 | string |
Идентификатор правила назначения цен, связанного с программой лояльности. |
| Promotions / HotelPromotions / Promotion / MinimumAmount | 0..1 | MinimumAmount | Минимальная сумма суточных цен за номер (используется большее из значений AmountBeforeTax или AmountAfterTax), которая должна быть превышена, чтобы промоакция была применена. |
| Promotions / HotelPromotions / Promotion / MinimumAmount / @before_discount | 1 | integer | Значение, которое должно быть превышено, чтобы промоакция была применена. |
| Promotions / HotelPromotions / Promotion / Occupancy | 0..1 | Occupancy | Определяет ограничения на количество гостей, для которых применяется промоакция. Промоакция не применяется, если количество гостей не соответствует минимальному и максимальному ограничениям.
Промоакции применяются к цене за маршрут. Установить максимальную скидку на одного гостя нельзя. |
| Promotions / HotelPromotions / Promotion / Occupancy / @min | 0..1 | integer | Чтобы скидка была применена, указанное пользователем количество гостей должно быть не меньше этого значения. |
| Promotions / HotelPromotions / Promotion / Occupancy / @max | 0..1 | integer | Чтобы скидка была применена, указанное пользователем количество гостей должно быть не больше этого значения. |
| Promotions / HotelPromotions / Promotion / RatePlans | 0..1 | RatePlans | Контейнер для списка тарифных планов, к которым применяется промоакция.
Если атрибут <RatePlans> не указан, промоакция применяется ко всем тарифным планам. |
| Promotions / HotelPromotions / Promotion / RatePlans / RatePlan | 1..n | RatePlan | Указывает тарифный план. Тарифный план определяется сочетанием пакета, тарифов и доступности, как указано в сообщениях Transaction (Property Data), OTA_HotelRateAmountNotifRQ и OTA_HotelAvailNotifRQ, а также идентифицируется по PackageID. |
| Promotions / HotelPromotions / Promotion / RatePlans / RatePlan / @id | 1 | string | Уникальный идентификатор тарифного плана. Это значение сопоставляется со значением PackageID в <PackageData> в сообщении Transaction (Property Data) и атрибутом RatePlanCode в <StatusApplicationControl> в сообщениях <OTA_HotelRateAmountNotifRQ> и <OTA_HotelAvailNotifRQ>.
Максимальное количество символов: 50. |
| Promotions / HotelPromotions / Promotion / RoomTypes | 0..1 | RoomTypes | Контейнер для списка типов номеров, к которым применяется промоакция.
Промоакция применяется к каждому указанному <RoomType>. Если атрибут <RoomTypes> не указан, промоакция применяется ко всем номерам. |
| Promotions / HotelPromotions / Promotion / RoomTypes / RoomType | 1..n | RoomType | Указывает тип номера. Тип номера определяется в элементе <RoomData> сообщения Transaction (Property Data) и указывается с помощью значения <RoomID>. (На значение <RoomID> также ссылается атрибут InvTypeCode в сообщениях OTA_HotelRateAmountNotifRQ.) |
| Promotions / HotelPromotions / Promotion / RoomTypes / RoomType / @id | 1 | string | Уникальный идентификатор инвентаря (типа номера). Это значение сопоставляется с элементом <RoomID> в сообщении Transaction (Property Data).
Максимальное количество символов: 50. |
| Promotions / HotelPromotions / Promotion / Stacking | 0..1 | Stacking | Указывает, как можно комбинировать промоакции. Если тип не указан, по умолчанию используется base. |
| Promotions / HotelPromotions / Promotion / Stacking / @type | 1 | enum | К одному тарифу можно применить несколько промоакций в зависимости от значения этого параметра:
Из разрешенных комбинаций к цене применяется набор промоакций, который дает наибольшую скидку. |
| Promotions / HotelPromotions / Promotion / StayDates | 0..1 | StayDates | Контейнер для одного или нескольких диапазонов дат, определяющих, как применяется промоакция, например для сезонных скидок. |
| Promotions / HotelPromotions / Promotion / StayDates / @application | 1 | enum | Описывает, как должна применяться промоакция. Допустимые значения:
Этот атрибут должен быть указан всегда.
|
| Promotions / HotelPromotions / Promotion / StayDates / DateRange | 1..99 | DateRange | Диапазон дат, в течение которого действует промоакция. Также поддерживается формат YearlessDate.
Если вы хотите задать диапазон |
| Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start | 0..1 | Date or YearlessDate | Дата начала диапазона дат (включая ее) в часовом поясе ресурса. Эта дата должна быть не позже даты end. Если параметр start не указан, то диапазон дат не ограничен датой начала.
Если значение |
| Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end | 0..1 | Date or YearlessDate | Дата окончания диапазона дат (включительно) по часовому поясу ресурса. Эта дата должна совпадать с датой start или быть позже нее. Если параметр end не задан, диапазон дат не ограничен, начиная с даты start.
Если значение |
| Promotions / HotelPromotions / Promotion / StayDates / DateRange / @days_of_week | 0..1 | string | Дни недели, которые разрешены в диапазоне дат. Если не указано, разрешены все дни в диапазоне дат. Каждый символ в строке обозначает день. Например, MTWHF означает, что в диапазоне дат разрешены будние дни. Допустимые символы:
Допустимы любые комбинации символов. |
| Promotions / HotelPromotions / Promotion / UserCountries | 0..1 | UserCountries | Контейнер для списка местоположений пользователей (стран), в которых действует промоакция. Если указать страны, то цена со скидкой будет предлагаться только соответствующим требованиям пользователям из этих стран. Если не указать страны, то скидка будет доступна пользователям из всех стран. |
| Promotions / HotelPromotions / Promotion / UserCountries / @type | 0..1 | enum | Тип спецификации UserCountries.
Допустимые значения: Если для параметра UserCountries Если для UserCountries Если значение UserCountries |
| Promotions / HotelPromotions / Promotion / UserCountries / Country | 1..300 | Country | Определяет одну страну, в которой пользователи могут воспользоваться промоакцией. |
| Promotions / HotelPromotions / Promotion / UserCountries / Country / @code | 1 | string | Код страны по стандарту CLDR, например DE или FR. Обратите внимание, что для некоторых стран код CLDR не совпадает с двухбуквенным кодом ISO. Коды регионов CLDR не поддерживаются. |
Примеры
Для одного ресурса можно создать не более 500 промоакций. Чтобы удалить промоакции из ресурса, воспользуйтесь примером "Удаление одной промоакции".
Базовое сообщение
Ниже приведен пример простого сообщения Promotions.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingDates>
<DateRange start="2020-07-01" end="2020-07-31" days_of_week="MTWHF"/>
<DateRange start="2020-09-01" end="2020-09-30"/>
</BookingDates>
<BookingWindow min="7" max="330"/>
<CheckinDates>
<DateRange start="2020-10-01" end="2020-10-31" days_of_week="FSU"/>
</CheckinDates>
<CheckoutDates>
<DateRange start="2020-10-08" end="2020-11-07" days_of_week="FSU"/>
</CheckoutDates>
<Devices>
<Device type="mobile"/>
<Device type="tablet"/>
</Devices>
<Discount percentage="20" applied_nights="2"/>
<LengthOfStay min="2" max="14"/>
<RatePlans>
<RatePlan id="234"/>
<RatePlan id="567"/>
</RatePlans>
<RoomTypes>
<RoomType id="123"/>
<RoomType id="456"/>
</RoomTypes>
<Stacking type="base"/>
<UserCountries>
<Country code="US"/>
<Country code="GB"/>
</UserCountries>
</Promotion>
</HotelPromotions>
</Promotions>
Состояние инвентаря
В примере ниже показано, как создать скидку, если у вас есть лишние номера, а дата заезда уже близко.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingWindow max="7"/>
<Discount percentage="10"/>
<InventoryCount min="3"/>
</Promotion>
</HotelPromotions>
</Promotions>
Как удалить одну промоакцию
В примере ниже показано, как удалить одно промоакцию для объекта недвижимости.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1" action="delete"/>
</HotelPromotions>
</Promotions>
Удалить все промоакции
В примере ниже показано, как удалить все промоакции для ресурса.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1" action="overlay"/>
</Promotions>
Показать все промоакции
В примере ниже показано, как наложить <HotelPromotions> для объекта с одной или несколькими новыми промоакциями. Если action="overlay", все сохраненные промоакции удаляются перед сохранением промоакций, указанных в текущем сообщении:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1" action="overlay">
<Promotion id="1">
<BookingDates>
<DateRange start="2020-09-01" end="2020-09-30"/>
</BookingDates>
<Discount percentage="10"/>
<RoomTypes>
<RoomType id="123"/>
<RoomType id="456"/>
</RoomTypes>
<RatePlans>
<RatePlan id="234"/>
<RatePlan id="567"/>
</RatePlans>
<Stacking type="base"/>
</Promotion>
</HotelPromotions>
</Promotions>
Три типа укладки
В примере ниже показан случай, когда применяются три разные промоакции (base, second, any). Обратите внимание, что промоакция none не применяется, поскольку другие промоакции обеспечивают более высокую скидку. Если исходная цена составляла 100 долларов США, то цена со скидкой будет равна 72,90 доллара США.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<Discount percentage="10"/>
<Stacking type="base"/>
</Promotion>
<Promotion id="2">
<Discount percentage="10"/>
<Stacking type="second"/>
</Promotion>
<Promotion id="3">
<Discount percentage="10"/>
<Stacking type="any"/>
</Promotion>
<Promotion id="4">
<Discount percentage="25"/>
<Stacking type="none"/>
</Promotion>
</HotelPromotions>
</Promotions>
Тип стека: нет
В примере ниже используется промоакция none, потому что комбинация других промоакций дает меньшую скидку. Если исходная цена составляла 100 долларов США, то цена со скидкой будет равна 75 долларам США.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<Discount percentage="10"/>
<Stacking type="base"/>
</Promotion>
<Promotion id="2">
<Discount percentage="10"/>
<Stacking type="any"/>
</Promotion>
<Promotion id="3">
<Discount percentage="25"/>
<Stacking type="none"/>
</Promotion>
</HotelPromotions>
</Promotions>
Границы продолжительности окна бронирования
В примере ниже показано, как использовать элемент BookingWindow с начальной и конечной границами, заданными в формате ISO 8601. Это ограничение требует, чтобы бронирование было сделано не позднее 18:00 за день до прибытия и не ранее 12:00 за два дня до прибытия.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingWindow min="P1DT6H" max="P2DT12H"/>
<Discount percentage="20"/>
</Promotion>
</HotelPromotions>
</Promotions>
Границы дат и времени бронирования
В примере ниже показано, как элемент BookingDates используется с атрибутами start и end типа DateTime. Это ограничение требует, чтобы бронирование было выполнено в период с 06:30 1 июля 2020 г. до 18:45 2 июля 2020 г.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingDates>
<DateRange start="2020-07-01T06:30:00" end="2020-07-02T18:45:00"/>
</BookingDates>
<Discount percentage="20"/>
</Promotion>
</HotelPromotions>
</Promotions>
Диапазоны дат без указания года
В примере ниже элемент CheckInDates содержит элементы DateRanges с полями start и end без указания года. В этом примере промоакция применяется к датам заезда с 29 декабря по 2 января независимо от года. Диапазоны дат без указания года, которые пересекают границу нового года, являются недействительными, поэтому DateRange выражается как два смежных диапазона дат.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<CheckInDates>
<DateRange start="12-29" end="12-31"/>
<DateRange start="01-01" end="01-02"/>
</CheckInDates>
<Discount percentage="20"/>
</Promotion>
</HotelPromotions>
</Promotions>
Скидка FreeNights
В примере ниже показано, как настроить скидку 50% на две ночи за каждые четыре ночи проживания в указанный диапазон дат бронирования. Если вы бронируете номер на 10 ночей, то скидка 50 % будет действовать на четыре ночи.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingDates>
<DateRange start="2022-01-01" end="2022-05-31"/>
</BookingDates>
<Discount>
<FreeNights stay_nights="4" discount_nights="2" discount_percentage="50" night_selection="cheapest" repeats="true"/>
</Discount>
</Promotion>
</HotelPromotions>
</Promotions>
В следующем примере скидка 50% на одну ночь предоставляется за каждые три ночи проживания в указанные диапазоны дат. Скидка будет действовать только на те ночи, которые входят в период действия акции. Для следующего маршрута с регистрацией заезда 1 января 2022 г. и регистрацией отъезда 7 января 2022 г. соответствующие ночи проживания и скидки применяются следующим образом.
- 2022-01-01 (проживание)
- 2022-01-02 (проживание)
- 2022-01-03
- 04.01.2022 (со скидкой)
- 2022-01-05 (проживание)
- 2022-01-06 (проживание)
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<StayDates application="overlap">
<DateRange start="2022-01-01" end="2022-01-02"/>
<DateRange start="2022-01-04" end="2022-01-06"/>
</StayDates>
<Discount>
<FreeNights stay_nights="3" discount_nights="1" discount_percentage="50" night_selection="last" repeats="true"/>
</Discount>
</Promotion>
</HotelPromotions>
</Promotions>
Выбор с ранжированием
В примере ниже предлагается две скидки: 20% и 15 %. При оценке применяется только скидка 15 %, так как у нее более низкий ранг.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<Discount percentage="15" rank="25"/>
</Promotion>
<Promotion id="2">
<Discount percentage="20" rank="50"/>
</Promotion>
</HotelPromotions>
</Promotions>
BestDailyDiscount
В примере ниже скидка на проживание в течение двух ночей рассчитывается путем применения BestDailyDiscount в сочетании с Discount.
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="HotelID" action="overlay">
<Promotion id="general">
<BestDailyDiscount fixed_amount="20"/>
</Promotion>
<Promotion id="may">
<BestDailyDiscount fixed_amount="50"/>
<StayDates application="overlap">
<DateRange start="2023-05-01" end="2023-05-31"/>
</StayDates>
</Promotion>
<Promotion id="fiesta">
<Discount fixed_amount_per_night="5"/>
<Stacking type="any"/>
</Promotion>
</HotelPromotions>
</Promotions>
Рассмотрим проживание в течение двух ночей с 30 апреля по 2 мая 2023 г. Для расчета сначала определяется комбинация лучших ежедневных скидок, которая дает наибольшую скидку.
Для первой ночи подходит только общая промоакция с фиксированной скидкой 20.
Для второй ночи промоакция "may" предлагает большую скидку, чем промоакция "general". Таким образом, если выбран май, фиксированная скидка составит 50.
Затем для проживания промоакция "fiesta" снижает цену до 5 за ночь, или 10 в общей сложности. Ее можно использовать вместе с лучшими ежедневными скидками, потому что для акции fiesta задан тип сочетания any. Если бы значение было равно base, то применялась бы только комбинация лучших ежедневных скидок или скидка "Фиеста". Подробную информацию можно найти в описании Stacking.
`Общая скидка на проживание составит 20 + 50 + 10 = 80.
Ответы
Синтаксис
Сообщение PromotionsResponse использует следующий синтаксис:
<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="timestamp"
id="message_ID"
partner="partner_key">
<!-- Either Success or Issues are populated. -->
<Success/>
<Issues>
<Issue code="issue_code"
status="issue_type">
issue_description
</Issue>
</Issues>
</PromotionsResponse>
Элементы и атрибуты
Сообщение PromotionsResponse содержит следующие элементы и атрибуты:
| Элемент / @атрибут | Количество | Тип | Описание |
|---|---|---|---|
| PromotionsResponse | 1 | Complex element | Корневой элемент, указывающий на успешную обработку или проблемы с полученным сообщением с запросом на промоакции. |
| PromotionsResponse / @timestamp | 1 | DateTime | Дата и время создания этого сообщения. |
| PromotionsResponse / @id | 1 | string | Уникальный идентификатор из связанного сообщения о промоакции. |
| PromotionsResponse / @partner | 1 | string | Аккаунт партнера для этого сообщения. |
| PromotionsResponse / Success | 0..1 | Success | Указывает, что сообщение о промоакции было успешно обработано без предупреждений, ошибок или сбоев.
В каждом сообщении присутствует |
| PromotionsResponse / Issues | 0..1 | Issues | Контейнер для одной или нескольких проблем, возникших при обработке сообщения о промоакциях.
В каждом сообщении присутствует |
| PromotionsResponse / Issues / Issue | 1..n | Issue | Описание предупреждения, ошибки или сбоя, возникших при обработке сообщения о промоакциях. Подробную информацию об этих проблемах можно найти в статье Сообщения об ошибках в статусе фида. |
| PromotionsResponse / Issues / Issue / @code | 1 | integer | Идентификатор проблемы. |
| PromotionsResponse / Issues / Issue / @status | 1 | enum | Тип проблемы. Допустимые значения: |
Примеры
Выполнено
Ниже приведен ответ на успешно обработанное сообщение Promotions.
<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="2020-05-18T16:20:00-04:00"
id="12345678"
partner="partner_key">
<Success/>
</PromotionsResponse>
Проблемы
Ниже приведен ответ на сообщение Promotions, которое не было обработано из-за ошибок.
<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="2020-05-18T16:20:00-04:00"
id="12345678"
partner="partner_key">
<Issues>
<Issue code="1001" status="error">Example</Issue>
</Issues>
</PromotionsResponse>