Акции

Обзор

Этот 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.

Если у вас есть серверная часть, которая предоставляет каналы для нескольких учетных записей, это значение должно соответствовать значению атрибута ID , указанному в элементе <RequestorID> ваших сообщений <OTA_HotelRateAmountNotifRQ> и <OTA_HotelAvailNotifRQ> для одной и той же учетной записи.

Promotions / @id 1 string Уникальный идентификатор этого сообщения запроса. Это значение возвращается в ответном сообщении. Допустимые символы: az, AZ, 0–9, _ (подчеркивание) и - (тире).
Promotions / @timestamp 1 DateTime Дата и время создания этого сообщения.
Promotions / HotelPromotions 0..n HotelPromotions

Акции на недвижимость. Каждая акция распространяется на один объект недвижимости.

Если не используется <Stacking> , к бронированию применяется акция с наибольшей скидкой, если доступно несколько промоакций.

Promotions / HotelPromotions / @hotel_id 1 string Уникальный идентификатор свойства. Это значение должно соответствовать идентификатору отеля, указанному с помощью <id> в элементе <listing> в фиде списка отелей. Идентификатор отеля также указан в Hotel Center .
Promotions / HotelPromotions / @action 0..1 enum

Если указано, значение должно быть "overlay" . Если установлено значение "overlay" , все сохраненные рекламные акции удаляются перед сохранением рекламных акций, указанных в текущем сообщении.

Если не указано, то каждая рекламная акция, указанная в текущем сообщении, является либо:

  • Added (если ни одна из сохраненных рекламных акций не имеет одинаковый id )
  • Updated (если сохраненная промоакция имеет тот же id )
  • Deleted (если сохраненная акция имеет тот же id и значение атрибута action для акции, указанной в текущем сообщении, равно "delete" ).
Promotions / HotelPromotions / Promotion 0..99 Promotion

Единая акция на объект. Обратите внимание: если action="overlay" и <Promotion> не указаны, все рекламные акции для свойства удаляются.

Если вам нужно использовать более 99 рекламных акций, обратитесь к своему техническому менеджеру по работе с клиентами (TAM).

Promotions / HotelPromotions / Promotion / @id 1 string Уникальный идентификатор акции. Максимально допустимое количество символов — 40. Допустимые символы: az, AZ, 0–9, _ (подчеркивание), - (тире) и . (период).
Promotions /HotelPromotions / Promotion / @action 0..1 enum

Если указано, значение должно быть delete . Если не указано и акция с таким id не сохранена, то эта акция сохраняется. В противном случае, если не указано и сохраняется акция с тем же id , существующая акция обновляется.

Если указано delete , сохраненная акция с тем же id будет удалена. При использовании delete не включайте дочерние элементы в <Promotion> . Кроме того, delete не допускается в сочетании с <HotelPromotions action="overlay"/> .

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

Начальная дата или дата и время (в зависимости от часового пояса свойства) диапазона включительно.

  • Дата или дата-время, указанные в start должны быть раньше (или совпадать с) датой или датой-временем, указанными в end .
  • Если start не указан, диапазон фактически не ограничен с точки зрения времени начала.
  • Если start указывается как дата «ГГГГ-ММ-ДД», оно интерпретируется как дата-время «ГГГГ-ММ-ДДТ00:00:00».
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end 0..1 Date или DateTime

Конечная дата или дата и время (в зависимости от часового пояса свойства) диапазона включительно.

  • Дата или дата-время, указанные в end должны быть позже (или совпадать с) датой или датой-временем, указанными в start .
  • Если end не указан, диапазон фактически не ограничен с точки зрения времени окончания.
  • Если end указан как дата «ГГГГ-ММ-ДД», он интерпретируется как дата-время «ГГГГ-ММ-ДДТ23:59:59».
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @days_of_week 0..1 string

Дни недели, которые разрешены в диапазоне дат. Если не указано, в диапазоне дат разрешены все дни. Каждый символ в строке указывает день. Например, «MTWHF» указывает, что в диапазоне дат разрешены дни недели.

Допустимые символы:

  • M на понедельник
  • T во вторник
  • W для среды
  • H для четверга
  • F для пятницы
  • S для субботы
  • U на воскресенье

Любая комбинация символов допустима.

