推广

概览

此 API 可让您指定可能的折扣。在指定的所有促销活动中,Google 会应用符合条件且可实现最低价格的促销活动或一组促销活动。如果您需要一个支持任意费率调整的 API,该 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, percentage_of_base, fixed_amount,
           fixed_amount_per_night, fixed_price, or fixed_price_per_night;
           applied_nights is only used with percentage, fixed_amount_per_night,
           and fixed_price_per_night. -->
      <Discount percentage="float" percentage_of_base="float"
                fixed_amount="float" fixed_amount_per_night="float"
                fixed_price="float" fixed_price_per_night="float"
                applied_nights="integer_1_to_99" rank="integer_1_to_99">
        <!-- FreeNights may not be used in conjunction with attributes on Discount -->
        <FreeNights stay_nights="integer" discount_nights="integer"
                    discount_percentage="float" night_selection="[cheapest|last]"
                    repeats="boolean"/>
      </Discount>
      <!-- Exactly one of Discount or BestDailyDiscount must be specified.
           Specify only one of percentage, fixed_amount, or fixed_price. -->
      <BestDailyDiscount percentage="float" fixed_amount="float" fixed_price="float"/>
      <Devices>
        <Device type="[desktop|tablet|mobile]"/>
      </Devices>
      <InventoryCount min="integer" max="integer"/>
      <LengthOfStay min="integer" max="integer"/>
      <MembershipRateRule id="RateRuleID"/>
      <MinimumAmount before_discount="integer"/>
      <Occupancy min="integer" max="integer"/>
      <RatePlans>
        <RatePlan id="PackageID_1"/>
        <RatePlan id="PackageID_2"/>
      </RatePlans>
      <RoomTypes>
        <RoomType id="RoomID_1"/>
        <RoomType id="RoomID_2"/>
      </RoomTypes>
      <Stacking type="[any|base|none|second]"/>
      <StayDates application="[all|any|overlap]">
        <DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
      </StayDates>
      <UserCountries type="[include|exclude]">
        <Country code="country_code"/>
      </UserCountries>
    </Promotion>
  </HotelPromotions>
</Promotions>

元素和属性

促销消息具有以下元素和属性:

元素 / @Attribute 出现次数 类型 说明
Promotions 1 Complex element 促销消息的根元素。
Promotions / @partner 1 string 相应消息的合作伙伴账号。此字符串值是 Hotel Center 中 “账号设置”页面上列出的“合作伙伴密钥”值。

如果您有一个可为多个账号提供 Feed 的后端,则此值需要与同一账号的 <OTA_HotelRateAmountNotifRQ><OTA_HotelAvailNotifRQ> 消息的 <RequestorID> 元素中指定的 ID 属性值相匹配。

Promotions / @id 1 string 相应请求消息的唯一标识符。此值会在响应消息中返回。允许使用的字符包括 a-z、A-Z、0-9、_(下划线)和 -(短划线)。
Promotions / @timestamp 1 DateTime 相应消息的创建日期和时间。
Promotions / HotelPromotions 0..n HotelPromotions

媒体资源的促销信息。每项促销活动都适用于单个媒体资源。

除非使用 <Stacking>,否则当有多个促销活动符合条件时,系统会将折扣力度最大的促销活动应用于预订。

Promotions / HotelPromotions / @hotel_id 1 string 房源的唯一标识符。此值必须与酒店列表 Feed 中使用 <id><listing> 元素中指定的酒店 ID 一致。您还可以在 Hotel Center 中找到酒店 ID。
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。允许使用的字符包括 a-z、A-Z、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 DateDateTime

相应范围的开始日期或日期时间(根据媒体资源的时区),含。

  • start 指定的日期或日期时间必须早于(或等于)end 指定的日期或日期时间。
  • 如果未指定 start,则范围在开始时间方面实际上不受限制。
  • 如果 start 填充为日期“YYYY-MM-DD”,则会被解读为日期时间“YYYY-MM-DDT00:00:00”。
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end 0..1 Date DateTime

