總覽
您可以使用這個 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 相符。Hotel Center 也會列出飯店 ID。 | 
| 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 | 在預訂時,必須在入住前幾天內完成預訂,才能套用促銷優惠。如未指定,或其值為 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,則每晚可享 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 | 會員費率規則的容器,會觸發特定 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。這個值會對應至 Transaction (Property Data) 訊息中 <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>值參照。(其<RoomID>值也會由 OTA_HotelRateAmountNotifRQ 訊息中的InvTypeCode屬性參照)。 | 
| 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 時間長度類型。根據預訂時間限制,你必須在抵達前一天的 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>
預訂日期 DateTime 邊界
以下範例顯示 BookingDates 元素與 start 和 end 屬性一起用於 DateTime 類型的情況。這項預訂日期限制規定預訂時間必須介於 2020-07-01 06:30 至 2020-07-02 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>
免費住宿晚數折扣
以下範例顯示,在指定的預訂日期範圍內,每住四晚可享兩晚 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-01-01,退房日期為 2022-01-07,適用的住宿晚數和折扣如下所示。
- 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>
排名選取
以下範例提供兩種折扣,一個是 20%,另一個是 15%。在評估期間,系統只會套用 15% 折扣,因為它的排名較低。
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
  <HotelPromotions hotel_id="Property_1">
    <Promotion id="1">
      <Discount percentage="15" rank="25"/>
    </Promotion>
    <Promotion id="2">
      <Discount percentage="20" rank="50"/>
    </Promotion>
  </HotelPromotions>
</Promotions>
BestDailyDiscount
以下範例會套用 BestDailyDiscount 並堆疊 Discount,為兩晚住宿提供折扣。
<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner="account_xyz"
            id="123_abc"
            timestamp="2020-05-18T16:20:00-04:00">
 <HotelPromotions hotel_id="HotelID" action="overlay">
   <Promotion id="general">
     <BestDailyDiscount fixed_amount="20"/>
   </Promotion>
   <Promotion id="may">
     <BestDailyDiscount fixed_amount="50"/>
     <StayDates application="overlap">
        <DateRange start="2023-05-01" end="2023-05-31"/>
     </StayDates>
   </Promotion>
   <Promotion id="fiesta">
     <Discount fixed_amount_per_night="5"/>
     <Stacking type="any"/>
   </Promotion>
 </HotelPromotions>
</Promotions>
假設你想在 2023 年 4 月 30 日至 2023 年 5 月 2 日期間入住兩晚,系統會先計算出最優惠的每日折扣組合,以便提供最優惠的折扣。
第一晚的「一般」促銷活動是唯一適用的金額,固定折扣為 20%。
就第二晚而言,「may」促銷活動提供的折扣比「general」折扣還要優惠。因此,當您選取「may」時,固定折扣金額為 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 | 相關促銷活動訊息的專屬 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>