โปรโมชัน

ภาพรวม

API นี้ช่วยให้คุณระบุส่วนลดที่เป็นไปได้ จากโปรโมชันที่ระบุไว้ Google จะใช้โปรโมชันหรือชุดโปรโมชันที่มีสิทธิ์ซึ่งทำให้ราคาต่ำที่สุด หากกำลังมองหา API ที่รองรับการปรับราคาแบบกำหนดเองซึ่งสามารถเพิ่มหรือลดราคาเมื่อเงื่อนไขตรงตามที่กำหนด ให้ลองใช้ Rate Modifications API โปรดทราบว่าหากมี API ทั้ง 2 รายการ ระบบจะใช้การแก้ไขราคาก่อนโปรโมชัน

คำขอ

ไวยากรณ์

ข้อความ 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>

องค์ประกอบและแอตทริบิวต์

ข้อความโปรโมชันมีองค์ประกอบและแอตทริบิวต์ต่อไปนี้

องค์ประกอบ / @แอตทริบิวต์ จำนวนข้อผิดพลาด ประเภท คำอธิบาย
Promotions 1 Complex element องค์ประกอบรูทของข้อความโปรโมชัน
Promotions / @partner 1 string บัญชีพาร์ทเนอร์สำหรับข้อความนี้ ค่าสตริงนี้คือค่า "คีย์พาร์ทเนอร์" ที่ระบุไว้ใน หน้าการตั้งค่าบัญชีใน Hotel Center

หากมีแบ็กเอนด์ที่มีฟีดสำหรับหลายบัญชี ค่านี้จะต้องตรงกับค่าแอตทริบิวต์ ID ที่ระบุในองค์ประกอบ <RequestorID> ของข้อความ <OTA_HotelRateAmountNotifRQ> และ <OTA_HotelAvailNotifRQ> สำหรับบัญชีเดียวกัน

Promotions / @id 1 string ตัวระบุที่ไม่ซ้ำกันสำหรับข้อความคำขอนี้ ค่านี้จะแสดงในข้อความตอบกลับ อักขระที่อนุญาตคือ a-z, A-Z, 0-9, _ (ขีดล่าง) และ - (ขีดกลาง)
Promotions / @timestamp 1 DateTime วันที่และเวลาที่สร้างข้อความนี้
Promotions / HotelPromotions 0..n HotelPromotions

โปรโมชันสำหรับที่พัก โปรโมชันแต่ละรายการจะมีผลกับที่พักเพียงแห่งเดียว

เว้นแต่จะใช้ <Stacking> ระบบจะใช้โปรโมชันที่มีส่วนลดมากที่สุดกับการจองเมื่อโปรโมชันหลายรายการมีสิทธิ์

Promotions / HotelPromotions / @hotel_id 1 string ตัวระบุที่ไม่ซ้ำกันของที่พัก ค่านี้ต้องตรงกับรหัสโรงแรมที่ระบุโดยใช้ <id> ในองค์ประกอบ <listing> ในฟีดข้อมูลโรงแรม นอกจากนี้ รหัสโรงแรมยังแสดงอยู่ใน Hotel Center ด้วย
Promotions / HotelPromotions / @action 0..1 enum

หากระบุ ค่าต้องเป็น "overlay" เมื่อค่าเป็น "overlay" ระบบจะลบโปรโมชันที่เก็บไว้ทั้งหมดก่อนที่จะจัดเก็บโปรโมชันที่ระบุในข้อความปัจจุบัน

หากไม่ได้ระบุ โปรโมชันแต่ละรายการที่ระบุในข้อความปัจจุบันจะเป็นอย่างใดอย่างหนึ่งต่อไปนี้

  • Added (หากไม่มีโปรโมชันที่เก็บไว้มี id เดียวกัน)
  • Updated (หากโปรโมชันที่เก็บไว้มีidเดียวกัน)
  • Deleted (หากโปรโมชันที่จัดเก็บไว้มีidเดียวกัน และค่าของแอตทริบิวต์ action สำหรับโปรโมชันที่ระบุในข้อความปัจจุบันคือ "delete")
Promotions / HotelPromotions / Promotion 0..99 Promotion

โปรโมชันเดียวสำหรับที่พัก โปรดทราบว่าหากไม่ได้ระบุ action="overlay" และ <Promotion> ระบบจะลบโปรโมชันทั้งหมดของที่พัก

หากต้องการใช้โปรโมชันมากกว่า 99 รายการ โปรดติดต่อผู้จัดการลูกค้าด้านเทคนิค (TAM)

Promotions / HotelPromotions / Promotion / @id 1 string ตัวระบุที่ไม่ซ้ำกันสำหรับโปรโมชัน จำนวนอักขระสูงสุดที่อนุญาตคือ 40 ตัว อักขระที่อนุญาตคือ a-z, A-Z, 0-9, _ (ขีดล่าง), - (ขีดกลาง) และ . (เครื่องหมายจุด)
Promotions /HotelPromotions / Promotion / @action 0..1 enum

หากระบุ ค่าต้องเป็น delete หากไม่ได้ระบุและไม่มีการจัดเก็บโปรโมชันที่มี id เดียวกัน ระบบจะจัดเก็บโปรโมชันนี้ หรือหากไม่ได้ระบุไว้และมีการบันทึกโปรโมชันที่มี id เดียวกันไว้ ระบบจะอัปเดตโปรโมชันที่มีอยู่

หากระบุ delete ระบบจะลบโปรโมชันที่เก็บไว้ซึ่งมี id เดียวกัน เมื่อใช้ delete อย่าใส่องค์ประกอบย่อยใน <Promotion> นอกจากนี้ ไม่อนุญาตให้ใช้ delete ร่วมกับ <HotelPromotions action="overlay"/>

Promotions / HotelPromotions / Promotion / BookingDates 0..1 BookingDates คอนเทนเนอร์สำหรับช่วงอย่างน้อย 1 ช่วงซึ่งกำหนดเมื่อต้องทำการจองเพื่อให้ใช้โปรโมชันได้
Promotions / HotelPromotions / Promotion / BookingDates / DateRange 1..99 DateRange ช่วงวันที่ที่ระบุเมื่อต้องทำการจองเพื่อให้โปรโมชันมีผล
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @start 0..1 Date หรือ DateTime

วันที่เริ่มต้นหรือวันที่และเวลา (ตามเขตเวลาของที่พัก) ของช่วง โดยนับรวมวันที่ดังกล่าวด้วย

  • วันที่หรือวันที่และเวลาแบบเต็มที่กำหนดโดย start ต้องมาก่อน (หรือเท่ากับ) วันที่หรือวันที่และเวลาแบบเต็มที่กำหนดโดย end
  • หากไม่มีการระบุ start ระบบจะถือว่าช่วงดังกล่าวไม่มีขอบเขตเวลาเริ่มต้น
  • หากป้อนข้อมูล start เป็นวันที่ "YYYY-MM-DD" ระบบจะตีความเป็นวันที่และเวลา "YYYY-MM-DDT00:00:00"
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end 0..1 Date หรือ DateTime

วันที่สิ้นสุดหรือวันที่และเวลา (ตามเขตเวลาของที่พัก) ของช่วง โดยนับรวมวันที่ดังกล่าวด้วย

  • วันที่หรือวันที่และเวลาแบบเต็มที่กำหนดโดย end ต้องอยู่หลัง (หรือตรงกับ) วันที่หรือวันที่และเวลาแบบเต็มที่กำหนดโดย start
  • หากไม่มีการระบุ end ระบบจะถือว่าช่วงดังกล่าวไม่มีขอบเขตเวลาสิ้นสุด
  • หากระบุ end เป็นวันที่ "YYYY-MM-DD" ระบบจะตีความเป็นวันที่และเวลา "YYYY-MM-DDT23:59:59"
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @days_of_week 0..1 string

วันของสัปดาห์ที่อนุญาตให้ใช้ในช่วงวันที่ หากไม่มีการระบุ ระบบจะอนุญาตให้ใช้ทุกวันในช่วงวันที่ อักขระแต่ละตัวในสตริงจะระบุวัน เช่น "MTWHF" เป็นการระบุว่าระบบอนุญาตให้ใช้วันธรรมดาในช่วงวันที่