相应范围的结束日期或日期时间(基于媒体资源的所在时区),含结束日期。

  • end 指定的日期或日期时间必须晚于(或等于)start 指定的日期或日期时间。
  • 如果未指定 end,则范围在结束时间方面实际上不受限制。
  • 如果 end 以日期“YYYY-MM-DD”的形式提供,则会被解读为日期时间“YYYY-MM-DDT23: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 表示必须在抵达前第 30 天的 18:00 或之前预订。
Promotions / HotelPromotions / Promotion / BookingWindow / @max 0..1 integer or duration 预订必须在入住前多少天内完成,才能享受相应促销优惠。如果未指定此参数或其值为 0,则没有上限。

有效的值类型包括:

  • 整数:入住日期之前的天数。例如,值为 30 表示促销活动仅适用于入住日期前最多 30 天的预订。
  • ISO 8601 时长(天、小时和分钟):入住日期之前的天数(以及可选的小时/分钟数)。例如,值为 P30D 表示相应促销活动仅适用于入住日期前最多 30 天的预订。值为 P30DT6H 表示必须在抵达前第 30 天的 18:00 或之后进行预订。
Promotions / HotelPromotions / Promotion / Ceiling 0..1 Ceiling

定义了应用促销活动后,费率可设置到的最大值的限制。

促销活动必须始终指定 <Discount><BestDailyDiscount>,因此若要创建仅应用 <Ceiling> 的促销活动,一种方法是将 <Discount> 设置为 percentage,并将 percentage 设置为 0

如果配置了叠加,则具有 <Ceiling> 的多个促销活动可应用于单次住宿。每项促销活动都会先应用折扣,然后立即应用上限。 以下示例展示了每个上限如何影响堆栈中的下一次晋升计算。

示例:

为 1 晚住宿定价,其中 AmountBeforeTax 为 100,并且有两项叠加促销活动:

  1. 堆叠类型为 basefixed_amount 为 25 且上限 amount_per_night 为 60 的促销活动
  2. 叠加类型为 secondfixed_amount 为 25 且上限为 amount_per_night 的促销活动

计算顺序如下:

  1. 系统会先应用 base 促销活动,将 AmountBeforeTax 折扣降至 75,但随后上限会将其降至 60
  2. second 促销活动将 AmountBeforeTax 从 60 降至 35。这低于 90 的上限,因此不应用第二个上限。最终费率为 35

60 是更严格的总体上限这一事实无关紧要,因为该上限仅适用于其自身的促销活动,并且不存在涵盖整个促销活动堆栈的单一上限。

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

应用折扣后,每晚房价可设置到的最高金额。

如果还指定了 <Floor> 元素,则必须将此元素设置为大于或等于 <Floor>amount_per_night 属性的值。

如果税费和费用包含在每晚房价中(使用 AmountAfterTax),则会应用 amount_per_night;但如果税费和费用是使用 TaxFeeInfo 指定的,则不会应用 amount_per_night

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

定义了应用促销活动后,费率可设置的最小值限制。

促销活动必须始终指定 <Discount><BestDailyDiscount>,因此若要创建仅应用 <Floor> 的促销活动,一种方法是将 <Discount> 设置为 percentage,并将 percentage 设置为 0

<Floor> 逻辑仍然适用于<FreeNights>折扣,即使免费晚数已应用100%折扣。

如果配置了叠加,则具有 <Floor> 的多个促销活动可应用于单次住宿。每项促销活动都会先应用折扣,然后立即应用底价。 以下示例展示了每个下限在堆栈中如何影响下一次升迁计算。

示例:

