概览
此 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 的后端,则此值需要与同一账号的 |
| Promotions / @id | 1 | string | 相应请求消息的唯一标识符。此值会在响应消息中返回。允许使用的字符包括 a-z、A-Z、0-9、_(下划线)和 -(短划线)。 |
| Promotions / @timestamp | 1 | DateTime | 相应消息的创建日期和时间。 |
| Promotions / HotelPromotions | 0..n | HotelPromotions | 媒体资源的促销信息。每项促销活动都适用于单个媒体资源。 除非使用 |
| Promotions / HotelPromotions / @hotel_id | 1 | string | 房源的唯一标识符。此值必须与酒店列表 Feed 中使用
<id> 在 <listing> 元素中指定的酒店 ID 一致。您还可以在 Hotel Center 中找到酒店 ID。 |
| Promotions / HotelPromotions / @action | 0..1 | enum | 如果指定了该值,则该值必须为 如果未指定,则当前消息中指定的每个宣传广告都属于以下任一情况:
|
| Promotions / HotelPromotions / Promotion | 0..99 | Promotion | 房源的单项宣传。请注意,如果未指定 如果您需要使用超过 99 个促销活动,请与您的技术支持客户经理 (TAM) 联系。 |
| Promotions / HotelPromotions / Promotion / @id | 1 | string | 相应宣传广告的唯一标识符。允许的最大字符数为 40。允许使用的字符包括 a-z、A-Z、0-9、_(下划线)、-(短划线)和 . (英文句点)。 |
| Promotions /HotelPromotions / Promotion / @action | 0..1 | enum | 如果指定了该值,则该值必须为 如果指定了 |
| Promotions / HotelPromotions / Promotion / BookingDates | 0..1 | BookingDates | 一个容器,用于存放一个或多个范围,这些范围定义了必须在何时进行预订才能应用相应促销活动。 |
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange | 1..99 | DateRange | 一个范围,用于指定必须在何时进行预订才能应用相应促销活动。 |
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @start | 0..1 | Date 或 DateTime | 相应范围的开始日期或日期时间(根据媒体资源的时区),含。
|
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end | 0..1 | Date 或 DateTime | 相应范围的结束日期或日期时间(基于媒体资源的所在时区),含结束日期。
|
| Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @days_of_week | 0..1 | string | 日期范围内允许的星期几。如果未指定,则允许日期范围内的所有日期。字符串中的每个字符都指定了一天。例如,“MTWHF”表示允许在日期范围内包含工作日。 有效字符包括:
任何字符组合均有效。 |
| Promotions / HotelPromotions / Promotion / BookingWindow | 0..1 | BookingWindow | 指定必须在入住日期(基于酒店所在时区)之前预订的时间段。例如,预订窗口可以设置为入住前至少 7 天,但不超过 180 天。 |
| Promotions / HotelPromotions / Promotion / BookingWindow / @min | 0..1 | integer or duration | 预订必须在入住前至少提前多长时间进行,才能应用相应促销活动。如果未指定此参数或其值为 0,则没有最小值。
有效的值类型包括:
|
| Promotions / HotelPromotions / Promotion / BookingWindow / @max | 0..1 | integer or duration | 预订必须在入住前多少天内完成,才能享受相应促销优惠。如果未指定此参数或其值为 0,则没有上限。
有效的值类型包括:
|
| Promotions / HotelPromotions / Promotion / Ceiling | 0..1 | Ceiling |
定义了应用促销活动后,费率可设置到的最大值的限制。 促销活动必须始终指定 如果配置了叠加,则具有 示例: 为 1 晚住宿定价,其中
计算顺序如下:
60 是更严格的总体上限这一事实无关紧要,因为该上限仅适用于其自身的促销活动,并且不存在涵盖整个促销活动堆栈的单一上限。 |
| Promotions / HotelPromotions / Promotion / Ceiling / @amount_per_night | 1 | float |
应用折扣后,每晚房价可设置到的最高金额。 如果还指定了 如果税费和费用包含在每晚房价中(使用 |
| Promotions / HotelPromotions / Promotion / Floor | 0..1 | Floor |
定义了应用促销活动后,费率可设置的最小值限制。 促销活动必须始终指定
如果配置了叠加,则具有 示例: 为 1 晚住宿定价,其中
计算顺序如下:
90 是更严格的总体最低限价这一事实无关紧要,因为该最低限价仅适用于其自身的促销活动,并且不存在涵盖整个促销活动堆栈的单一最低限价。 |
| Promotions / HotelPromotions / Promotion / Floor / @amount_per_night | 1 | float |
应用折扣后,每晚房价可设置的最低金额。 如果还指定了 如果税费和费用包含在每晚房价中(使用 |
| Promotions / HotelPromotions / Promotion / CheckinDates | 0..1 | CheckinDates | 一个容器,用于存放一个或多个日期范围,这些日期范围用于定义必须在何时办理入住手续才能应用相应促销活动。 |
| Promotions / HotelPromotions / Promotion / CheckinDates / DateRange | 1..20 | DateRange | 一个日期范围,用于指定必须在何时办理入住才能应用相应促销活动。如果您要删除一项或多项宣传广告,则无需提供此元素。 系统还支持 YearlessDate 格式。
|
| Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @start | 0..1 | Date or YearlessDate | 日期范围的开始日期(含),以媒体资源所在的时区为准。此日期必须早于或等于 end 日期。如果未指定 start,则日期范围在开始日期方面实际上不受限制。 |
| Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @end | 0..1 | Date or YearlessDate | 日期范围的结束日期(以媒体资源的时区为准,含)。此日期必须与 start 日期相同或晚于该日期。如果未指定 end,则日期范围在结束日期方面实际上不受限制。 |
| Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @days_of_week | 0..1 | string | 日期范围内允许的星期几。如果未指定,则允许日期范围内的所有日期。字符串中的每个字符都指定了一天。例如,“MTWHF”表示允许在日期范围内包含工作日。 有效字符包括:
任何字符组合均有效。 |
| Promotions / HotelPromotions / Promotion / CheckoutDates | 0..1 | CheckoutDates | 一个容器,用于存放一个或多个日期范围,这些日期范围用于定义必须在何时退房才能应用相应促销活动。 |
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange | 1..20 | DateRange | 一个日期范围,用于指定必须在何时退房才能应用相应促销活动。如果您要删除一项或多项宣传广告,则无需提供此元素。 系统还支持 YearlessDate 格式。
|
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @start | 0..1 | Date or YearlessDate | 日期范围的开始日期(含),以媒体资源所在的时区为准。此日期必须早于或等于 end 日期。如果未指定 start,则日期范围在开始日期方面实际上不受限制。 |
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @end | 0..1 | Date or YearlessDate | 日期范围的结束日期(以媒体资源的时区为准,含)。此日期必须与 start 日期相同或晚于该日期。如果未指定 end,则日期范围在结束日期方面实际上不受限制。 |
| Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @days_of_week | 0..1 | string | 日期范围内允许的星期几。如果未指定,则允许日期范围内的所有日期。字符串中的每个字符都指定了一天。例如,“MTWHF”表示允许在日期范围内包含工作日。 有效字符包括:
任何字符组合均有效。 |
| Promotions / HotelPromotions / Promotion / Devices | 0..1 | Devices | 用于列出符合促销条件的用户设备的容器。如果指定了设备,则只有所列设备上的符合条件的用户才能享受折扣价。如果未指定,则任何设备上的符合条件的用户均可享受折扣价。 |
| Promotions / HotelPromotions / Promotion / Devices / Device | 1..3 | Device | 定义符合促销条件的一种用户设备。 |
| Promotions / HotelPromotions / Promotion / Devices / Device / @type | 1 | enum | 一种设备类型。值必须为 desktop、tablet 或 mobile。 |
| Promotions / HotelPromotions / Promotion / Discount | 1 | Discount | 必须指定 指定要为此促销活动应用的折扣。 |
| Promotions / HotelPromotions / Promotion / Discount / @percentage | 0..1 | float | 必须提供 一个介于 0 到 100 之间的十进制值,用于指定折扣百分比。
它会应用于 示例:
|
| Promotions / HotelPromotions / Promotion / Discount / @percentage_of_base | 0..1 | float | 必须提供 一个介于 0 到 100 之间的十进制值,用于指定基本折扣的百分比。与 与 示例:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_amount | 0..1 | float | 必须提供 要从 示例:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_amount_per_night | 0..1 | float | 必须提供 应用于每个 示例:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_price | 0..1 | float | 必须提供 如果指定了 如果 示例:
|
| Promotions / HotelPromotions / Promotion / Discount / @fixed_price_per_night | 0..1 | float | 必须提供 如果指定了 如果 如果指定了 示例:
|
| Promotions / HotelPromotions / Promotion / Discount / @applied_nights | 0..1 | integer | 此值应仅与 应用折扣的晚数,从最便宜的晚数开始算起。必须是 1 到 99 之间的整数。如果未指定,则折扣适用于所有晚数。 |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights | 0..1 | FreeNights | 指定在满足最短住宿晚数条件时,住宿的某些晚可享受的折扣。如果使用此元素,则不允许在父 Discount 元素上使用属性。 |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights | 1 | integer | 享受折扣所需的入住晚数。每项折扣都适用于住宿晚数的不同部分。 例如,如果住宿 10 晚,且 |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_nights | 1 | integer | 住宿晚数中每个区段的折扣晚数。 |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_percentage | 1 | float | 适用于折扣晚数的折扣。如果此值为 50,则所选的每个晚上的价格均可享受 5 折优惠。 |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection | 1 | string | 必须是 cheapest 或 last。如果值为 last,则住宿晚数段末尾的住宿晚数可享受折扣。如果值为 cheapest,则住宿晚数段中最便宜的晚数可享受折扣。 |
| Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats | 1 | boolean | 折扣是否可应用于多个住宿晚数段。如果值为 例如,如果 |
| Promotions / HotelPromotions / Promotion / Discount / @rank | 0..1 | integer | 为相应促销活动分配排名,并选择启用排名选择功能,这样系统只会选择排名最低的促销活动来应用。值必须介于 1 到 99 之间(含边界值)。如果多项促销活动的排名相同,系统会任意选择一项并应用。 |
| Promotions / HotelPromotions / Promotion / BestDailyDiscount | 1 | Discount | 必须指定 指定可应用于住宿晚数的每日折扣。这与 每个房源最多只能有一组被视为“每日最佳”的促销活动。这意味着,对于入住的每个夜晚,系统会选择符合条件且可为该夜晚提供最大折扣的单个“最佳每日”促销活动,并可能会应用该促销活动。
可以为这类折扣指定 |
| Promotions / HotelPromotions / Promotion / BestDailyDiscount / @percentage | 0..1 | float | 必须提供 一个介于 0 到 100 之间的十进制值,用于指定折扣百分比。
它会应用于 示例:
|
| Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_amount | 0..1 | float | 必须提供 要从单个 示例:
|
| Promotions / HotelPromotions / Promotion/ BestDailyDiscount / @fixed_price | 0..1 | float | 必须提供 如果指定了 示例:
|
| Promotions / HotelPromotions / Promotion / InventoryCount | 0..1 | InventoryCount | 定义了应用相应促销活动时必须提供的客房数量限制。折扣仅适用于满足限制条件的晚数。无法与 fixed_amount 折扣同时使用。请注意,可用客房数量可通过 OTA_HotelInvCountNotifRQ (InvCount) 或 OTA_HotelAvailNotifRQ (BookingLimit) 指定。 |
| Promotions / HotelPromotions / Promotion / InventoryCount / @min | 0..1 | integer | 必须可供预订的客房数量下限,才能将促销活动应用于每晚房价。如果未指定,则没有最小值。 |
| Promotions / HotelPromotions / Promotion / InventoryCount / @max | 0..1 | integer | 促销活动必须可用于每晚房价的房间数量上限。如果未指定,则没有上限。 |
| Promotions / HotelPromotions / Promotion / LengthOfStay | 0..1 | LengthOfStay | 定义了可应用相应促销活动的住宿时长限制。如果住宿天数超出下限和上限,则不应用相应促销优惠。 |
| Promotions / HotelPromotions / Promotion / LengthOfStay / @min | 0..1 | integer | 应用相应促销活动所需的最低住宿晚数。如果未指定,则表示没有下限。 |
| Promotions / HotelPromotions / Promotion / LengthOfStay / @max | 0..1 | integer | 促销活动适用的住宿晚数上限。如果未指定,则没有上限。 |
| Promotions / HotelPromotions / Promotion / MembershipRateRule | 0..1 | MembershipRateRule |
会员费率规则的容器,用于触发关联折扣的特定界面处理。 除非还指定了 |
| Promotions / HotelPromotions / Promotion / MembershipRateRule / @id | 1 | string |
与会员计划关联的 费率规则的 ID。 |
| 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 | 指定费率方案。房价方案由套餐、房价和空房情况组合而成,如交易(房源数据)、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 | 根据此设置,可将多项促销活动应用于单个房价:
在允许的组合中,可带来最大折扣的促销活动组合会应用于相应费率。 |
| Promotions / HotelPromotions / Promotion / StayDates | 0..1 | StayDates | 一个或多个日期范围的容器,用于确定促销活动的适用方式,例如用于提供季节性折扣。 |
| Promotions / HotelPromotions / Promotion / StayDates / @application | 1 | enum | 说明促销活动的适用方式。 有效值包括:
必须始终指定此属性。
|
| Promotions / HotelPromotions / Promotion / StayDates / DateRange | 1..99 | DateRange | 一个日期范围,用于指定应用促销活动的日期。 系统还支持 YearlessDate 格式。
如果您想设置 |
| Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start | 0..1 | Date or YearlessDate | 日期范围的开始日期(含),以媒体资源所在的时区为准。此日期必须早于或等于 end 日期。如果未指定 start,则日期范围在开始日期方面实际上不受限制。
如果未提供 |
| Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end | 0..1 | Date or YearlessDate | 日期范围的结束日期(以媒体资源的时区为准,含)。此日期必须与 start 日期相同或晚于该日期。如果未指定 end,则日期范围实际上从 start 日期开始无限期有效。
如果未提供 |
| Promotions / HotelPromotions / Promotion / StayDates / DateRange / @days_of_week | 0..1 | string | 日期范围内允许的星期几。如果未指定,则允许日期范围内的所有日期。字符串中的每个字符都指定了一天。例如,“MTWHF”表示允许在日期范围内包含工作日。 有效字符包括:
任何字符组合均有效。 |
| Promotions / HotelPromotions / Promotion / UserCountries | 0..1 | UserCountries | 用于列出符合促销条件的用户位置(国家/地区)的容器。如果指定了国家/地区,则只有所列国家/地区中符合条件的用户才能享受折扣价。如果未指定,则任何国家/地区的符合条件的用户均可享受折扣价。 |
| Promotions / HotelPromotions / Promotion / UserCountries / @type | 0..1 | enum | UserCountries 规范的类型。
有效值为 如果 UserCountries 如果 UserCountries 如果未设置 UserCountries |
| Promotions / HotelPromotions / Promotion / UserCountries / Country | 1..300 | Country | 定义一个用户符合促销条件所在的国家/地区。 |
| Promotions / HotelPromotions / Promotion / UserCountries / Country / @code | 1 | string | CLDR 国家/地区代码,例如 DE 或 FR。请注意,对于某些国家/地区,CLDR 国家/地区代码与双字母 ISO 国家/地区代码并不相同。此外,不支持 CLDR 区域代码。 |
示例
每个媒体资源最多只能有 500 个促销活动。请参阅“删除一项宣传广告”示例,了解如何从房源中移除宣传广告。
基本消息
以下示例展示了一条基本的 Promotions 消息:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingDates>
<DateRange start="2020-07-01" end="2020-07-31" days_of_week="MTWHF"/>
<DateRange start="2020-09-01" end="2020-09-30"/>
</BookingDates>
<BookingWindow min="7" max="330"/>
<CheckinDates>
<DateRange start="2020-10-01" end="2020-10-31" days_of_week="FSU"/>
</CheckinDates>
<CheckoutDates>
<DateRange start="2020-10-08" end="2020-11-07" days_of_week="FSU"/>
</CheckoutDates>
<Devices>
<Device type="mobile"/>
<Device type="tablet"/>
</Devices>
<Discount percentage="20" applied_nights="2"/>
<LengthOfStay min="2" max="14"/>
<RatePlans>
<RatePlan id="234"/>
<RatePlan id="567"/>
</RatePlans>
<RoomTypes>
<RoomType id="123"/>
<RoomType id="456"/>
</RoomTypes>
<Stacking type="base"/>
<UserCountries>
<Country code="US"/>
<Country code="GB"/>
</UserCountries>
</Promotion>
</HotelPromotions>
</Promotions>
广告资源状况
以下示例展示了如何在临近到达日期时因库存过剩而创建折扣:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingWindow max="7"/>
<Discount percentage="10"/>
<InventoryCount min="3"/>
</Promotion>
</HotelPromotions>
</Promotions>
删除一项促销活动
以下示例展示了如何删除房源的一项促销活动:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1" action="delete"/>
</HotelPromotions>
</Promotions>
删除所有宣传广告
以下示例展示了如何删除媒体资源的所有宣传广告:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1" action="overlay"/>
</Promotions>
叠加所有宣传广告
以下示例展示了如何为具有一项或多项新促销活动的房源叠加 <HotelPromotions>。当值为 action="overlay" 时,系统会在存储当前消息中指定的促销活动之前删除所有已存储的促销活动:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1" action="overlay">
<Promotion id="1">
<BookingDates>
<DateRange start="2020-09-01" end="2020-09-30"/>
</BookingDates>
<Discount percentage="10"/>
<RoomTypes>
<RoomType id="123"/>
<RoomType id="456"/>
</RoomTypes>
<RatePlans>
<RatePlan id="234"/>
<RatePlan id="567"/>
</RatePlans>
<Stacking type="base"/>
</Promotion>
</HotelPromotions>
</Promotions>
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 之前以及抵达前 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 元素与 start 和 end 属性搭配使用的情况,其中 start 和 end 属性为 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 元素包含具有 start 和 end 字段但没有年份的 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 | 表示促销消息已成功处理,没有出现警告、错误或失败。
每条消息中都包含 |
| PromotionsResponse / Issues | 0..1 | Issues | 一个容器,用于存放处理促销消息时遇到的一个或多个问题。
每条消息中都包含 |
| PromotionsResponse / Issues / Issue | 1..n | Issue | 处理促销消息时遇到的警告、错误或失败的说明。如需详细了解这些问题,请参阅Feed 状态错误消息。 |
| PromotionsResponse / Issues / Issue / @code | 1 | integer | 问题的标识符。 |
| PromotionsResponse / Issues / Issue / @status | 1 | enum | 遇到的问题类型。 有效值为 |
示例
成功
以下是成功处理“促销”消息的响应。
<?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>