Promotions / HotelPromotions / Promotion / BookingWindow 0..1 BookingWindow Указывает период времени, в течение которого должно происходить бронирование, относительно даты заезда (в зависимости от часового пояса объекта размещения). Например, период бронирования может быть установлен минимум на 7, но не более чем на 180 дней до заезда.
Promotions / HotelPromotions / Promotion / BookingWindow / @min 0..1 integer or duration Чтобы акция могла быть применена, должна пройти минимальная продолжительность до регистрации заезда при бронировании. Если это не указано или его значение равно 0 , минимума нет.

Допустимые типы значений:

  • Целое число: количество дней до даты заезда. Например, значение 30 означает, что акция распространяется только на бронирования не менее чем за 30 дней до даты заезда.
  • ISO 8601 Продолжительность (дни, часы и минуты): количество дней (и, возможно, часов/минут) до даты регистрации. Например, значение P30D означает, что акция распространяется только на бронирования, сделанные не менее чем за 30 дней до даты заезда. Стоимость P30DT6H требует бронирования не позднее 18:00 30-го дня до прибытия.
Promotions / HotelPromotions / Promotion / BookingWindow / @max 0..1 integer or duration Для применения акции необходимо максимальное количество дней до заезда при бронировании. Если это значение не указано или его значение равно 0 , максимума нет.

Допустимые типы значений:

  • Целое число: количество дней до даты заезда. Например, значение 30 означает, что акция распространяется только на бронирования, сделанные не позднее, чем за 30 дней до даты заезда.
  • ISO 8601 Продолжительность (дни, часы и минуты): количество дней (и, возможно, часов/минут) до даты регистрации. Например, значение P30D означает, что акция распространяется только на бронирования, сделанные не позднее, чем за 30 дней до даты заезда. Стоимость P30DT6H требует бронирования не позднее 18:00 за 30-й день до прибытия.
Promotions / HotelPromotions / Promotion / Ceiling 0..1 Ceiling

Определяет ограничения на максимальное значение, которое может быть установлено для ставки после применения рекламных акций.

В рекламных акциях всегда должен быть указан <Discount> или <BestDailyDiscount> , поэтому для создания рекламной акции, которая применяет только <Ceiling> , одним из вариантов является установка <Discount> с percentage 0 .

Если настроено группирование, то к одному пребыванию можно применить несколько рекламных акций с <Ceiling> . Для каждой акции будет применяться своя скидка, за которой сразу же будет устанавливаться ее потолок. В следующем примере показано, как каждый потолок влияет на следующее вычисление повышения в стеке.

Пример:

Цена за 1 ночь проживания, при которой AmountBeforeTax равна 100 и действует пакет из двух рекламных акций:

  1. Акция с типом штабелирования base , fixed_amount суммой 25 и максимальной amount_per_night за ночь 60.
  2. Акция с типом накопления second , fixed_amount суммой 25 и максимальной amount_per_night 90.

Вот порядок расчета:

  1. base акция применяется первой и снижает AmountBeforeTax до 75, но затем потолок снижает его до 60 .
  2. second акция снижает AmountBeforeTax с 60 до 35. Это ниже предельного значения в 90, поэтому второй верхний предел не применяется. Окончательная ставка 35 .

Тот факт, что 60 — это более строгий общий потолок, не имеет значения, поскольку он действителен только для своего собственного продвижения, и не может быть единого потолка, охватывающего весь стек промоакций.

Promotions / HotelPromotions / Promotion / Ceiling / @amount_per_night 1 float

Максимальная сумма, которую можно установить за ночь после применения скидки.

Если также указан элемент <Floor> , для него должно быть установлено значение, большее или равное атрибуту amount_per_night в <Floor> .

amount_per_night применяется к налогам и сборам, если они включены в стоимость ночи с помощью AmountAfterTax , но не к тем, которые указаны с помощью TaxFeeInfo.

Promotions / HotelPromotions / Promotion / Floor 0..1 Floor

Определяет ограничения на минимальное значение, которое может быть установлено для ставки после применения рекламных акций.

В рекламных акциях всегда должен быть указан <Discount> или <BestDailyDiscount> , поэтому для создания рекламной акции, которая применяет только <Floor> , можно установить <Discount> с percentage 0 .

Логика <Floor> по-прежнему применяется к скидкам <FreeNights> , даже если к бесплатной ночи применяется скидка 100% .

