โปรโมชัน

ภาพรวม

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

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

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

องค์ประกอบ / @แอตทริบิวต์ จำนวนข้อผิดพลาด ประเภท คำอธิบาย
Promotions 1 Complex element องค์ประกอบรูทของข้อความโปรโมชัน
Promotions / @partner 1 string บัญชีพาร์ทเนอร์สำหรับข้อความนี้ ค่าของสตริงนี้คือค่า "Partner key" ซึ่งแสดงอยู่ที่ หน้าการตั้งค่าบัญชีใน 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 จะถือว่าไม่มีจำนวนขั้นต่ำ

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

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

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

    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

    อัตราโปรโมชัน = ผลรวม(AmountBeforeTax - จำนวนเงินคงที่ ส่วนลด)

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

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

    อัตราโปรโมชัน = ผลรวม(AmountAfterTax - จำนวนเงินคงที่ ส่วนลด)

    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

    promotion rate = 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 ระบุวิธีรวมโปรโมชัน หากไม่ได้ระบุ ระบบจะถือว่า "ประเภท" คือ 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 ช่วงที่อยู่ติดกันแทน เช่น {"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

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

<?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 (คงเดิม)
  • 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>


การเลือกตามลำดับ

ตัวอย่างต่อไปนี้เสนอส่วนลด 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" จะลดราคาสำหรับการเข้าพักเหลือ 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 มีองค์ประกอบและแอตทริบิวต์ต่อไปนี้

องค์ประกอบ / @แอตทริบิวต์ จำนวนข้อผิดพลาด ประเภท คำอธิบาย
PromotionsResponse 1 Complex element องค์ประกอบรูทที่บ่งบอกความสำเร็จหรือปัญหาของข้อความคำขอ Promotions ที่ได้รับ
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 รายการที่พบขณะประมวลผลข้อความ Promotions

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

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

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

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

ตัวอย่าง

สำเร็จ

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

<?xml version="1.0" encoding="UTF-8"?>
<PromotionsResponse timestamp="2020-05-18T16:20:00-04:00"
                    id="12345678"
                    partner="partner_key">
  <Success/>
</PromotionsResponse>

ปัญหา

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

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