为 1 晚住宿定价,其中 AmountBeforeTax 为 100,并且有两项叠加促销活动:

  1. 堆叠类型为 basefixed_amount 为 25 且下限 amount_per_night 为 90 的促销活动
  2. 堆叠类型为 secondfixed_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> 元素,则必须将此属性设置为小于或等于 <Ceiling>amount_per_night 属性的值。

如果税费和费用包含在每晚房价中(使用 AmountAfterTax),则会应用 amount_per_night;但如果税费和费用是使用 TaxFeeInfo 指定的,则不会应用 amount_per_night

Promotions / HotelPromotions / Promotion / CheckinDates 0..1 CheckinDates 一个容器,用于存放一个或多个日期范围,这些日期范围用于定义必须在何时办理入住手续才能应用相应促销活动。
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange 1..20 DateRange

一个日期范围,用于指定必须在何时办理入住才能应用相应促销活动。如果您要删除一项或多项宣传广告,则无需提供此元素。

系统还支持 YearlessDate 格式。

  • 如果 startend 之一是不含年份的日期,则两者都必须填充为不含年份的日期。
  • 不含年份的日期范围不得跨年。请改为将该范围表示为两个相邻的日期范围。例如,{"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 一种设备类型。值必须为 desktoptabletmobile
Promotions / HotelPromotions / Promotion / Discount 1 Discount

必须指定 DiscountBestDailyDiscount 中的一项。

指定要为此促销活动应用的折扣。

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

必须提供 percentagepercentage_of_basefixed_amountfixed_amount_per_nightfixed_pricefixed_price_per_night 中的一个。

一个介于 0 到 100 之间的十进制值,用于指定折扣百分比。 它会应用于 AmountAfterTax(如果未指定 AmountAfterTax,则应用于 AmountBeforeTax)。

示例:

  • 如果 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 / @percentage_of_base 0..1 float

必须提供 percentagepercentage_of_basefixed_amountfixed_amount_per_nightfixed_pricefixed_price_per_night 中的一个。

一个介于 0 到 100 之间的十进制值,用于指定基本折扣的百分比。与 percentage 类似,它应用于 AmountAfterTax(如果未指定 AmountAfterTax,则应用于 AmountBeforeTax)。

percentage 不同,无论之前依次应用了哪些促销活动,此折扣始终按基本费率的百分比计算。

示例:

  • 假设我们有两项促销活动,它们按顺序应用于一晚的住宿,价格为 100。第一个是常规的 10% 百分比折扣,第二个是基础价格的 10% 百分比折扣。这样一来,折扣后的价格将为 80,因为这两项促销活动都可减免 10。请注意,如果第二项促销活动也是常规的百分比折扣,那么折扣后的价格将为 81,因为第二项促销活动可减免 90 的 10%。
Promotions / HotelPromotions / Promotion / Discount / @fixed_amount 0..1 float

必须提供 percentagepercentage_of_basefixed_amountfixed_amount_per_nightfixed_pricefixed_price_per_night 中的一个。

要从 AmountAfterTax 每晚价格的总和(如果未指定 AmountAfterTax,则为 AmountBeforeTax 每晚价格的总和)中减去的固定金额。假设与每晚房价采用相同的币种。如果此值大于每晚价格的总和,则结果值为零。

示例:

  • 如果我们为 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,则

    促销费率 = sum(AmountAfterTax) -(固定折扣)

    180.00 = (100 + 110 + 120) - 150

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

必须提供 percentagepercentage_of_basefixed_amountfixed_amount_per_nightfixed_pricefixed_price_per_night 中的一个。

应用于每个AmountAfterTax每晚房价(如果指定了 applied_nights,则应用于最便宜的 N 晚房价)的固定折扣。如果未指定 AmountAfterTax,则将其应用于 AmountBeforeTax。假设与每晚房价采用相同的币种。如果 fixed_amount_per_night 大于某个每晚价格,则该每晚价格会降至零,折扣不能导致每晚价格变为负值。

示例:

  • 如果我们为 3 晚住宿定价,其中 AmountAfterTax 值分别为 100、110 和 120,且 fixed_amount_per_night 为 10,则

    促销费率 = sum(AmountBeforeTax - 固定金额折扣)

    300.00 = ((100 - 10) + (110 - 10) + (120 - 10))

  • 假设我们为 3 晚住宿定价,其中 AmountAfterTax 值分别为 10、50 和 100;fixed_amount_per_night 为 20,则

    促销费率 = sum(AmountAfterTax - 固定金额折扣)

    110.00 = (0 + (50 - 20) + (100 - 20))

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

必须提供 percentagepercentage_of_basefixed_amountfixed_amount_per_nightfixed_pricefixed_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,则

    promotion rate = 300

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

必须提供 percentagepercentage_of_basefixed_amountfixed_amount_per_nightfixed_pricefixed_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

此值应仅与 percentagefixed_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 为 true),则有两个住宿晚数段:第 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,则所选的每个晚上的价格均可享受 5 折优惠。
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection 1 string 必须是 cheapestlast。如果值为 last,则住宿晚数段末尾的住宿晚数可享受折扣。如果值为 cheapest,则住宿晚数段中最便宜的晚数可享受折扣。
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats 1 boolean