อักขระที่ใช้ได้มีดังนี้

  • M สำหรับวันจันทร์
  • T สำหรับวันอังคาร
  • W สำหรับวันพุธ
  • H สำหรับวันพฤหัสบดี
  • F สำหรับวันศุกร์
  • S สำหรับวันเสาร์
  • U สำหรับวันอาทิตย์

คุณจะระบุชุดค่าผสมของอักขระแบบใดก็ได้

Promotions / HotelPromotions / Promotion / BookingWindow 0..1 BookingWindow ระบุระยะเวลาที่ทำการจองได้ซึ่งสัมพันธ์กับวันที่เช็คอิน (ตามเขตเวลาของที่พัก) ตัวอย่างเช่น คุณสามารถตั้งค่ากรอบเวลาการจองล่วงหน้าก่อนเช็คอินเป็นอย่างน้อย 7 วัน แต่ไม่เกิน 180 วัน
Promotions / HotelPromotions / Promotion / BookingWindow / @min 0..1 integer or duration ระยะเวลาขั้นต่ำก่อนถึงวันเช็คอินที่ต้องมีการจองเพื่อให้โปรโมชันมีผล หากไม่ได้ระบุหรือค่าของ 0 เป็น 0 ระบบจะไม่กำหนดจำนวนขั้นต่ำ

ประเภทของค่าที่ใช้ได้มีดังนี้

  • Integer: จำนวนวันก่อนถึงวันที่เช็คอิน เช่น ค่า 30 บ่งบอกว่าโปรโมชันนี้มีผลกับเฉพาะการจองที่ดำเนินการล่วงหน้าอย่างน้อย 30 วันก่อนถึงวันที่เช็คอิน
  • ISO 8601 Duration (วัน ชั่วโมง และนาที): จำนวนวัน (และอาจรวมถึงจำนวนชั่วโมง/นาที) ก่อนวันที่เช็คอิน เช่น ค่า P30D บ่งบอกว่าข้อเสนอนี้มีผลเฉพาะกับผู้ที่จองล่วงหน้าอย่างน้อย 30 วันก่อนถึงวันที่เช็คอิน ค่า P30DT6H กำหนดให้ต้องจองภายในเวลา 18:00 น. ของวันที่ 30 ก่อนถึงวันที่เข้าพัก
Promotions / HotelPromotions / Promotion / BookingWindow / @max 0..1 integer or duration จำนวนวันสูงสุดก่อนถึงวันเช็คอินที่ต้องมีการจองเพื่อให้ใช้โปรโมชันได้ หากไม่ได้ระบุหรือค่าของ 0 คือ 0 ระบบจะไม่จำกัดจำนวนสูงสุด

ประเภทของค่าที่ใช้ได้มีดังนี้

  • Integer: จำนวนวันก่อนถึงวันที่เช็คอิน เช่น ค่า 30 บ่งบอกว่าโปรโมชันนี้มีผลกับการจองล่วงหน้าไม่เกิน 30 วันก่อนถึงวันที่เช็คอินเท่านั้น
  • ISO 8601 Duration (วัน ชั่วโมง และนาที): จำนวนวัน (และอาจรวมถึงจำนวนชั่วโมง/นาที) ก่อนวันที่เช็คอิน เช่น ค่า P30D บ่งบอกว่าโปรโมชันจะมีผลกับการจองล่วงหน้าไม่เกิน 30 วันก่อนถึงวันที่เช็คอินเท่านั้น ค่า P30DT6H กำหนดให้ต้องจองตั้งแต่เวลา 18:00 น. เป็นต้นไปของวันที่ 30 ก่อนถึงวันที่เข้าพัก
Promotions / HotelPromotions / Promotion / Ceiling 0..1 Ceiling

กําหนดข้อจํากัดเกี่ยวกับค่าสูงสุดที่กําหนดราคาได้หลังจากใช้โปรโมชันแล้ว

โปรโมชันต้องระบุ <Discount> หรือ <BestDailyDiscount> เสมอ ดังนั้นหากต้องการสร้างโปรโมชันที่ใช้ <Ceiling> เท่านั้น ตัวเลือกหนึ่งคือตั้งค่า <Discount> ที่มี percentage เป็น 0

หากมีการกำหนดค่าการซ้อน โปรโมชันที่มี<Ceiling>หลายรายการอาจใช้กับการเข้าพักครั้งเดียวได้ โปรโมชันแต่ละรายการจะใช้ส่วนลดตามด้วยมูลค่าสูงสุดในทันที ตัวอย่างต่อไปนี้แสดงให้เห็นว่าเพดานแต่ละรายการส่งผลต่อการคำนวณโปรโมชันถัดไปในกองอย่างไร

ตัวอย่าง

การกำหนดราคาสำหรับการเข้าพัก 1 คืนโดยที่ AmountBeforeTax เท่ากับ 100 และมีโปรโมชันซ้อนกัน 2 รายการ

  1. โปรโมชันที่มีประเภทการซ้อน base, fixed_amount เท่ากับ 25 และamount_per_night สูงสุด 60
  2. โปรโมชันที่มีประเภทการซ้อนกัน second, fixed_amount เท่ากับ 25 และamount_per_night สูงสุด 90

ลำดับการคำนวณมีดังนี้

  1. ระบบจะใช้โปรโมชัน base ก่อนและลดราคา AmountBeforeTax เหลือ 75 แต่จากนั้นราคาสูงสุดจะลดลงเหลือ 60
  2. โปรโมชัน second ลดราคา AmountBeforeTax จาก 60 เป็น 35 ซึ่งต่ำกว่าขีดจํากัดสูงสุด 90 ระบบจึงไม่ใช้ขีดจํากัดสูงสุดที่ 2 อัตราสุดท้ายคือ 35

การที่ 60 เป็นขีดจํากัดโดยรวมที่เข้มงวดกว่านั้นไม่เกี่ยวข้องเนื่องจากมีผลกับโปรโมชันนั้นๆ เท่านั้น และจะไม่มีขีดจํากัดเดียวที่ครอบคลุมทั้งกองโปรโมชัน

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

จำนวนเงินสูงสุดที่กำหนดราคาต่อคืนได้หลังจากหักส่วนลดแล้ว

หากระบุองค์ประกอบ <Floor> ด้วย จะต้องตั้งค่าแอตทริบิวต์นี้ให้มีค่ามากกว่าหรือเท่ากับแอตทริบิวต์ amount_per_night ใน <Floor>

amount_per_night จะมีผลกับภาษีและค่าธรรมเนียมเมื่อรวมอยู่ในราคาต่อคืนโดยใช้ AmountAfterTax แต่จะไม่รวมภาษีและค่าธรรมเนียมที่ระบุโดยใช้ TaxFeeInfo

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

กำหนดข้อจำกัดเกี่ยวกับค่าต่ำสุดที่อัตราสามารถตั้งค่าได้หลังจากใช้โปรโมชัน

โปรโมชันต้องระบุ <Discount> หรือ <BestDailyDiscount> เสมอ ดังนั้นหากต้องการสร้างโปรโมชันที่ใช้ <Floor> เท่านั้น ตัวเลือกหนึ่งคือตั้งค่า <Discount> ที่มี percentage เป็น 0

ตรรกะ <Floor> จะยังคงมีผลกับส่วนลด <FreeNights> แม้ว่าคืนฟรีจะมีส่วนลด 100% ก็ตาม

หากมีการกำหนดค่าการซ้อน โปรโมชันที่มี<Floor>หลายรายการอาจใช้กับการเข้าพักครั้งเดียวได้ โปรโมชันแต่ละรายการจะใช้ส่วนลดตามด้วยราคาพื้น ตัวอย่างต่อไปนี้แสดงให้เห็นว่าแต่ละชั้นมีส่วนช่วยในการคำนวณโปรโมชันถัดไปในกองอย่างไร

ตัวอย่าง

การกำหนดราคาสำหรับการเข้าพัก 1 คืนโดยที่ AmountBeforeTax เท่ากับ 100 และมีโปรโมชันซ้อนกัน 2 รายการ

  1. โปรโมชันที่มีประเภทการซ้อนกัน base, fixed_amount เท่ากับ 25 และamount_per_night ขั้นต่ำ 90
  2. โปรโมชันที่มีประเภทการซ้อนกัน second, fixed_amount เท่ากับ 25 และamount_per_night ขั้นต่ำ 60