Если настроено группирование, то к одному пребыванию можно применить несколько рекламных акций с <Floor> . Для каждой акции будет применяться своя скидка, за которой сразу последует ее минимальная цена. В следующем примере показано, как каждый этаж участвует в расчете следующего повышения в стеке.

Пример:

Цена за 1 ночь проживания, при которой AmountBeforeTax равна 100 и действует пакет из двух рекламных акций:

  1. Акция с типом штабелирования base , fixed_amount суммой 25 и amount_per_night за ночь 90.
  2. Промоакция с типом стека second , fixed_amount суммой 25 и минимальной amount_per_night 60.

Вот порядок расчета:

  1. base поощрение применяется первым и снижает AmountBeforeTax до 75, но затем минимальное значение повышает его до 90 .
  2. second акция снижает AmountBeforeTax с 90 до 65. Это выше минимального значения 60, поэтому второй этаж не применяется. Окончательная ставка 65 .

Тот факт, что 90 является более строгим общим уровнем, не имеет значения, поскольку он действителен только для своего собственного повышения, и не может быть единого этажа, охватывающего весь стек повышений.

Promotions / HotelPromotions / Promotion / Floor / @amount_per_night 1 float

Минимальная сумма, которую можно установить за ночь после применения скидки.

Если также указан элемент <Ceiling> , для него должно быть установлено значение, меньшее или равное атрибуту amount_per_night в <Ceiling> .

amount_per_night применяется к налогам и сборам, если они включены в стоимость ночи с помощью AmountAfterTax , но не к тем, которые указаны с помощью TaxFeeInfo.

Promotions / HotelPromotions / Promotion / CheckinDates 0..1 CheckinDates Контейнер для одного или нескольких диапазонов дат, которые определяют, когда должна произойти регистрация, чтобы акция могла быть применена.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange 1..20 DateRange

Чтобы акция могла быть применена, укажите диапазон дат, определяющий, когда должна произойти регистрация заезда. Этот элемент не является обязательным, если вы удаляете одну или несколько рекламных акций.

Также поддерживается формат YearlessDate .

  • Если одна из start или end является безгодовой датой, обе должны быть указаны как безгодичные даты.
  • Бесгодовые диапазоны дат не должны охватывать новый год. Вместо этого представьте диапазон как два соседних диапазона дат. Например, {"12-29", "01-05"} могут быть представлены как {"12-29", "12-31"} и {"01-01", "01-05"} .
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» указывает, что в диапазоне дат разрешены дни недели.

Допустимые символы:

  • M на понедельник
  • T во вторник
  • W для среды
  • H на четверг
  • F для пятницы
  • S для субботы
  • U на воскресенье

Любая комбинация символов допустима.

Promotions / HotelPromotions / Promotion / CheckoutDates 0..1 CheckoutDates Контейнер для одного или нескольких диапазонов дат, которые определяют, когда должно произойти оформление заказа, чтобы акция могла быть применена.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange 1..20 DateRange

Чтобы акция могла быть применена, укажите диапазон дат, определяющий, когда должен произойти выезд. Этот элемент не является обязательным, если вы удаляете одну или несколько рекламных акций.

Также поддерживается формат YearlessDate .

  • Если одна из start или end является безгодовой датой, обе должны быть указаны как безгодичные даты.
  • Бесгодовые диапазоны дат не должны охватывать новый год. Вместо этого представьте диапазон как два соседних диапазона дат. Например, {"12-29", "01-05"} могут быть представлены как {"12-29", "12-31"} и {"01-01", "01-05"} .
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» указывает, что в диапазоне дат разрешены дни недели.

Допустимые символы:

  • M на понедельник
  • T во вторник
  • W для среды
  • H для четверга
  • F для пятницы
  • S для субботы
  • U на воскресенье

Любая комбинация символов допустима.

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

Необходимо указать ровно одно из Discount или BestDailyDiscount .

Указывает скидку, которая будет применяться к этой рекламной акции.

Promotions / HotelPromotions / Promotion / Discount / @percentage 0..1 float

Требуется ровно одно из следующих значений: percentage , fixed_amount , fixed_amount_per_night , fixed_price или fixed_price_per_night .