折扣是否可应用于多个住宿晚数段。如果值为 false,则只有行程开始部分的住宿晚数可享受折扣。如果值为 true,则任何住宿晚数段均可享受折扣。

例如,如果 stay_nights 为 4,行程为 10 晚,则当 repeatstrue 时,系统会为 2 个细分行程提供折扣(第 1-4 晚和第 5-8 晚);但当 repeatsfalse 时,系统只会为 1 个细分行程提供折扣(第 1-4 晚)。

Promotions / HotelPromotions / Promotion / Discount / @rank 0..1 integer 为相应促销活动分配排名,并选择启用排名选择功能,这样系统只会选择排名最低的促销活动来应用。值必须介于 1 到 99 之间(含边界值)。如果多项促销活动的排名相同,系统会任意选择一项并应用。
Promotions / HotelPromotions / Promotion / BestDailyDiscount 1 Discount

必须指定 DiscountBestDailyDiscount 中的一项。

指定可应用于住宿晚数的每日折扣。这与 Discount 不同,后者可为整个住宿提供折扣。

每个房源最多只能有一组被视为“每日最佳”的促销活动。这意味着,对于入住的每个夜晚,系统会选择符合条件且可为该夜晚提供最大折扣的单个“最佳每日”促销活动,并可能会应用该促销活动。

Stacking 可与 BestDailyDiscount 一起指定。必须设置为 basenone。系统会合并每天可享受的“最佳”折扣(即每晚可享受的最大折扣),并将其视为单次住宿折扣(即 Discount),同时遵循配置的叠加类型。此组合折扣会与其他符合条件的 <Discount> 促销活动进行比较,并且可以与这些促销活动叠加使用,以找到可提供最大折扣的促销活动或组合。系统会选择 BestDailyDiscount 的组合或单个 Discount(以价格较低者为准),并将其应用于 base 叠加类型。

可以为这类折扣指定 StayDates,但 application 必须设置为 overlap

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

必须提供 percentagefixed_amountfixed_price 中的一个。

一个介于 0 到 100 之间的十进制值,用于指定折扣百分比。 它会应用于 AmountAfterTax(如果未指定 AmountAfterTax,则应用于 AmountBeforeTax)。

示例:

  • 如果一晚住宿的 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

必须提供 percentagefixed_amountfixed_price 中的一个。

要从单个 AmountAfterTax 每晚房价(如果未指定 AmountAfterTax,则为 AmountBeforeTax 每晚房价)中减去的固定金额。假设与每晚房价采用相同的币种。如果此值大于每晚价格的总和,则结果值为零。

示例:

  • 如果单晚的 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

必须提供 percentagefixed_amountfixed_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