ลำดับการคำนวณมีดังนี้

  1. ระบบจะใช้โปรโมชัน base ก่อน แล้วลดราคา AmountBeforeTax เหลือ 75 แต่ราคาขั้นต่ำจะเพิ่มเป็น 90
  2. โปรโมชัน second ลดราคา AmountBeforeTax จาก 90 เป็น 65 ซึ่งสูงกว่าเกณฑ์ 60 ระบบจึงไม่ใช้เกณฑ์ที่ 2 อัตราสุดท้ายคือ 65

การที่ 90 เป็นพื้นโดยรวมที่เข้มงวดกว่านั้นไม่เกี่ยวข้องเนื่องจากใช้กับโปรโมชันของตัวเองเท่านั้น และจะไม่มีพื้นเดียวที่ครอบคลุมทั้งกองโปรโมชัน

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

จำนวนเงินขั้นต่ำที่กำหนดราคาต่อคืนได้หลังจากหักส่วนลดแล้ว

หากระบุองค์ประกอบ <Ceiling> ด้วย คุณต้องตั้งค่าแอตทริบิวต์นี้ให้มีค่าน้อยกว่าหรือเท่ากับแอตทริบิวต์ amount_per_night ใน <Ceiling>

amount_per_night จะมีผลกับภาษีและค่าธรรมเนียมเมื่อรวมอยู่ในราคาต่อคืนโดยใช้ AmountAfterTax แต่จะไม่รวมภาษีและค่าธรรมเนียมที่ระบุโดยใช้ TaxFeeInfo

Promotions / HotelPromotions / Promotion / CheckinDates 0..1 CheckinDates คอนเทนเนอร์สำหรับช่วงวันที่อย่างน้อย 1 ช่วงซึ่งกำหนดเมื่อต้องเลือกวันเช็คอินเพื่อให้ใช้โปรโมชันได้
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange 1..20 DateRange

ช่วงวันที่ที่ระบุเมื่อต้องเลือกวันเช็คอินเพื่อให้ใช้โปรโมชันได้ คุณไม่จำเป็นต้องใช้องค์ประกอบนี้หากต้องการลบโปรโมชันอย่างน้อย 1 รายการ

นอกจากนี้ ยังรองรับรูปแบบ YearlessDate ด้วย

  • หาก start หรือ end รายการใดรายการหนึ่งเป็นวันที่ที่ไม่มีปี คุณต้องป้อนข้อมูลทั้ง 2 รายการเป็นวันที่ที่ไม่มีปี
  • ช่วงวันที่ที่ไม่มีปีต้องไม่วนกลับมาที่ปีใหม่ แต่ให้แสดงเป็นช่วงวันที่ 2 ช่วงที่อยู่ติดกันแทน เช่น {"12-29", "01-05"} อาจแสดงเป็น {"12-29", "12-31"} และ {"01-01", "01-05"}
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @start 0..1 Date or YearlessDate วันที่เริ่มต้น (ตามเขตเวลาของที่พัก) ของช่วงวันที่เข้าพัก โดยนับรวมวันที่ดังกล่าวด้วย วันที่นี้ต้องเป็นวันที่ก่อนหน้าหรือวันที่เดียวกับ end หากไม่มีการระบุ start ระบบจะถือว่าช่วงวันที่ดังกล่าวไม่มีขอบเขตวันที่เริ่มต้น
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @end 0..1 Date or YearlessDate วันที่สิ้นสุด (ตามเขตเวลาของที่พัก) ของช่วงวันที่เข้าพัก โดยนับรวมวันที่ดังกล่าวด้วย วันที่นี้ต้องเป็นวันที่เดียวกันหรือหลังจาก start หากไม่มีการระบุ end ระบบจะถือว่าช่วงวันที่ดังกล่าวไม่มีขอบเขตวันที่สิ้นสุด
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @days_of_week 0..1 string

วันของสัปดาห์ที่อนุญาตให้ใช้ในช่วงวันที่ หากไม่มีการระบุ ระบบจะอนุญาตให้ใช้ทุกวันในช่วงวันที่ อักขระแต่ละตัวในสตริงจะระบุวัน เช่น "MTWHF" เป็นการระบุว่าระบบอนุญาตให้ใช้วันธรรมดาในช่วงวันที่

อักขระที่ใช้ได้มีดังนี้

  • M สำหรับวันจันทร์
  • T สำหรับวันอังคาร
  • W สำหรับวันพุธ
  • H สำหรับวันพฤหัสบดี
  • F สำหรับวันศุกร์
  • S สำหรับวันเสาร์
  • U สำหรับวันอาทิตย์

คุณจะระบุชุดค่าผสมของอักขระแบบใดก็ได้

Promotions / HotelPromotions / Promotion / CheckoutDates 0..1 CheckoutDates คอนเทนเนอร์สำหรับช่วงวันที่อย่างน้อย 1 ช่วงซึ่งกำหนดเมื่อต้องเลือกวันเช็คเอาต์เพื่อให้ใช้โปรโมชันได้
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange 1..20 DateRange

ช่วงวันที่ที่ระบุเมื่อต้องเลือกวันเช็คเอาต์เพื่อให้ใช้โปรโมชันได้ คุณไม่จำเป็นต้องใช้องค์ประกอบนี้หากต้องการลบโปรโมชันอย่างน้อย 1 รายการ

นอกจากนี้ ยังรองรับรูปแบบ YearlessDate ด้วย

  • หาก start หรือ end รายการใดรายการหนึ่งเป็นวันที่ที่ไม่มีปี คุณต้องป้อนข้อมูลทั้ง 2 รายการเป็นวันที่ที่ไม่มีปี
  • ช่วงวันที่ที่ไม่มีปีต้องไม่วนกลับมาที่ปีใหม่ แต่ให้แสดงเป็นช่วงวันที่ 2 ช่วงที่อยู่ติดกันแทน เช่น {"12-29", "01-05"} อาจแสดงเป็น {"12-29", "12-31"} และ {"01-01", "01-05"}
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @start 0..1 Date or YearlessDate วันที่เริ่มต้น (ตามเขตเวลาของที่พัก) ของช่วงวันที่เข้าพัก โดยนับรวมวันที่ดังกล่าวด้วย วันที่นี้ต้องเป็นวันที่ก่อนหน้าหรือวันที่เดียวกับ end หากไม่มีการระบุ start ระบบจะถือว่าช่วงวันที่ดังกล่าวไม่มีขอบเขตวันที่เริ่มต้น
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @end 0..1 Date or YearlessDate วันที่สิ้นสุด (ตามเขตเวลาของที่พัก) ของช่วงวันที่เข้าพัก โดยนับรวมวันที่ดังกล่าวด้วย วันที่นี้ต้องเป็นวันที่เดียวกันหรือหลังจาก start หากไม่มีการระบุ end ระบบจะถือว่าช่วงวันที่ดังกล่าวไม่มีขอบเขตวันที่สิ้นสุด
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @days_of_week 0..1 string

วันของสัปดาห์ที่อนุญาตให้ใช้ในช่วงวันที่ หากไม่มีการระบุ ระบบจะอนุญาตให้ใช้ทุกวันในช่วงวันที่ อักขระแต่ละตัวในสตริงจะระบุวัน เช่น "MTWHF" เป็นการระบุว่าระบบอนุญาตให้ใช้วันธรรมดาในช่วงวันที่

อักขระที่ใช้ได้มีดังนี้

  • M สำหรับวันจันทร์
  • T สำหรับวันอังคาร
  • W สำหรับวันพุธ
  • H สำหรับวันพฤหัสบดี
  • F สำหรับวันศุกร์
  • S สำหรับวันเสาร์
  • U สำหรับวันอาทิตย์

คุณจะระบุชุดค่าผสมของอักขระแบบใดก็ได้