Десятичное значение от 0 до 100, указывающее процентную скидку. Он применяется к AmountAfterTax (или AmountBeforeTax , если AmountAfterTax не указан).

Примеры:

  • Если AmountAfterTax равен 100, а percentage равен 20, то

    ставка продвижения = AmountAfterTax * (1 – процентная скидка)

    80,00 = 100 * (1 – 0,2)

  • Если AmountBeforeTax равен 100, percentage равен 20, а TaxFeeInfo указывает налог 10, тогда

    ставка продвижения = AmountBeforeTax * (1 – процентная скидка) + налог

    90,00 = 100 * (1 – 0,2) + 10

Promotions / HotelPromotions / Promotion / Discount / @fixed_amount 0..1 float

Требуется ровно одно из следующих значений: percentage , fixed_amount , fixed_amount_per_night , fixed_price или fixed_price_per_night .

Фиксированная сумма, которая вычитается из суммы ночных ставок AmountAfterTax (или суммы ночных ставок AmountBeforeTax , если AmountAfterTax не указана). Предполагается, что он будет в той же валюте, что и ночные тарифы. Если оно больше суммы ночных тарифов, результирующее значение равно нулю.

Примеры:

  • Если мы устанавливаем цену за 1 ночь проживания, где AmountBeforeTax равна 90, AmountAfterTax равна 100, а fixed_amount равна 20, то

    ставка продвижения = AmountAfterTax - фиксированная скидка

    80,00 = 100 – 20

  • Если мы устанавливаем цену за 1 ночь проживания, где AmountBeforeTax равно 100, fixed_amount равно 20, а TaxFeeInfo указывает налог в размере 8 %, то

    ставка продвижения = ( AmountBeforeTax — фиксированная скидка) * (1 + процентный налог)

    86,40 = (100 – 20) * 1,08

  • Если мы устанавливаем цену за 1 ночь проживания, где AmountBeforeTax равен 50, fixed_amount равен 60, а TaxFeeInfo указывает налог в размере 10, то

    ставка продвижения = ( AmountBeforeTax — фиксированная скидка) * налог

    10.00 = 0 + 10

  • Если мы устанавливаем цену проживания на 3 ночи, где значения AmountAfterTax равны 100, 110 и 120; и fixed_amount равна 150, тогда

    ставка продвижения = сумма( AmountAfterTax ) - (фиксированная скидка)

    180,00 = (100 + 110 + 120) - 150

Promotions / HotelPromotions / Promotion / Discount / @fixed_amount_per_night 0..1 float

Требуется ровно одно из следующих значений: percentage , fixed_amount , fixed_amount_per_night , fixed_price или fixed_price_per_night .

Фиксированная скидка, применяемая к каждой ночной ставке AmountAfterTax (или самой дешевой N, если указано applied_nights ). Если AmountAfterTax не указан, он применяется к AmountBeforeTax . Предполагается, что он будет в той же валюте, что и ночные тарифы. Если fixed_amount_per_night больше ночной ставки, эта ночная ставка уменьшается до нуля — скидка не может привести к тому, что ночная ставка станет отрицательной.

Примеры:

  • Если мы устанавливаем цену проживания на 3 ночи, где значения AmountAfterTax равны 100, 110 и 120; и fixed_amount_per_night равна 10, тогда

    ставка продвижения = сумма( AmountBeforeTax - скидка фиксированной суммы)

    300,00 = ((100 – 10) + (110 – 10) + (120 – 10))

  • Если мы устанавливаем цену за 3-дневное пребывание, где значения AmountAfterTax равны 10, 50 и 100; и fixed_amount_per_night равна 20, тогда

    ставка продвижения = сумма( AmountAfterTax - скидка фиксированной суммы)

    110,00 = (0 + (50 – 20) + (100 – 20))

Promotions / HotelPromotions / Promotion / Discount / @fixed_price 0..1 float

Требуется ровно одно из следующих значений: percentage , fixed_amount , fixed_amount_per_night , fixed_price или fixed_price_per_night .

Если указаны ночные тарифы AmountAfterTax , то цена проживания, включая налоги и сборы, будет установлена ​​на указанное значение. Если указан AmountBeforeTax , то вне зависимости от того, указан ли AmountAfterTax , цена пребывания до уплаты налогов будет равна указанному значению. Предполагается, что он будет в той же валюте, что и ночные тарифы.