与会员计划关联的 费率规则的 ID。

Promotions / HotelPromotions / Promotion / MinimumAmount 0..1 MinimumAmount 指定应用相应促销活动时必须超过的每日房价总和下限(使用 AmountBeforeTaxAmountAfterTax 中的较大者)。
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 指定费率方案。房价方案由套餐、房价和空房情况组合而成,如交易(房源数据)、OTA_HotelRateAmountNotifRQ 和 OTA_HotelAvailNotifRQ 消息中所定义,并由 PackageID 标识。
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan / @id 1 string 相应费率方案的唯一标识符。此值对应于交易(房源数据)消息中 <PackageData> 的 PackageID 值,以及 <OTA_HotelRateAmountNotifRQ><OTA_HotelAvailNotifRQ> 消息中 <StatusApplicationControl>RatePlanCode 属性。 允许的最大字符数为 50。
Promotions / HotelPromotions / Promotion / RoomTypes 0..1 RoomTypes 包含相应促销活动所适用的房型列表的容器。 促销活动会应用于每个指定的 <RoomType>。如果未指定 <RoomTypes>,则促销活动适用于所有客房。
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType 1..n RoomType 指定房间类型。房间类型在交易(房源数据)消息的 <RoomData> 元素中定义,并使用其 <RoomID> 值进行引用。(OTA_HotelRateAmountNotifRQ 消息中的 InvTypeCode 属性也会引用其 <RoomID> 值。)
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType / @id 1 string 相应房源(房型)的唯一标识符。此值会映射到交易(房源数据)消息中的 <RoomID>。 允许的最大字符数为 50。
Promotions / HotelPromotions / Promotion / Stacking 0..1 Stacking 指定如何组合促销活动。如果未指定,“type”则假定为 base
Promotions / HotelPromotions / Promotion / Stacking / @type 1 enum

根据此设置,可将多项促销活动应用于单个房价:

  • any:可以与任何其他促销优惠(none 除外)叠加使用,但无法保证促销优惠的应用顺序。
  • base:系统会先选择并应用最符合条件的 base 促销活动,然后再应用其他促销活动。之前名为 base_only
  • second:系统会在 base 促销活动(如果适用)之后和 any 促销活动之前选择并应用最符合条件的 second 促销活动。
  • none不能与其他促销活动同时使用。

在允许的组合中,可带来最大折扣的促销活动组合会应用于相应费率。

Promotions / HotelPromotions / Promotion / StayDates 0..1 StayDates 一个或多个日期范围的容器,用于确定促销活动的适用方式,例如用于提供季节性折扣。
Promotions / HotelPromotions / Promotion / StayDates / @application 1 enum

说明促销活动的适用方式。

有效值包括:

  • all:如果行程中的所有日期都与住宿日期重叠,则将促销活动应用于行程中的每个晚上。
  • any:如果行程中的任何日期与住宿日期范围内的日期重叠,则将促销活动应用于行程中的所有晚数。
  • overlap:仅将促销活动应用于行程中与住宿日期范围内的日期重叠的晚数。

必须始终指定此属性。

  • 如果 <Discount> 指定了 percentage,且 application 设置为 allany,则折扣将按整个住宿的百分比应用。
  • 如果 <Discount> 指定了 percentageapplication 设置为 overlap,则折扣将按重叠晚数的每晚房价的百分比应用。
  • 指定 <Discount>fixed_amountapplication 设置为 overlap 是无效的组合。
  • <FreeNights> 支持所有 application 值。请注意,对于overlap,折扣要求仅考虑重叠的住宿晚数。
Promotions / HotelPromotions / Promotion / StayDates / DateRange 1..99 DateRange

一个日期范围,用于指定应用促销活动的日期。