Promotions / HotelPromotions / Promotion / Devices 0..1 Devices คอนเทนเนอร์สำหรับแสดงรายการอุปกรณ์ของผู้ใช้ที่มีสิทธิ์รับโปรโมชัน หากระบุไว้ เฉพาะผู้ใช้ที่มีสิทธิ์ในอุปกรณ์ที่ระบุเท่านั้นที่จะได้รับราคาส่วนลด หากไม่ได้ระบุ ผู้ใช้ที่มีสิทธิ์ในอุปกรณ์ทุกเครื่องจะได้รับราคาหลังหักส่วนลด
Promotions / HotelPromotions / Promotion / Devices / Device 1..3 Device กำหนดอุปกรณ์ของผู้ใช้ 1 ประเภทที่มีสิทธิ์รับโปรโมชัน
Promotions / HotelPromotions / Promotion / Devices / Device / @type 1 enum ประเภทอุปกรณ์ ค่าต้องเป็น desktop, tablet หรือ mobile
Promotions / HotelPromotions / Promotion / Discount 1 Discount

ต้องระบุ Discount หรือ BestDailyDiscount อย่างใดอย่างหนึ่งที่แน่นอน

ระบุส่วนลดที่จะใช้กับโปรโมชันนี้

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

ต้องระบุ percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price หรือ fixed_price_per_night เพียงรายการเดียว

ค่าทศนิยมตั้งแต่ 0-100 ซึ่งระบุเปอร์เซ็นต์ส่วนลด โดยจะมีผลกับ AmountAfterTax (หรือ AmountBeforeTax หากไม่ได้ระบุ AmountAfterTax)

ตัวอย่าง

  • หาก AmountAfterTax เป็น 100 และ percentage เป็น 20

    อัตราโปรโมชัน = AmountAfterTax * (1 - เปอร์เซ็นต์ส่วนลด)

    80.00 = 100 * (1 - 0.2)

  • หาก AmountBeforeTax เป็น 100, percentage เป็น 20 และ TaxFeeInfo ระบุภาษี 10 ผลลัพธ์จะเป็น

    อัตราโปรโมชัน = AmountBeforeTax * (1 - เปอร์เซ็นต์ส่วนลด) + ภาษี

    90.00 = 100 * (1 - 0.2) + 10

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

ต้องระบุ percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price หรือ fixed_price_per_night เพียงรายการเดียว

ค่าทศนิยมตั้งแต่ 0-100 ซึ่งระบุเปอร์เซ็นต์ของส่วนลดฐาน คล้ายกับ percentage จะใช้กับ AmountAfterTax (หรือ AmountBeforeTax หากไม่ได้ระบุ AmountAfterTax)

ซึ่งแตกต่างจาก percentage เนื่องจากส่วนลดนี้จะคำนวณเป็นเปอร์เซ็นต์ของราคาฐานเสมอ โดยไม่คำนึงถึงโปรโมชันก่อนหน้าที่ใช้ตามลำดับ

ตัวอย่าง

  • สมมติว่าเรามีโปรโมชัน 2 รายการที่ใช้ตามลำดับกับการเข้าพัก 1 คืนที่มีราคา 100 รายการแรกคือส่วนลดปกติ 10% เป็นเปอร์เซ็นต์ และรายการที่ 2 คือส่วนลด 10% จากราคาฐาน อัตราส่วนลดจะเป็น 80 เนื่องจากทั้ง 2 โปรโมชันให้ส่วนลด 10 โปรดทราบว่าหากโปรโมชันที่ 2 เป็นส่วนลดตามเปอร์เซ็นต์ปกติด้วย อัตราส่วนลดจะเป็น 81 เนื่องจากโปรโมชันที่ 2 ให้ส่วนลด 10% จาก 90
Promotions / HotelPromotions / Promotion / Discount / @fixed_amount 0..1 float

ต้องระบุ percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price หรือ fixed_price_per_night เพียงรายการเดียว

จำนวนเงินคงที่ที่จะหักออกจากผลรวมของราคาต่อคืน AmountAfterTax (หรือผลรวมของราคาต่อคืน AmountBeforeTax หากไม่ได้ระบุ AmountAfterTax) ระบบจะถือว่าราคาดังกล่าวใช้สกุลเงินเดียวกับราคาต่อคืน หากค่านี้มากกว่าผลรวมของราคาต่อคืน ค่าที่ได้จะเป็น 0

ตัวอย่าง

  • หากเรากําหนดราคาการเข้าพัก 1 คืนโดยที่ AmountBeforeTax เป็น 90, AmountAfterTax เป็น 100 และ fixed_amount เป็น 20

    ราคาโปรโมชัน = AmountAfterTax - ส่วนลดคงที่

    80.00 = 100 - 20

  • หากเรากําหนดราคาสำหรับการเข้าพัก 1 คืนโดยที่ AmountBeforeTax เท่ากับ 100, fixed_amount เท่ากับ 20 และ TaxFeeInfo ระบุภาษี 8% สูตรการคำนวณจะเป็นดังนี้

    อัตราโปรโมชัน = (AmountBeforeTax - ส่วนลดแบบตายตัว) * (1 + ภาษีแบบเปอร์เซ็นต์)

    86.40 = (100 - 20) * 1.08

  • หากเรากําหนดราคาสำหรับการเข้าพัก 1 คืนโดยที่ AmountBeforeTax เป็น 50, fixed_amount เป็น 60 และ TaxFeeInfo ระบุภาษี 10

    อัตราโปรโมชัน = (AmountBeforeTax - ส่วนลดแบบคงที่) * ภาษี

    10.00 = 0 + 10

  • หากเรากําลังกําหนดราคาสำหรับการเข้าพัก 3 คืน โดยที่ค่า AmountAfterTax คือ 100, 110 และ 120 และ fixed_amount คือ 150

    อัตราโปรโมชัน = sum(AmountAfterTax) - (fixed discount)

    180.00 = (100 + 110 + 120) - 150

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

ต้องระบุ percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price หรือ fixed_price_per_night เพียงรายการเดียว

ส่วนลดแบบคงที่ที่มีผลกับAmountAfterTaxราคาต่อคืนแต่ละรายการ (หรือ N ที่ถูกที่สุดหากระบุ applied_nights) หากไม่ได้ระบุ AmountAfterTax ระบบจะใช้กับ AmountBeforeTax ระบบจะถือว่าราคาดังกล่าวใช้สกุลเงินเดียวกับราคาต่อคืน หาก fixed_amount_per_night มากกว่าราคาต่อคืน ระบบจะลดราคาต่อคืนนั้นให้เป็น 0 เนื่องจากส่วนลดต้องไม่ทำให้ราคาต่อคืนเป็นลบ

ตัวอย่าง

  • หากเรากําลังกําหนดราคาสำหรับการเข้าพัก 3 คืน โดยที่ค่า AmountAfterTax คือ 100, 110 และ 120 และ fixed_amount_per_night คือ 10

    อัตราโปรโมชัน = sum(AmountBeforeTax - fixed amount discount)

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

  • หากเรากําลังกําหนดราคาสำหรับการเข้าพัก 3 คืน โดยที่ค่า AmountAfterTax คือ 10, 50 และ 100 และ fixed_amount_per_night คือ 20

    อัตราโปรโมชัน = sum(AmountAfterTax - fixed amount discount)

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

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

ต้องระบุ percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price หรือ fixed_price_per_night เพียงรายการเดียว

หากระบุราคาต่อคืน AmountAfterTax ระบบจะตั้งค่าราคาสำหรับการเข้าพักซึ่งรวมภาษีและค่าธรรมเนียมเป็นค่าที่ระบุ หากระบุ AmountBeforeTax ระบบจะตั้งค่าราคาก่อนหักภาษีสำหรับการเข้าพักเป็นค่าที่ระบุ ไม่ว่าจะระบุ AmountAfterTax หรือไม่ก็ตาม ระบบจะถือว่าราคาดังกล่าวใช้สกุลเงินเดียวกับราคาต่อคืน

หาก AmountAfterTax มีไว้เพื่อแสดงภาษีแบบเปอร์เซ็นต์ การตั้งราคาคงที่สำหรับ AmountBeforeTax อาจส่งผลให้ภาษีและค่าธรรมเนียมไม่ถูกต้อง โดยทั่วไป เราขอแนะนำอย่างยิ่งให้ใช้ TaxFeeInfo เพื่อระบุภาษีและค่าธรรมเนียมของที่พัก