Если AmountAfterTax предназначен для отражения процентного налога, то установка фиксированной цены для AmountBeforeTax может привести к неточным расчетам налогов и сборов. Как правило, настоятельно рекомендуется использовать TaxFeeInfo для указания налогов и сборов объекта недвижимости.

Примеры:

  • Если мы устанавливаем цену за 1 ночь проживания, где AmountBeforeTax равна 90, AmountAfterTax — 100, а fixed_price — 80, то ставка продвижения равна 80.
  • Если мы устанавливаем цену за 1 ночь проживания, где AmountBeforeTax равно 100, fixed_amount равно 80, а TaxFeeInfo указывает налог в размере 8 %, то

    ставка продвижения = фиксированная цена * (1 + процентный налог)

    86,40 = 80 * 1,08

  • Если мы устанавливаем цену проживания на 3 ночи, где значения AmountAfterTax равны 100, 110 и 120; и fixed_amount равна 300, тогда

    ставка продвижения = 300

Promotions / HotelPromotions / Promotion / Discount / @fixed_price_per_night 0..1 float

Требуется ровно одно из следующих значений: percentage , fixed_amount , fixed_amount_per_night , fixed_price или fixed_price_per_night .

Если указаны ночные тарифы AmountAfterTax , то цена за каждую ночь пребывания, включая налоги и сборы, устанавливается равной указанному значению. Если указан AmountBeforeTax , то вне зависимости от того, указан ли AmountAfterTax , цена до уплаты налогов за каждую ночь пребывания будет равна указанному значению. Предполагается, что он будет в той же валюте, что и ночные тарифы.

Если AmountAfterTax предназначен для отражения процентного налога, то установка фиксированной цены для AmountBeforeTax может привести к неточным расчетам налогов и сборов. Как правило, настоятельно рекомендуется использовать TaxFeeInfo для указания налогов и сборов объекта недвижимости.

Если указано applied_nights , то новая цена применяется к самым дешевым N ночам.

Примеры:

  • Если мы устанавливаем цену проживания на 2 ночи, где значения AmountBeforeTax равны 90, 90; Значения AmountAfterTax — 100, 100; и fixed_price равна 80, то ставка продвижения равна 80 + 80 = 160.
  • Если мы устанавливаем цену проживания на 2 ночи, где AmountBeforeTax равна 100, 100; fixed_amount — 80, а TaxFeeInfo указывает налог в размере 8 %, тогда ставка продвижения равна (80 + 80) * 1,08 = 172,8.
  • Если мы устанавливаем цену проживания на 3 ночи, где значения AmountAfterTax равны 100, 110 и 120; а fixed_amount равна 110, то ставка продвижения равна 110 * 3 = 330.
Promotions / HotelPromotions / Promotion / Discount / @applied_nights 0..1 integer

Это следует использовать только с percentage или fixed_amount_per_night .

Количество ночей, на которые распространяется скидка, начиная с самых дешевых. Должно быть целое число от 1 до 99. Если не указано, скидка распространяется на все ночи.

Promotions / HotelPromotions / Promotion / Discount / FreeNights 0..1 FreeNights Определяет скидку на определенные ночи проживания при соблюдении минимальной продолжительности пребывания. Атрибуты родительского элемента Discount не допускаются, если этот элемент используется.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights 1 integer

Количество необходимых ночей для применения скидки. Каждая скидка распространяется на отдельный сегмент ночей проживания.

Например, для пребывания на 10 ночей, где stay_nights равно 4 (и repeats верно), существует два сегмента ночей пребывания: с 1-й по 4-ю ночи и с 5-й по 8-ю ночи; 9-я и 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

Можно ли применить скидку к нескольким сегментам проживания на сутки. Если false , то скидка предоставляется только на сегмент ночей пребывания в начале маршрута. Если true , то любой сегмент ночей проживания предоставляется со скидкой.

Например, если stay_nights равно 4, а маршрут — 10 ночей, то, если repeats равно true , скидка дается на 2 сегмента (ночи 1–4 и ночи 5–8); но если repeats имеют значение false , скидка предоставляется только на 1 сегмент (ночи 1–4).

