概览
您可以使用此 API 指定可能的折扣。Google 会应用指定的促销活动中价格最低的符合条件的促销活动或一组促销活动。如果您正在寻找支持任意费率调整(可在满足条件时提高或降低价格)的 API,请考虑使用我们的 Rate Modifications API。请注意,如果两个 API 都存在,系统会在促销之前应用费率修改。
请求数
语法
Promotions
消息使用以下语法:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner= "partner_key"
id="message_ID"
timestamp="timestamp">
<HotelPromotions hotel_id="HotelID" action="[overlay]">
<Promotion id="PromotionID" action="[delete]">
<BookingDates>
<DateRange start="YYYY-MM-DD[THH:mm:ss]" end="YYYY-MM-DD[THH:mm:ss]"
days_of_week="MTWHFSU_or_subset"/>
<DateRange start="YYYY-MM-DD[THH:mm:ss]" end="YYYY-MM-DD[THH:mm:ss]"
days_of_week="MTWHFSU_or_subset"/>
</BookingDates>
<BookingWindow min="integer_or_duration" max="integer_or_duration"/>
<Ceiling amount_per_night="float"/>
<Floor amount_per_night="float"/>
<CheckinDates>
<DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
</CheckinDates>
<CheckoutDates>
<DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
</CheckoutDates>
<!-- Specify only one of percentage, 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>
元素和属性
促销信息包含以下元素和属性:
Element / @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 的<listing> 元素中的
<id> 指定的酒店 ID 匹配。酒店 ID 也会在 Hotel Center 中列出。 |
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 / @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 | 享受折扣所需的住宿晚数。每个折扣都会应用于单独的住宿晚数部分。 例如,对于 |
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_nights | 1 | integer | 每个住宿晚数的折扣住宿晚数。 |
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_percentage | 1 | float | 对折扣住宿晚数应用的折扣。如果此值为 50 ,则表示所选每晚均可享受五折优惠。 |
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection | 1 | string | 必须为 cheapest 或 last 。如果为 last ,则住宿晚数段结束时的住宿晚数可享受折扣。如果为 cheapest ,则住宿晚数内价格最低的住宿晚数可享受折扣。 |
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats | 1 | boolean | 折扣是否可应用于多个住宿晚点。如果为 例如,如果 |
Promotions / HotelPromotions / Promotion / Discount / @rank | 0..1 | integer | 为此促销活动指定排名,并将其纳入排名选择范围(即系统仅选择应用排名最低的促销活动)。值必须介于 1 到 99 之间(含 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 | 指定如何组合促销活动。如果未指定,则假定“类型”为 base 。 |
Promotions / HotelPromotions / Promotion / Stacking / @type | 1 | enum | 单个费率可应用多项促销优惠,具体取决于此设置:
在允许的组合中,系统会对费率应用可产生最大折扣的一组促销活动。 |
Promotions / HotelPromotions / Promotion / StayDates | 0..1 | StayDates | 一个或多个日期范围的容器,用于确定如何应用促销活动,例如为了适应季节性折扣。 |
Promotions / HotelPromotions / Promotion / StayDates / @application | 1 | enum | 说明应如何应用促销活动。 有效值包括:
必须始终指定此属性。
|
Promotions / HotelPromotions / Promotion / StayDates / DateRange | 1..99 | DateRange | 用于指定促销活动适用的日期范围的日期范围。 此外,系统还支持 YearlessDate 格式。
|
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start | 0..1 | Date or YearlessDate | 日期范围的开始日期(基于媒体资源的时区)。此日期必须早于或相同于end 日期。如果未指定 start ,就开始日期而言,日期范围实际上是不受限制的。 |
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end | 0..1 | Date or YearlessDate | 日期范围的结束日期(基于媒体资源的时区)。此日期必须与 start 日期相同或晚于该日期。如果未指定 end ,就结束日期而言,日期范围实际上是不受限制的。 |
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @days_of_week | 0..1 | string | 日期范围内允许的星期几。如果未指定,则允许日期范围中的所有日期。字符串中的每个字符均指定日期。例如,“MTWHF”指定日期范围允许工作日。 有效字符包括:
任意字符组合均有效。 |
Promotions / HotelPromotions / Promotion / UserCountries | 0..1 | UserCountries | 用于列出符合促销条件的用户地理位置(国家/地区)的容器。如果指定,则只有所列国家/地区中符合条件的用户才能享受折扣费率。如果未指定,则为所有国家/地区符合条件的用户提供折扣费率。 |
Promotions / HotelPromotions / Promotion / UserCountries / @type | 0..1 | enum | UserCountry 规范的类型。 有效值为 如果“User countries” 如果用户国家/地区 如果未设置 User countries |
Promotions / HotelPromotions / Promotion / UserCountries / Country | 1..300 | Country | 指定用户有资格享受促销的国家/地区。 |
Promotions / HotelPromotions / Promotion / UserCountries / Country / @code | 1 | string | CLDR 国家/地区代码,例如 DE 或 FR 。请注意,对于某些国家/地区,CLDR 国家/地区代码与由 2 个字母组成的 ISO 国家/地区代码不同。此外,不支持 CLDR 地区代码。 |
示例
基本消息
以下示例展示了一条基本的 Promotions
消息:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingDates>
<DateRange start="2020-07-01" end="2020-07-31" days_of_week="MTWHF"/>
<DateRange start="2020-09-01" end="2020-09-30"/>
</BookingDates>
<BookingWindow min="7" max="330"/>
<CheckinDates>
<DateRange start="2020-10-01" end="2020-10-31" days_of_week="FSU"/>
</CheckinDates>
<CheckoutDates>
<DateRange start="2020-10-08" end="2020-11-07" days_of_week="FSU"/>
</CheckoutDates>
<Devices>
<Device type="mobile"/>
<Device type="tablet"/>
</Devices>
<Discount percentage="20" applied_nights="2"/>
<LengthOfStay min="2" max="14"/>
<RatePlans>
<RatePlan id="234"/>
<RatePlan id="567"/>
</RatePlans>
<RoomTypes>
<RoomType id="123"/>
<RoomType id="456"/>
</RoomTypes>
<Stacking type="base"/>
<UserCountries>
<Country code="US"/>
<Country code="GB"/>
</UserCountries>
</Promotion>
</HotelPromotions>
</Promotions>
库存条件
以下示例展示了如何在临近送达日期时创建折扣:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingWindow max="7"/>
<Discount percentage="10"/>
<InventoryCount min="3"/>
</Promotion>
</HotelPromotions>
</Promotions>
删除一项促销活动
以下示例展示了如何删除房源的一项促销活动:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1" action="delete"/>
</HotelPromotions>
</Promotions>
删除所有促销活动
以下示例展示了如何删除房源的所有促销活动:
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1" action="overlay"/>
</Promotions>
叠加所有促销活动
以下示例展示了如何使用一个或多个新的促销信息叠加属性的 <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 或之后预订。
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
id="123_abc"
timestamp="2020-05-18T16:20:00-04:00">
<HotelPromotions hotel_id="Property_1">
<Promotion id="1">
<BookingWindow min="P1DT6H" max="P2DT12H"/>
<Discount percentage="20"/>
</Promotion>
</HotelPromotions>
</Promotions>
预订日期日期时间边界
以下示例展示了将 BookingDates
元素与 start
和 end
属性作为 DateTime 类型结合使用的情况。此预订日期限制要求预订必须在 2020 年 7 月 1 日 6: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
元素包含的 DateRanges
的 start
和 end
字段没有年份的情况。在本例中,无论年份为 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 折扣
以下示例将在指定预订日期范围内每入住四晚,享受两晚 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>
下一个示例将在指定住宿日期范围内每入住 3 晚提供一晚 50% 的折扣。只有重叠的住宿晚数才计入折扣资格。对于在 2022 年 1 月 1 日入住并于 2022 年 1 月 7 日退房的以下行程,符合条件的住宿晚数和折扣将按如下方式计算。
- 2022 年 1 月 1 日(住宿)
- 2022 年 1 月 2 日(住宿)
- 2022-01-03
- 2022 年 1 月 4 日(折扣)
- 2022 年 1 月 5 日(住宿)
- 2022 年 1 月 6 日(住宿)
<?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>
排名选择
以下示例提供了两个折扣,一个是八折,另一个是八五折。在评估期间,由于排名较低,仅应用 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>
每日折扣
以下示例通过应用与 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
对于住宿费用,“嘉年华”促销活动将折扣为每晚 5 次,或总共 10 次。它可与每日最佳折扣组合叠加,因为“节日”的堆叠类型设置为 any
。如果将其设置为 base
,则仅应用最佳每日折扣或“节日”折扣的组合。如需了解详情,请参阅 Stacking
的说明。
`总体而言,住宿价格将享受 20 + 50 + 10 = 80 的固定金额折扣。
响应
语法
PromotionsResponse
消息使用以下语法:
<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="timestamp"
id="message_ID"
partner="partner_key">
<!-- Either Success or Issues are populated. -->
<Success/>
<Issues>
<Issue code="issue_code"
status="issue_type">
issue_description
</Issue>
</Issues>
</PromotionsResponse>
元素和属性
PromotionsResponse
消息具有以下元素和属性:
Element / @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>