ตัวอย่าง

  • หากเรากำหนดราคาสำหรับการเข้าพัก 1 คืนโดยที่ AmountBeforeTax เป็น 90, AmountAfterTax เป็น 100 และ fixed_price เป็น 80 ราคาโปรโมชันจะเป็น 80
  • หากเรากําหนดราคาสำหรับการเข้าพัก 1 คืนโดยที่ AmountBeforeTax เท่ากับ 100, fixed_amount เท่ากับ 80 และ TaxFeeInfo ระบุภาษี 8% ผลลัพธ์ที่ได้จะเป็นดังนี้

    อัตราโปรโมชัน = ราคาคงที่ * (1 + เปอร์เซ็นต์ภาษี)

    86.40 = 80 * 1.08

  • หากเรากําลังกําหนดราคาสำหรับการเข้าพัก 3 คืน โดยที่ค่า AmountAfterTax คือ 100, 110 และ 120 และ fixed_amount คือ 300

    อัตราโปรโมชัน = 300

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

ต้องระบุ percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price หรือ fixed_price_per_night เพียงรายการเดียว

หากระบุราคาต่อคืน AmountAfterTax ระบบจะกำหนดราคาสำหรับการเข้าพักแต่ละคืน ซึ่งรวมภาษีและค่าธรรมเนียมแล้ว เป็นมูลค่าที่ระบุ หากระบุ AmountBeforeTax ระบบจะตั้งค่าราคาก่อนหักภาษีสำหรับการเข้าพักแต่ละคืนเป็นค่าที่ระบุ ไม่ว่าจะระบุ AmountAfterTax หรือไม่ก็ตาม ระบบจะถือว่าราคานี้ใช้สกุลเงินเดียวกับราคาต่อคืน

หาก AmountAfterTax มีไว้เพื่อแสดงภาษีแบบเปอร์เซ็นต์ การตั้งราคาคงที่สำหรับ AmountBeforeTax อาจส่งผลให้ภาษีและค่าธรรมเนียมไม่ถูกต้อง โดยทั่วไป เราขอแนะนำอย่างยิ่งให้ใช้ TaxFeeInfo เพื่อระบุภาษีและค่าธรรมเนียมของที่พัก

หากระบุ applied_nights ระบบจะใช้ราคาใหม่กับ N คืนที่ถูกที่สุด

ตัวอย่าง

  • หากเรากําหนดราคาสำหรับการเข้าพัก 2 คืนโดยที่ค่า AmountBeforeTax คือ 90, 90 ค่า AmountAfterTax คือ 100, 100 และ fixed_price คือ 80 อัตราโปรโมชันจะเป็น 80 + 80 = 160
  • หากเรากําหนดราคาสำหรับการเข้าพัก 2 คืนโดยที่ AmountBeforeTax เท่ากับ 100, 100; fixed_amount เท่ากับ 80 และ TaxFeeInfo ระบุภาษี 8% อัตราโปรโมชันจะเท่ากับ (80 + 80) * 1.08 = 172.8
  • หากเรากําหนดราคาสำหรับการเข้าพัก 3 คืนโดยที่ค่า AmountAfterTax คือ 100, 110 และ 120 และ fixed_amount คือ 110 อัตราโปรโมชันจะเป็น 110 * 3 = 330
Promotions / HotelPromotions / Promotion / Discount / @applied_nights 0..1 integer

ควรใช้กับ percentage หรือ fixed_amount_per_night เท่านั้น

จำนวนคืนที่มีสิทธิ์รับส่วนลด โดยเริ่มจากคืนที่มีราคาต่ำที่สุด ต้องเป็นจำนวนเต็มตั้งแต่ 1 ถึง 99 หากไม่ได้ระบุ ระบบจะใช้ส่วนลดกับทุกคืน

Promotions / HotelPromotions / Promotion / Discount / FreeNights 0..1 FreeNights ระบุส่วนลดสำหรับบางคืนที่เข้าพักเมื่อเข้าพักถึงระยะเวลาขั้นต่ำ ไม่อนุญาตให้ใช้แอตทริบิวต์ในองค์ประกอบ Discount หลักหากมีการใช้องค์ประกอบนี้
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights 1 integer

จำนวนคืนที่เข้าพักเพื่อให้ได้รับส่วนลด ส่วนลดแต่ละรายการจะมีผลกับกลุ่มจำนวนคืนที่เข้าพักแยกกัน

เช่น สำหรับการเข้าพัก 10 คืนโดยที่ stay_nights เป็น 4 (และ repeats เป็นจริง) จะมีกลุ่มคืนที่เข้าพัก 2 กลุ่ม ได้แก่ คืนที่ 1-4 และคืนที่ 5-8 ส่วนคืนที่ 9 และ 10 จะไม่รวมอยู่ในกลุ่มคืนที่เข้าพัก

Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_nights 1 integer จำนวนคืนที่ได้รับส่วนลดในแต่ละกลุ่มของจำนวนคืนที่เข้าพัก
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_percentage 1 float ส่วนลดที่มีผลกับคืนที่มีส่วนลด หากค่านี้คือ 50 คืนที่เลือกแต่ละคืนจะได้รับส่วนลด 50%
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection 1 string ต้องเป็น cheapest หรือ last หากเป็นlast ระบบจะลดราคาสำหรับคืนที่สิ้นสุดของกลุ่มคืนที่เข้าพัก หากเป็น cheapest ระบบจะลดราคาคืนที่ถูกที่สุดภายในกลุ่มจำนวนคืนที่เข้าพัก
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats 1 boolean

ส่วนลดจะใช้กับกลุ่มการเข้าพักหลายคืนได้หรือไม่ หากเป็น false ระบบจะลดราคาเฉพาะช่วงคืนที่เข้าพักในช่วงต้นของแผนการเดินทางเท่านั้น หากเป็น true ระบบจะให้ส่วนลดสำหรับทุกช่วงของจำนวนคืนที่เข้าพัก

ตัวอย่างเช่น หาก stay_nights คือ 4 และแผนการเดินทางคือ 10 คืน หาก repeats คือ true ระบบจะให้ส่วนลด 2 ช่วง (คืนที่ 1-4 และคืนที่ 5-8) แต่หาก repeats คือ false ระบบจะให้ส่วนลดเพียง 1 ช่วง (คืนที่ 1-4)

Promotions / HotelPromotions / Promotion / Discount / @rank 0..1 integer กําหนดลําดับชั้นของโปรโมชันนี้และเลือกให้อยู่ในการเลือกแบบลําดับชั้น ซึ่งจะเลือกเฉพาะโปรโมชันที่มีลําดับชั้นต่ำที่สุดเพื่อใช้งาน ค่าต้องอยู่ระหว่าง 1 ถึง 99 หากโปรโมชันหลายรายการมีอันดับเดียวกัน ระบบจะสุ่มเลือกโปรโมชันรายการใดรายการหนึ่งและนำไปใช้
Promotions / HotelPromotions / Promotion / BestDailyDiscount 1 Discount

ต้องระบุ Discount หรือ BestDailyDiscount อย่างใดอย่างหนึ่งที่แน่นอน

ระบุส่วนลดรายวันซึ่งอาจใช้กับการเข้าพัก 1 คืน ซึ่งแตกต่างจาก Discount ที่ใช้ส่วนลดกับการเข้าพักทั้งหมด

ที่พักแต่ละแห่งอาจมีโปรโมชันกลุ่มเดียวที่ถือว่า "ดีที่สุดในแต่ละวัน" ซึ่งหมายความว่าในแต่ละคืนที่เข้าพัก ระบบจะเลือกโปรโมชัน "รายวันที่ดีที่สุด" รายการเดียวที่มีสิทธิ์และมอบส่วนลดสูงสุดสำหรับคืนนั้นๆ และอาจใช้โปรโมชันดังกล่าว