Promotions / HotelPromotions / Promotion / Discount / @rank 0..1 integer Присваивает этой акции рейтинг и включает ее в рейтинговый выбор, при котором для применения выбирается только акция с самым низким рейтингом. Значения должны быть в диапазоне от 1 до 99 включительно. Если несколько рекламных акций имеют один и тот же ранг, то одна из них выбирается и применяется произвольно.
Promotions / HotelPromotions / Promotion / BestDailyDiscount 1 Discount

Необходимо указать ровно одно из Discount или BestDailyDiscount .

Определяет ежедневную скидку, которая может быть применена к одной ночи проживания. Это отличие от Discount , которая применяет скидки на весь период проживания.

У каждого объекта может быть одна группа акций, которые считаются «лучшими за день». Это означает, что для каждой ночи проживания выбирается и может быть применена одна «лучшая дневная» акция, которая соответствует критериям и дает наибольшую скидку за эту ночь.

Stacking можно указать с помощью BestDailyDiscount . Для него должно быть установлено значение base или none . «Лучшие ежедневные» скидки, дающие максимальную скидку за каждую ночь, объединяются и рассматриваются как скидка на однократное проживание (т. е. « Discount ) с учетом настроенного типа суммирования. Эта объединенная скидка сравнивается с другими подходящими акциями <Discount> и может суммироваться с ними, чтобы найти ту или комбинацию, которая обеспечивает наибольшую скидку. Либо комбинация BestDailyDiscount , либо одна Discount , в зависимости от того, что дает более низкую цену, выбирается и применяется для base типа накопления.

Для этого типа скидки можно указать StayDates , но в application необходимо настроить overlap

.
Promotions / HotelPromotions / Promotion / BestDailyDiscount / @percentage 0..1 float

Требуется ровно один из percentage , fixed_amount или fixed_price .

Десятичное значение от 0 до 100, указывающее процентную скидку. Он применяется к AmountAfterTax (или AmountBeforeTax , если AmountAfterTax не указан).

Примеры:

  • Если AmountAfterTax за ночь проживания равна 100, а percentage равен 20, то

    ставка продвижения = AmountAfterTax * (1 – процентная скидка)

    80,00 = 100 * (1 – 0,2)

  • Если AmountBeforeTax за срок пребывания равен 100, percentage равен 20, а TaxFeeInfo указывает налог в размере 10, тогда

    ставка продвижения = AmountBeforeTax * (1 – процентная скидка) + налог

    90,00 = 100 * (1 – 0,2) + 10

Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_amount 0..1 float

Требуется ровно один из percentage , fixed_amount или fixed_price .

Фиксированная сумма, которая будет вычтена из одной ночной ставки AmountAfterTax (или ночной ставки AmountBeforeTax , если AmountAfterTax не указана). Предполагается, что он будет в той же валюте, что и ночные тарифы. Если оно больше суммы ночных тарифов, результирующее значение равно нулю.

Примеры:

  • Если AmountBeforeTax за одну ночь равен 90, AmountAfterTax — 100, а fixed_amount — 20, то

    ставка продвижения = AmountAfterTax - фиксированная скидка

    80,00 = 100 – 20

  • Если AmountBeforeTax за одну ночь равен 100, fixed_amount равен 20, а TaxFeeInfo указывает налог в размере 8 %, то

    ставка продвижения = ( AmountBeforeTax — фиксированная скидка) * (1 + процентный налог)

    86,40 = (100 – 20) * 1,08

Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_price 0..1 float

Требуется ровно одно из percentage , fixed_amount или fixed_price .

Если указаны ночные тарифы AmountAfterTax , то цена за ночь проживания, включая налоги и сборы, устанавливается на указанное значение. Если указан AmountBeforeTax , то вне зависимости от того, указан ли AmountAfterTax , цена пребывания до уплаты налогов будет равна указанному значению. Предполагается, что он будет в той же валюте, что и ночные тарифы.

Примеры:

  • Если AmountBeforeTax за одну ночь равен 90, AmountAfterTax — 100, а fixed_price — 80, то ставка продвижения равна 80.
  • Если AmountBeforeTax за одну ночь равен 100, fixed_amount равен 80, а TaxFeeInfo указывает налог в размере 8 %, то

    ставка продвижения = фиксированная цена * (1 + процентный налог)

    86,40 = 80 * 1,08

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

Контейнер для правила уровня членства, которое запускает специальную обработку пользовательского интерфейса для соответствующей скидки.

