Обзор
Этот API позволяет указать возможные скидки. Из указанных промоакций Google применяет подходящую промоакцию или набор промоакций, которые приводят к самой низкой цене. Если вы ищете API, который поддерживает произвольную корректировку ставок, которая может увеличивать или уменьшать цену при выполнении условий, рассмотрите наш 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, 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" 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 | 1 | Complex element | Корневой элемент рекламного сообщения. |
Promotions / @partner | 1 | string | Партнерский аккаунт для этого сообщения. Это строковое значение представляет собой значение «Партнерского ключа», указанное на странице настроек учетной записи в Hotel Center. Если у вас есть серверная часть, которая предоставляет каналы для нескольких учетных записей, это значение должно соответствовать значению атрибута |
Promotions / @id | 1 | string | Уникальный идентификатор этого сообщения запроса. Это значение возвращается в ответном сообщении. Допустимые символы: az, AZ, 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 рекламных акций, обратитесь к своему техническому менеджеру по работе с клиентами (TAM). |
Promotions / HotelPromotions / Promotion / @id | 1 | string | Уникальный идентификатор акции. Максимально допустимое количество символов — 40. Допустимые символы: az, AZ, 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 | Определяет ограничения на максимальное значение, которое может быть установлено для ставки после применения рекламных акций. В рекламных акциях всегда должен быть указан Если настроено группирование, то к одному пребыванию можно применить несколько рекламных акций с Пример: Цена за 1 ночь проживания, при которой
Вот порядок расчета:
Тот факт, что 60 — это более строгий общий потолок, не имеет значения, поскольку он действителен только для своего собственного продвижения, и не может быть единого потолка, охватывающего весь стек промоакций. |
Promotions / HotelPromotions / Promotion / Ceiling / @amount_per_night | 1 | float | Максимальная сумма, которую можно установить за ночь после применения скидки. Если также указан элемент |
Promotions / HotelPromotions / Promotion / Floor | 0..1 | Floor | Определяет ограничения на минимальное значение, которое может быть установлено для ставки после применения рекламных акций. В рекламных акциях всегда должен быть указан Логика Если настроено группирование, то к одному пребыванию можно применить несколько рекламных акций с Пример: Цена за 1 ночь проживания, при которой
Вот порядок расчета:
Тот факт, что 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 / @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 (Data Property), OTA_HotelRateAmountNotifRQ и OTA_HotelAvailNotifRQ, а также как указано PackageID. |
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan / @id | 1 | string | Уникальный идентификатор тарифного плана. Это значение сопоставляется со значением PackageID в <PackageData> в сообщении транзакции (данные свойства) и в атрибуте 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> в сообщении транзакции (данные о свойстве) , и на него можно ссылаться с помощью его значения <RoomID> . (На его значение <RoomID> также ссылается атрибут InvTypeCode в сообщениях OTA_HotelRateAmountNotifRQ.) |
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType / @id | 1 | string | Уникальный идентификатор инвентаря (типа помещения). Это значение сопоставляется с <RoomID> в сообщении транзакции (данные о собственности). Максимально допустимое количество символов — 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 не указан, диапазон дат фактически не ограничен с точки зрения даты окончания. |
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. Допустимые значения: Если Если Если |
Promotions / HotelPromotions / Promotion / UserCountries / Country | 1..300 | Country | Определяет одну страну, в которой пользователи имеют право на участие в акции. |
Promotions / HotelPromotions / Promotion / UserCountries / Country / @code | 1 | string | Код страны CLDR , например DE или FR . Обратите внимание, что для некоторых стран код страны CLDR не совпадает с двухбуквенным кодом страны ISO. Кроме того, коды регионов CLDR не поддерживаются. |
Примеры
Основное сообщение
В следующем примере показано базовое сообщение 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>
Наложение всех промоакций
The following example shows how to overlay <HotelPromotions>
for a property with one or more new promotions. When action="overlay"
, all stored promotions are deleted prior to storing the promotions specified in the current message:
<?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>
3 Different Stacking Types
The following example shows a case where three different promotions would be applied ( base
, second
, any
). Note that the none
promotion wouldn't be applied since the other promotions provide a better discount. If the original price was $100, the discounted price would be $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 Stacking Type
The following example shows a case where the none
promotion is used because the combination of other promotions provides a smaller discount. If the original price was $100, the discounted price would be $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>
Booking Window Duration Bounds
The following example shows a case where the BookingWindow
element is used with its start and end bounds defined as an ISO 8601 Duration type. This booking window restriction requires booking on or before 18:00 the day prior to arrival, and on or after 12:00 on the 2nd day before arrival.
<?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>
Booking Dates DateTime Bounds
The following example shows a case where the BookingDates
element is used with start
and end
attributes as DateTime types. This booking date restriction requires booking to occur between 06:30 on 2020-07-01 and 18:45 on 2020-07-02.
<?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>
Yearless date ranges
The following example shows a case where the CheckInDates
element contains DateRanges
that have start
and end
fields without years. In this example, the promotion applies to check-in dates between 12/29 and 1/2, regardless of the year. Yearless date ranges that cross the new-year boundary are invalid, so the DateRange is expressed as two adjacent date ranges.
<?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 discount
The following example discounts two nights 50% for each four nights stayed for the specified range of booking dates. For a ten night itinerary, a total of four nights would be discounted 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>
The next example discounts one night 50% for each three nights stayed for the specified ranges of stay dates. Only the overlapping nights of stay count towards qualifying for the discount. For the following itinerary with check-in on 2022-01-01 and check-out on 2022-01-07, the qualified nights of stay and discounts are applied as follows.
- 2022-01-01 (stay)
- 2022-01-02 (stay)
- 2022-01-03
- 2022-01-04 (discounted)
- 2022-01-05 (stay)
- 2022-01-06 (stay)
<?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>
Ranked Selection
The following example offers two discounts, one for 20% off and another for 15% off. During evaluation, only the 15% discount is applied because it has a lower rank.
<?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
The following example discounts a two night stay by applying BestDailyDiscount
stacked with a 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>
Consider a two night stay from April 30, 2023 to May 2, 2023 For calculation, the combination of best daily discounts that yields the deepest discount is found first.
For the first night, the "general" promotion is the only eligible amount with a fixed discount of 20.
For the second night, the "may" promotion offers a deeper discount than the "general" discount. So, when "may" is selected the fixed discount amount is 50.
Then for the stay, the "fiesta" promotion discounts to 5 per night, or 10 total. It can be stacked with the combination of best daily discounts because "fiesta" has stacking type set to any
. If it were set to base
, then only the combination of best daily discounts or the "fiesta" discount is applied. See description of Stacking
for more information.
`Overall, the price of the stay receives a 20 + 50 + 10 = 80 fixed amount discount.
Responses
Syntax
The PromotionsResponse
message uses the following syntax:
<?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>
Elements and Attributes
The PromotionsResponse
message has the following elements and attributes:
Element / @Attribute | Occurrences | Тип | Описание |
---|---|---|---|
PromotionsResponse | 1 | Complex element | The root element indicating the success or issues for a received Promotions request message. |
PromotionsResponse / @timestamp | 1 | DateTime | The creation date and time of this message. |
PromotionsResponse / @id | 1 | string | The unique identifier from the associated Promotions message. |
PromotionsResponse / @partner | 1 | string | The partner account for this message. |
PromotionsResponse / Success | 0..1 | Success | Indicates that the Promotions message was processed successfully without warnings, errors, or failures. Either |
PromotionsResponse / Issues | 0..1 | Issues | A container for one or more issues encountered while processing the Promotions message. Either |
PromotionsResponse / Issues / Issue | 1..n | Issue | The description of a warning, error, or failure encountered while processing the Promotions message. Details on these issues can be found in Feed Status Error Messages . |
PromotionsResponse / Issues / Issue / @code | 1 | integer | The identifier for the issue. |
PromotionsResponse / Issues / Issue / @status | 1 | enum | The type of issue encountered. Valid values are |
Примеры
Success
The following is a response to a successfully processed Promotions message.
<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="2020-05-18T16:20:00-04:00"
id="12345678"
partner="partner_key">
<Success/>
</PromotionsResponse>
Issues
The following is a response to a Promotions message not processed due to errors.
<?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>