Stacking อาจระบุด้วย BestDailyDiscount โดยต้องตั้งค่าเป็น base หรือ none ระบบจะรวมส่วนลด "รายวันที่ดีที่สุด" ซึ่งให้ส่วนลดสูงสุดสำหรับแต่ละคืนเข้าด้วยกันและถือว่าเป็นส่วนลดสำหรับการเข้าพักครั้งเดียว (เช่น Discount) โดยคำนึงถึงประเภทการซ้อนที่กําหนดค่าไว้ ระบบจะเปรียบเทียบส่วนลดแบบรวมนี้กับโปรโมชัน <Discount> ที่มีสิทธิ์อื่นๆ และนำไปใช้ร่วมกันเพื่อค้นหาโปรโมชันหรือชุดค่าผสมที่ให้ส่วนลดมากที่สุด ระบบจะเลือกและนำชุดค่าผสมของ BestDailyDiscount หรือ Discount รายการเดียวมาใช้กับประเภทการซ้อน base รายการใดรายการหนึ่งซึ่งให้ราคาต่ำที่สุด

StayDates สามารถระบุพร้อมกับส่วนลดประเภทนี้ได้ แต่ต้องตั้งค่า application เป็น overlap

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

ต้องระบุ percentage, fixed_amount หรือ fixed_price เพียงรายการเดียว

ค่าทศนิยมตั้งแต่ 0-100 ซึ่งระบุเปอร์เซ็นต์ส่วนลด โดยจะมีผลกับ AmountAfterTax (หรือ AmountBeforeTax หากไม่ได้ระบุ AmountAfterTax)

ตัวอย่าง

  • หาก AmountAfterTax สำหรับการเข้าพัก 1 คืนคือ 100 และ percentage คือ 20

    อัตราโปรโมชัน = AmountAfterTax * (1 - เปอร์เซ็นต์ส่วนลด)

    80.00 = 100 * (1 - 0.2)

  • หาก AmountBeforeTax สำหรับ 1 คืนคือ 100, percentage คือ 20 และ TaxFeeInfo ระบุภาษี 10 ผลลัพธ์ที่ได้คือ

    อัตราโปรโมชัน = AmountBeforeTax * (1 - เปอร์เซ็นต์ส่วนลด) + ภาษี

    90.00 = 100 * (1 - 0.2) + 10

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

ต้องระบุ percentage, fixed_amount หรือ fixed_price เพียงรายการเดียว

จำนวนเงินคงที่ที่จะหักออกจากAmountAfterTaxราคาต่อคืนสำหรับคนเดียว (หรือAmountBeforeTaxราคาต่อคืนหากไม่ได้ระบุAmountAfterTax) ระบบจะถือว่าราคาดังกล่าวใช้สกุลเงินเดียวกับราคาต่อคืน หากค่านี้มากกว่าผลรวมของราคาต่อคืน ค่าที่ได้จะเป็น 0

ตัวอย่าง

  • หาก AmountBeforeTax สำหรับ 1 คืนคือ 90, AmountAfterTax คือ 100 และ fixed_amount คือ 20

    ราคาโปรโมชัน = AmountAfterTax - ส่วนลดคงที่

    80.00 = 100 - 20

  • หาก AmountBeforeTax สำหรับ 1 คืนคือ 100, fixed_amount คือ 20 และ TaxFeeInfo ระบุภาษี 8%

    อัตราโปรโมชัน = (AmountBeforeTax - ส่วนลดแบบตายตัว) * (1 + ภาษีแบบเปอร์เซ็นต์)

    86.40 = (100 - 20) * 1.08

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

ต้องระบุ percentage, fixed_amount หรือ fixed_price เพียงรายการเดียว

หากระบุราคาต่อคืน AmountAfterTax ระบบจะตั้งค่าราคาสำหรับคืนที่เข้าพัก ซึ่งรวมภาษีและค่าธรรมเนียมแล้ว เป็นค่าที่ระบุ หากระบุ AmountBeforeTax ระบบจะตั้งค่าราคาก่อนหักภาษีสำหรับการเข้าพักเป็นค่าที่ระบุ ไม่ว่าจะระบุ AmountAfterTax หรือไม่ก็ตาม ระบบจะถือว่าราคาดังกล่าวใช้สกุลเงินเดียวกับราคาต่อคืน

ตัวอย่าง

  • หาก AmountBeforeTax สำหรับ 1 คืนคือ 90, AmountAfterTax คือ 100 และ fixed_price คือ 80 อัตราโปรโมชันคือ 80
  • หาก AmountBeforeTax สำหรับ 1 คืนคือ 100, fixed_amount คือ 80 และ TaxFeeInfo ระบุภาษี 8%

    อัตราโปรโมชัน = ราคาคงที่ * (1 + เปอร์เซ็นต์ภาษี)

    86.40 = 80 * 1.08

Promotions / HotelPromotions / Promotion / InventoryCount 0..1 InventoryCount กำหนดข้อจำกัดเกี่ยวกับจำนวนห้องพักที่ต้องมีให้ใช้งานเพื่อให้ใช้โปรโมชันนี้ได้ ส่วนลดจะมีผลกับคืนที่ตรงกับข้อจำกัดเท่านั้น ไม่อนุญาตเมื่อใช้ส่วนลด fixed_amount โปรดทราบว่าจำนวนห้องว่างจะระบุด้วย OTA_HotelInvCountNotifRQ (InvCount) หรือ OTA_HotelAvailNotifRQ (BookingLimit)
Promotions / HotelPromotions / Promotion / InventoryCount / @min 0..1 integer จำนวนห้องขั้นต่ำที่ต้องมีให้โปรโมชันใช้กับราคาต่อคืน หากไม่ได้ระบุ จะถือว่าไม่มีจำนวนขั้นต่ำ
Promotions / HotelPromotions / Promotion / InventoryCount / @max 0..1 integer จำนวนห้องสูงสุดที่ต้องมีให้โปรโมชันใช้กับราคาต่อคืน หากไม่ได้ระบุ จะถือว่าไม่มีจำนวนสูงสุด
Promotions / HotelPromotions / Promotion / LengthOfStay 0..1 LengthOfStay กำหนดขีดจำกัดของระยะเวลาในการเข้าพักที่ระบบจะเรียกเก็บภาษีนี้ได้ โดยจะไม่มีการเรียกเก็บภาษีดังกล่าวหากระยะเวลาในการเข้าพักไม่อยู่ในขีดจำกัดขั้นต่ำและสูงสุด
Promotions / HotelPromotions / Promotion / LengthOfStay / @min 0..1 integer จำนวนคืนขั้นต่ำที่เข้าพักซึ่งอนุญาตให้ใช้โปรโมชันได้ หากไม่ได้ระบุ จะถือว่าไม่มีจำนวนขั้นต่ำ
Promotions / HotelPromotions / Promotion / LengthOfStay / @max 0..1 integer จำนวนคืนสูงสุดที่เข้าพักซึ่งอนุญาตให้ใช้โปรโมชันได้ หากไม่ได้ระบุ จะถือว่าไม่มีจำนวนสูงสุด
Promotions / HotelPromotions / Promotion / MembershipRateRule 0..1 MembershipRateRule

คอนเทนเนอร์สำหรับกฎอัตราสมาชิกที่จะทริกเกอร์ตัวเลือก UI ที่เฉพาะเจาะจงสำหรับส่วนลดที่เกี่ยวข้อง

ไม่ควรระบุองค์ประกอบนี้ เว้นแต่จะมีการระบุ <Discount> ด้วย

Promotions / HotelPromotions / Promotion / MembershipRateRule / @id 1 string