Этот элемент не следует указывать, если также не указан <Discount> .

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

В зависимости от этого параметра к одному тарифу можно применить несколько промоакций:

  • any : можно комбинировать с любой другой рекламной акцией (кроме none ), но порядок применения промоакций не гарантируется.
  • base : лучшая base акция, соответствующая критериям, выбирается и применяется в первую очередь, перед другими акциями. Ранее это называлось base_only .
  • second : лучшая подходящая second акция выбирается и применяется после base акции (если применимо) и перед any рекламными акциями.
  • none : не суммируется с другими акциями.

Из разрешенных комбинаций к ставке применяется тот набор акций, который дает наибольшую скидку.

Promotions / HotelPromotions / Promotion / StayDates 0..1 StayDates Контейнер для одного или нескольких диапазонов дат, определяющих порядок применения промоакции, например для учета сезонных скидок.
Promotions / HotelPromotions / Promotion / StayDates / @application 1 enum

Описывает, как следует применять поощрение.

Допустимые значения:

  • all : акция применяется к каждой ночи в маршруте, если все даты в маршруте совпадают с датами пребывания.
  • any : акция применяется ко всем ночам в маршруте, если какая-либо дата в маршруте совпадает с датой в диапазоне дат пребывания.
  • overlap : акция применяется только к тем ночам в маршруте, которые совпадают с датой в диапазоне дат пребывания.

Этот атрибут должен быть указан всегда.

  • Если <Discount> указывает percentage , а application установлено значение all или any , скидка применяется как процент от полной стоимости проживания.
  • Если <Discount> указывает percentage , а application настроено на overlap , скидка применяется как процент от ночных тарифов для перекрывающихся ночей.
  • <Discount> , указывающая fixed_amount и набор application для overlap является недопустимой комбинацией.
  • <FreeNights> поддерживает все значения application . Обратите внимание, что в случае overlap учитываются только перекрывающиеся ночи пребывания.
Promotions / HotelPromotions / Promotion / StayDates / DateRange 1..99 DateRange

Диапазон дат, определяющий даты, когда будет применяться акция.

Также поддерживается формат YearlessDate .

  • Если одна из start или end является безгодовой датой, обе должны быть указаны как безгодичные даты.
  • Бесгодовые диапазоны дат не должны охватывать новый год. Вместо этого представьте диапазон как два соседних диапазона дат. Например, {"12-29", "01-05"} могут быть представлены как {"12-29", "12-31"} и {"01-01", "01-05"} .

Если вы хотите установить диапазон StayDates , чтобы разрешить продвижение акции в определенные дни недели, вам следует установить дату start как текущую дату без end , чтобы срок действия акции не истек.

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start 0..1 Date or YearlessDate Дата начала (в зависимости от часового пояса объекта), включая диапазон дат. Эта дата должна быть раньше или совпадать с датой end . Если start не указано, диапазон дат фактически не ограничен с точки зрения даты начала.

Вам следует указать start значение, если end значение не указано.

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end 0..1 Date or YearlessDate Конечная дата (в зависимости от часового пояса объекта), включая диапазон дат. Эта дата должна совпадать с датой start или быть позже нее. Если end не указан, диапазон дат фактически не ограничен, начиная с даты start .

Вам следует указать end значение, если start значение не указано.

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @days_of_week 0..1 string

Дни недели, которые разрешены в диапазоне дат. Если не указано, в диапазоне дат разрешены все дни. Каждый символ в строке указывает день. Например, «MTWHF» указывает, что в диапазоне дат разрешены дни недели.

Допустимые символы:

  • M на понедельник
  • T во вторник
  • W для среды
  • H на четверг
  • F для пятницы
  • S для субботы
  • U на воскресенье

Любая комбинация символов допустима.

Promotions / HotelPromotions / Promotion / UserCountries 0..1 UserCountries Контейнер для перечисления пользовательских местоположений (стран), подпадающих под действие акции. Если указано, скидка предоставляется только соответствующим критериям пользователям в перечисленных странах. Если не указано иное, соответствующим критериям пользователям в любой стране предлагается скидка.
Promotions / HotelPromotions / Promotion / UserCountries / @type 0..1 enum Тип спецификации UserCountries.

Допустимые значения include и exclude .

