總覽
您可以使用這個 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, 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「帳戶設定」頁面中列出的「合作夥伴金鑰」值。 如果後端會為多個帳戶提供動態饋給,這個值必須與相同帳戶的 |
| Promotions / @id | 1 | string | 這則要求訊息的專屬 ID。這個值會傳回至回應訊息。允許的字元包括 a-z、A-Z、0-9、_ (底線) 和 - (連字號)。 |
| Promotions / @timestamp | 1 | DateTime | 這則訊息的建立日期和時間。 |
| Promotions / HotelPromotions | 0..n | HotelPromotions | 房源的促銷活動。每項促銷活動僅適用於單一資源。 除非使用 |
| Promotions / HotelPromotions / @hotel_id | 1 | string | 房源的專屬 ID。這個值必須與飯店清單動態饋給中 <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 | 促銷活動的專屬 ID。允許的字元數上限為 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 | 促銷活動適用於入住前幾天預訂的訂單,天數上限為 330 天。如未指定,或值為 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 是較嚴格的整體底價,但這項底價只適用於該促銷活動,且整個促銷活動堆疊中無法有單一底價,因此 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,則每晚的價格會減半。 |
| 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 |
會員費率規則的容器,可針對相關聯的折扣觸發特定 UI 處理方式。 除非也指定 |
| 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 | 房價方案的專屬 ID。這個值會對應至交易 (房源資料) 訊息中 <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 | 房源 (房型) 的專屬 ID。這個值會對應至交易 (房源資料) 訊息中的 <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 國家/地區代碼與 2 個字母的 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 Duration 型別。這項預訂時間限制規定,預訂時間必須在抵達前一天的 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 屬性搭配使用,做為 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 元素包含沒有年份的 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 折扣
以下範例會針對指定預訂日期範圍,每四晚住宿提供兩晚 5 折優惠。如果行程為十晚,則總共有四晚可享 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>
下例會針對指定入住日期範圍,每入住三晚就提供一晚 5 折優惠。只有重疊的住宿夜數才符合折扣資格。以下行程的入住日期為 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 的說明。
`Overall, the price of the stay receives a 20 + 50 + 10 = 80 fixed amount discount.
回應
語法
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 | 相關促銷活動訊息的專屬 ID。 |
| PromotionsResponse / @partner | 1 | string | 這則訊息的合作夥伴帳戶。 |
| PromotionsResponse / Success | 0..1 | Success | 表示系統已順利處理促銷活動訊息,沒有發生警告、錯誤或失敗。
每則訊息中都會有 |
| PromotionsResponse / Issues | 0..1 | Issues | 容器,用於存放處理促銷活動訊息時發生的一或多個問題。 每則訊息中都會有 |
| PromotionsResponse / Issues / Issue | 1..n | Issue | 處理促銷活動訊息時發生的警告、錯誤或失敗說明。如要瞭解這些問題的詳細資訊,請參閱「動態饋給狀態錯誤訊息」。 |
| PromotionsResponse / Issues / Issue / @code | 1 | integer | 問題的 ID。 |
| 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>