รหัส กฎเกี่ยวกับอัตราที่เชื่อมโยงกับโปรแกรมการเป็นสมาชิก

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 ระบุแพ็กเกจราคา ระบบจะกำหนดแพ็กเกจราคาจากชุดค่าผสมของแพ็กเกจ ราคา และจำนวนห้องว่างตามที่ระบุไว้ในข้อความ Transaction (Property Data), OTA_HotelRateAmountNotifRQ และ OTA_HotelAvailNotifRQ รวมถึงกำหนดตามที่ PackageID ระบุไว้
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan / @id 1 string ตัวระบุที่ไม่ซ้ำกันสำหรับแพ็กเกจราคา ค่านี้จะแมปกับค่า PackageID ใน <PackageData> ของข้อความ Transaction (Property Data) และในแอตทริบิวต์ RatePlanCode ของ <StatusApplicationControl> ทั้งข้อความ <OTA_HotelRateAmountNotifRQ> และ <OTA_HotelAvailNotifRQ> จำนวนอักขระสูงสุดที่อนุญาตคือ 50 ตัว
Promotions / HotelPromotions / Promotion / RoomTypes 0..1 RoomTypes คอนเทนเนอร์สำหรับรายการประเภทห้องพักที่มีสิทธิ์รับโปรโมชัน โปรโมชันจะมีผลกับ <RoomType> แต่ละรายการที่ระบุ หากไม่มีการระบุ <RoomTypes> โปรโมชันจะมีผลกับห้องพักทุกประเภท
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType 1..n RoomType ระบุประเภทห้องพัก ประเภทห้องพักจะระบุอยู่ในองค์ประกอบ <RoomData> ของข้อความ Transaction (Property Data) และมีการอ้างอิงโดยใช้ค่า <RoomID> (นอกจากนี้ ค่า <RoomID> ยังอ้างอิงโดยแอตทริบิวต์ InvTypeCode ในข้อความ OTA_HotelRateAmountNotifRQ)
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType / @id 1 string ตัวระบุที่ไม่ซ้ำกันสำหรับห้องพัก (ประเภทห้องพัก) ค่านี้จะแมปกับ <RoomID> ในข้อความ Transaction (Property Data) จำนวนอักขระสูงสุดที่อนุญาตคือ 50 ตัว
Promotions / HotelPromotions / Promotion / Stacking 0..1 Stacking ระบุวิธีรวมโปรโมชัน หากไม่ได้ระบุ ระบบจะถือว่า "type" เป็น base
Promotions / HotelPromotions / Promotion / Stacking / @type 1 enum

คุณใช้โปรโมชันหลายรายการกับราคาเดียวได้ โดยขึ้นอยู่กับการตั้งค่าต่อไปนี้

  • any: ใช้ร่วมกับโปรโมชันอื่นๆ ได้ (ยกเว้น none) แต่เราไม่รับประกันลำดับที่ควรใช้โปรโมชัน
  • base: ระบบจะเลือกและแสดงโปรโมชัน base ที่เหมาะสมที่สุดก่อนโปรโมชันอื่นๆ ก่อนหน้านี้ตัวเลือกนี้มีชื่อว่า base_only
  • second: ระบบจะเลือกโปรโมชัน second ที่มีสิทธิ์ที่ดีที่สุดและนำไปใช้หลังจากโปรโมชัน base (หากมี) และก่อนโปรโมชัน any
  • none: ใช้ไม่ได้ร่วมกับโปรโมชันอื่นๆ

ระบบจะใช้ชุดโปรโมชันที่ให้ส่วนลดสูงสุดกับราคาจากชุดค่าผสมที่อนุญาต

Promotions / HotelPromotions / Promotion / StayDates 0..1 StayDates คอนเทนเนอร์สำหรับช่วงวันที่อย่างน้อย 1 ช่วงซึ่งกำหนดวิธีใช้โปรโมชัน เช่น เพื่อรองรับส่วนลดตามฤดูกาล
Promotions / HotelPromotions / Promotion / StayDates / @application 1 enum

อธิบายวิธีใช้โปรโมชัน

ค่าที่ใช้ได้มีดังนี้

  • all: ใช้โปรโมชันกับแต่ละคืนในแผนการเดินทาง หากวันที่ทั้งหมดในแผนการเดินทางซ้อนทับกับวันที่เข้าพัก
  • any: ใช้โปรโมชันกับทุกคืนในแผนการเดินทาง หากวันที่ในแผนการเดินทางซ้อนทับกับวันที่ในช่วงวันที่เข้าพัก
  • overlap: ใช้โปรโมชันกับคืนที่ซ้อนทับกับวันที่ในช่วงวันที่เข้าพักตามที่ระบุในแผนการเดินทางเท่านั้น

คุณต้องระบุแอตทริบิวต์นี้เสมอ

  • หาก <Discount> ระบุ percentage และตั้งค่า application เป็น all หรือ any ระบบจะใช้ส่วนลดเป็นเปอร์เซ็นต์ของการเข้าพักทั้งหมด
  • หาก <Discount> ระบุ percentage และตั้งค่า application เป็น overlap ระบบจะใช้ส่วนลดเป็นเปอร์เซ็นต์ของราคาต่อคืนสำหรับคืนที่ทับซ้อนกัน
  • <Discount> ที่ระบุ fixed_amount และ application ตั้งค่าเป็น overlap เป็นชุดค่าผสมที่ไม่ถูกต้อง
  • <FreeNights> รองรับค่า application ทั้งหมด โปรดทราบว่าสำหรับ overlap ระบบจะพิจารณาเฉพาะคืนที่ทับซ้อนกันสำหรับข้อกำหนดของส่วนลด
Promotions / HotelPromotions / Promotion / StayDates / DateRange 1..99 DateRange

ช่วงวันที่ซึ่งระบุวันที่ที่จะใช้โปรโมชัน

นอกจากนี้ ยังรองรับรูปแบบ YearlessDate ด้วย

  • หาก start หรือ end รายการใดรายการหนึ่งเป็นวันที่ที่ไม่มีปี คุณต้องป้อนข้อมูลทั้ง 2 รายการเป็นวันที่ที่ไม่มีปี
  • ช่วงวันที่ที่ไม่มีปีต้องไม่วนกลับมาที่ปีใหม่ แต่ให้แสดงเป็นช่วงวันที่ 2 ช่วงที่อยู่ติดกันแทน เช่น {"12-29", "01-05"} อาจแสดงเป็น {"12-29", "12-31"} และ {"01-01", "01-05"}

หากต้องการตั้งค่าช่วง StayDates เพื่ออนุญาตให้ใช้โปรโมชันในวันใดวันหนึ่งของสัปดาห์ คุณควรตั้งค่าวันที่ start เป็นวันที่ปัจจุบันโดยไม่มี end เพื่อไม่ให้โปรโมชันหมดอายุ

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start 0..1 Date or YearlessDate วันที่เริ่มต้น (ตามเขตเวลาของที่พัก) ของช่วงวันที่เข้าพัก โดยนับรวมวันที่ดังกล่าวด้วย วันที่นี้ต้องเป็นวันที่ก่อนหน้าหรือวันที่เดียวกับ end หากไม่มีการระบุ start ระบบจะถือว่าช่วงวันที่ดังกล่าวไม่มีขอบเขตวันที่เริ่มต้น

คุณควรระบุค่า start หากไม่ได้ระบุค่า end

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end 0..1 Date or YearlessDate วันที่สิ้นสุด (ตามเขตเวลาของที่พัก) ของช่วงวันที่เข้าพัก โดยนับรวมวันที่ดังกล่าวด้วย วันที่นี้ต้องเป็นวันที่เดียวกันหรือหลังจาก start หากไม่มีการระบุ end ระบบจะถือว่าช่วงวันที่ดังกล่าวไม่มีขอบเขตนับตั้งแต่วันที่ start เป็นต้นไป

คุณควรระบุค่า end หากไม่ได้ระบุค่า start

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @days_of_week 0..1 string

วันของสัปดาห์ที่อนุญาตให้ใช้ในช่วงวันที่ หากไม่มีการระบุ ระบบจะอนุญาตให้ใช้ทุกวันในช่วงวันที่ อักขระแต่ละตัวในสตริงจะระบุวัน เช่น "MTWHF" เป็นการระบุว่าระบบอนุญาตให้ใช้วันธรรมดาในช่วงวันที่

อักขระที่ใช้ได้มีดังนี้

  • M สำหรับวันจันทร์
  • T สำหรับวันอังคาร
  • W สำหรับวันพุธ
  • H สำหรับวันพฤหัสบดี
  • F สำหรับวันศุกร์
  • S สำหรับวันเสาร์
  • U สำหรับวันอาทิตย์

คุณจะระบุชุดค่าผสมของอักขระแบบใดก็ได้