Если type UserCountries установлено include , акция распространяется на пользователей из перечисленных стран.

Если type UserCountries exclude , акция распространяется на пользователей за пределами перечисленных стран.

Если type UserCountries не установлен, он рассматривается как include , и акция применяется к пользователям из перечисленных стран.

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>

3 различных типа укладки

В следующем примере показан случай, когда будут применяться три разных акции ( 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 в 2:00 2 -го дня до прибытия.

<?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>


Даты бронирования DateTime Bounds

В следующем примере показан случай, когда элемент BookingDates используется с атрибутами start и end в качестве типов DateTime . Это ограничение даты бронирования требует, чтобы бронирование произошло между 06:30 на 2020-07-01 и 18:45 с 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>


Без годовые даты

В следующем примере показан случай, когда элемент CheckInDates содержит DateRanges , которые имеют поля start и end без лет. В этом примере продвижение применяется к датам регистрации от 12/29 до 1/2, независимо от года. Бесзодранные даты, которые пересекают новую границу, являются недействительными, поэтому датчика выражена как два смежных диапазона даты.

<?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% за каждые четыре ночи оставалось на указанный ассортимент дат бронирования. В течение десяти ночных маршрутов в общей сложности четыре ночи будут сброшены на 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% за каждые три ночи оставались для указанных диапазонов дат пребывания. Только перекрывающиеся ночи пребывания учитываются на квалификацию на скидку. Для следующего маршрута с регистрацией в 2022-01-01 и выходе на 2022-01-07 квалифицированные ночи пребывания и скидки применяются следующим образом.

  • 2022-01-01 (пребывание)
  • 2022-01-02 (пребывание)
  • 03.01.2022
  • 2022-01-04 (дисконтировано)
  • 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 апреля 2023 года по 2 мая 2023 года для расчета, комбинацию лучших ежедневных скидок, которые дают самую глубокую скидку в первую очередь.

В первую ночь «общая» продвижение - единственная подходящая сумма с фиксированной скидкой в ​​20.

Во второй ночи акция «Мэй» предлагает более глубокую скидку, чем «общая» скидка. Таким образом, когда выбирается «может», фиксированная сумма скидки составляет 50.

Затем для пребывания скидки на продвижение «Fiesta» до 5 за ночь или 10. Он может быть сложен с комбинацией лучших ежедневных скидок, потому что «Fiesta» имеет тип укладки, установленную для any . Если он был установлен на base , то применяется только комбинация лучших ежедневных скидок или скидки «fiesta». См. Описание 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 имеет следующие элементы и атрибуты:

Element / @attribute Случаи Тип Описание
PromotionsResponse 1 Complex element Корневой элемент, указывающий на успех или проблемы для сообщения запроса на повышение по службе.
PromotionsResponse / @timestamp 1 DateTime Дата создания и время этого сообщения.
PromotionsResponse / @id 1 string Уникальный идентификатор из ассоциированного сообщения о рекламе.
PromotionsResponse / @partner 1 string Учетная запись партнера для этого сообщения.
PromotionsResponse / Success 0..1 Success Указывает, что сообщение о рекламе было успешно обработано без предупреждений, ошибок или сбоев.

Либо <Success> или <Issues> присутствует в каждом сообщении.

PromotionsResponse / Issues 0..1 Issues Контейнер для одного или нескольких вопросов, возникающих при обработке сообщения о рекламе.

Либо <Success> или <Issues> присутствует в каждом сообщении.

PromotionsResponse / Issues / Issue 1..n Issue Описание предупреждения, ошибки или сбоя встречается при обработке сообщения о рекламе. Подробности по этим вопросам можно найти в сообщениях об ошибках состояния подачи .
PromotionsResponse / Issues / Issue / @code 1 integer Идентификатор для проблемы.
PromotionsResponse / Issues / Issue / @status 1 enum

Тип проблемы столкнулся.

Допустимые значения - это warning , error и failure .

Примеры

Успех

Ниже приведен ответ на успешно обработанное сообщение по акциям.

<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="2020-05-18T16:20:00-04:00"
                    id="12345678"
                    partner="partner_key">
  <Success/>
</PromotionsResponse>

Проблемы

Ниже приведен ответ на сообщение о промоушении, не обработанное из -за ошибок.

<?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>