系统还支持 YearlessDate 格式。

  • 如果 startend 之一是不含年份的日期,则两者都必须填充为不含年份的日期。
  • 不含年份的日期范围不得跨年。请改为将该范围表示为两个相邻的日期范围。例如,{"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,则日期范围在开始日期方面实际上不受限制。

如果未提供 end 值,您应指定 start 值。

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end 0..1 Date or YearlessDate 日期范围的结束日期(以媒体资源的时区为准,含)。此日期必须与 start 日期相同或晚于该日期。如果未指定 end,则日期范围实际上从 start 日期开始无限期有效。

如果未提供 start 值,您应指定 end 值。

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 规范的类型。

有效值为 includeexclude

如果 UserCountries type 设置为 include,则促销活动适用于所列国家/地区的用户。

如果 UserCountries typeexclude,则表示相应促销活动适用于所列国家/地区以外的用户。

如果未设置 UserCountries type,则将其视为 include,并且向所列国家/地区的用户应用相应促销活动。

Promotions / HotelPromotions / Promotion / UserCountries / Country 1..300 Country 定义一个用户符合促销条件所在的国家/地区。
Promotions / HotelPromotions / Promotion / UserCountries / Country / @code 1 string CLDR 国家/地区代码,例如 DEFR。请注意,对于某些国家/地区,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 种不同的堆叠类型

以下示例展示了应用三种不同促销优惠 (basesecondany) 的情况。请注意,由于其他促销优惠提供的折扣更优惠,因此不会应用 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 之前以及抵达前 2 天的 12:00 之后进行预订。

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <BookingWindow min="P1DT6H" max="P2DT12H"/>
      <Discount percentage="20"/>
    </Promotion>
  </HotelPromotions>
</Promotions>


预订日期时间界限

以下示例展示了 BookingDates 元素与 startend 属性搭配使用的情况,其中 startend 属性为 DateTime 类型。此预订日期限制要求预订必须在 2020 年 7 月 1 日 06:30 至 2020 年 7 月 2 日 18:45 之间进行。

<?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 元素包含具有 startend 字段但没有年份的 DateRanges。在此示例中,无论年份如何,此促销活动都适用于 12 月 29 日至 1 月 2 日之间的入住日期。跨越新年边界的无年份日期范围无效,因此 DateRange 表示为两个相邻的日期范围。

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <CheckInDates>
         <DateRange start="12-29" end="12-31"/>
         <DateRange start="01-01" end="01-02"/>
      </CheckInDates>
      <Discount percentage="20"/>
    </Promotion>
  </HotelPromotions>
</Promotions>



FreeNights 折扣

以下示例针对指定预订日期范围内的每次四晚住宿,提供两晚 5 折优惠。对于 10 晚的行程,总共有 4 晚可享受 5 折优惠。

<?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 年 1 月 1 日,退房时间为 2022 年 1 月 7 日),符合条件的住宿晚数和折扣将按如下方式应用。

  • 2022-01-01(住宿)
  • 2022-01-02(住宿)
  • 2022-01-03
  • 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>


排名选择

以下示例提供了两种折扣,一种是 8 折,另一种是 85 折。在评估期间,系统只会应用 85 折折扣,因为它的排名较低。

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

以下示例通过应用与 Discount 叠加的 BestDailyDiscount 来为两晚住宿提供折扣。

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

以 2023 年 4 月 30 日至 2023 年 5 月 2 日的两晚住宿为例 在计算时,系统会先找到可实现最大折扣的最佳每日折扣组合。

对于第一晚,“一般”促销活动是唯一符合条件的金额,可享受 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 消息具有以下元素和属性:

元素 / @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 处理促销消息时遇到的警告、错误或失败的说明。如需详细了解这些问题,请参阅Feed 状态错误消息
PromotionsResponse / Issues / Issue / @code 1 integer 问题的标识符。
PromotionsResponse / Issues / Issue / @status 1 enum

遇到的问题类型。

有效值为 warningerrorfailure

示例

成功

以下是成功处理“促销”消息的响应。

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