Promotions / HotelPromotions / Promotion / UserCountries 0..1 UserCountries คอนเทนเนอร์สำหรับแสดงสถานที่ตั้ง (ประเทศ) ของผู้ใช้ที่มีสิทธิ์รับโปรโมชัน หากระบุไว้ จะมีเฉพาะผู้ใช้ที่มีสิทธิ์ในประเทศที่ระบุเท่านั้นที่ได้รับราคาส่วนลด หากไม่ได้ระบุ ผู้ใช้ที่มีสิทธิ์ในประเทศใดก็ได้จะได้รับราคาที่มีส่วนลด
Promotions / HotelPromotions / Promotion / UserCountries / @type 0..1 enum ประเภทของข้อกําหนด UserCountries

ค่าที่ใช้ได้คือ include และ exclude

หากตั้งค่า UserCountries type เป็น include โปรโมชันจะมีผลกับผู้ใช้จากประเทศที่ระบุ

หาก UserCountries type เป็น exclude โปรโมชันจะมีผลกับผู้ใช้ที่ไม่ได้อยู่ในประเทศที่ระบุ

หากไม่ได้ตั้งค่า UserCountries type ระบบจะถือว่ามีค่าเป็น include และจะมีการใช้โปรโมชันกับผู้ใช้จากประเทศที่ระบุ

Promotions / HotelPromotions / Promotion / UserCountries / Country 1..300 Country กำหนดประเทศเดียวที่ผู้ใช้มีสิทธิ์รับโปรโมชัน
Promotions / HotelPromotions / Promotion / UserCountries / Country / @code 1 string รหัสประเทศ CLDR เช่น DE หรือ FR โปรดทราบว่าสำหรับบางประเทศ รหัสประเทศ CLDR จะแตกต่างจากรหัสประเทศ ISO 2 ตัวอักษร นอกจากนี้ ระบบยังไม่รองรับรหัสภูมิภาค CLDR

ตัวอย่าง

พร็อพเพอร์ตี้ 1 รายการมีโปรโมชันได้ไม่เกิน 500 รายการ ดูตัวอย่าง "ลบโปรโมชัน 1 รายการ" เพื่อนำโปรโมชันออกจากพร็อพเพอร์ตี้

ข้อความพื้นฐาน

ตัวอย่างต่อไปนี้แสดงข้อความ 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>


ลบโปรโมชัน 1 รายการ

ตัวอย่างต่อไปนี้แสดงวิธีลบโปรโมชัน 1 รายการสำหรับที่พัก

<?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> สำหรับที่พักที่มีโปรโมชันใหม่อย่างน้อย 1 รายการ เมื่อ 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 ประเภท

ตัวอย่างต่อไปนี้แสดงกรณีที่จะมีการใช้โปรโมชัน 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 น. ของวันที่ 2 ก่อนถึงวันเดินทาง

<?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 ข้อจำกัดด้านวันที่ของข้อจำกัดนี้กำหนดให้ต้องจองระหว่างเวลา 06:30 น. ของวันที่ 01-07-2020 ถึง 18:45 น. ของวันที่ 02-07-2020

<?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 ที่ไม่มีปี ในตัวอย่างนี้ โปรโมชันจะมีผลกับวันที่เช็คอินระหว่างวันที่ 29/12 ถึง 2/1 โดยไม่คำนึงถึงปี ช่วงวันที่ที่ไม่มีปีซึ่งข้ามขอบเขตปีใหม่จะไม่ถูกต้อง ดังนั้น DateRange จึงแสดงเป็นช่วงวันที่ 2 ช่วงที่อยู่ติดกัน

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

ตัวอย่างต่อไปนี้ลดราคา 2 คืน 50% สำหรับการเข้าพัก 4 คืนแต่ละคืนในช่วงวันที่ที่จองที่ระบุ สำหรับแผนการเดินทาง 10 คืน ระบบจะลดราคา 4 คืนแรก 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>

ตัวอย่างถัดไปจะให้ส่วนลด 50% สำหรับ 1 คืนสำหรับการเข้าพักทุกๆ 3 คืนในช่วงวันที่เข้าพักที่ระบุ เฉพาะคืนที่ทับซ้อนกันเท่านั้นที่นับรวมในการเข้าพักที่มีสิทธิ์รับส่วนลด สำหรับแผนการเดินทางต่อไปนี้ที่เช็คอินในวันที่ 01-01-2022 และเช็คเอาต์ในวันที่ 07-01-2022 จำนวนคืนที่เข้าพักและส่วนลดที่มีสิทธิ์จะมีผลดังนี้

  • 2022-01-01 (stay)
  • 2022-01-02 (stay)
  • 2022-01-03
  • 2022-01-04 (ลดราคา)
  • 2022-01-05 (stay)
  • 2022-01-06 (stay)
<?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>


การเลือกแบบจัดอันดับ

ตัวอย่างต่อไปนี้มีส่วนลด 2 รายการ โดยรายการหนึ่งให้ส่วนลด 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

ตัวอย่างต่อไปนี้แสดงส่วนลดสำหรับการเข้าพัก 2 คืนโดยใช้ 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>

พิจารณาการเข้าพัก 2 คืนตั้งแต่วันที่ 30 เมษายน 2023 ถึง 2 พฤษภาคม 2023 ระบบจะคำนวณจากส่วนลดรายวันที่ให้ส่วนลดสูงสุดก่อน

สำหรับคืนแรก โปรโมชัน "ทั่วไป" คือจำนวนเงินที่มีสิทธิ์เพียงรายการเดียวที่มีส่วนลดคงที่ 20

สำหรับคืนที่ 2 โปรโมชัน "อาจ" ให้ส่วนลดมากกว่าส่วนลด "ทั่วไป" ดังนั้น เมื่อเลือก "อาจ" ส่วนลดแบบคงที่จะเป็น 50

จากนั้นสำหรับการเข้าพัก โปรโมชัน "Fiesta" จะลดราคาเป็น 500 บาทต่อคืน หรือ 1,500 บาททั้งหมด ส่วนลดนี้สามารถใช้ร่วมกับชุดค่าผสมของส่วนลดรายวันที่ดีที่สุดได้เนื่องจาก "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 มีองค์ประกอบและแอตทริบิวต์ต่อไปนี้

องค์ประกอบ / @แอตทริบิวต์ จำนวนข้อผิดพลาด ประเภท คำอธิบาย
PromotionsResponse 1 Complex element องค์ประกอบรูทที่บ่งบอกความสำเร็จหรือปัญหาของข้อความคำขอโปรโมชันที่ได้รับ
PromotionsResponse / @timestamp 1 DateTime วันที่และเวลาที่สร้างข้อความนี้
PromotionsResponse / @id 1 string ตัวระบุที่ไม่ซ้ำกันจากข้อความ Promotions ที่เกี่ยวข้อง
PromotionsResponse / @partner 1 string บัญชีพาร์ทเนอร์สำหรับข้อความนี้
PromotionsResponse / Success 0..1 Success บ่งบอกว่าข้อความโปรโมชันได้รับการประมวลผลเรียบร้อยแล้วโดยไม่มีคำเตือน ข้อผิดพลาด หรือความล้มเหลว

แต่ละข้อความจะมี <Success> หรือ <Issues> ปรากฏอยู่

PromotionsResponse / Issues 0..1 Issues คอนเทนเนอร์สำหรับปัญหาอย่างน้อย 1 รายการที่พบขณะประมวลผลข้อความโปรโมชัน

แต่ละข้อความจะมี <Success> หรือ <Issues> ปรากฏอยู่

PromotionsResponse / Issues / Issue 1..n Issue คำอธิบายของคำเตือน ข้อผิดพลาด หรือความล้มเหลวที่พบขณะประมวลผลข้อความ Promotions ดูรายละเอียดเกี่ยวกับปัญหาเหล่านี้ได้ในข้อความแสดงข้อผิดพลาดของสถานะฟีด
PromotionsResponse / Issues / Issue / @code 1 integer ตัวระบุสำหรับปัญหา
PromotionsResponse / Issues / Issue / @status 1 enum

ประเภทของปัญหาที่พบ

ค่าที่ใช้ได้คือ warning, error และ failure

ตัวอย่าง

สำเร็จ

การตอบกลับข้อความ Promotions ที่ประมวลผลเรียบร้อยแล้วมีดังนี้

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