Promosi

Ringkasan

API ini memungkinkan Anda menentukan kemungkinan diskon. Dari promosi yang ditentukan, Google menerapkan promosi yang memenuhi syarat atau serangkaian promosi yang mengarah ke terendah. Jika Anda mencari API yang mendukung tarif arbitrer penyesuaian yang dapat menaikkan atau menurunkan harga saat kondisi puas, maka pertimbangkan Rate Modifieds API. Perhatikan bahwa jika kedua API tersedia, perubahan tarif akan diterapkan sebelum promosi.

Permintaan

Sintaksis

Pesan Promotions menggunakan sintaksis berikut:

<?xml version="1.0" encoding="UTF-8"?>
<Promotions partner= "partner_key"
            id="message_ID"
            timestamp="timestamp">
  <HotelPromotions hotel_id="HotelID" action="[overlay]">
    <Promotion id="PromotionID" action="[delete]">
      <BookingDates>
        <DateRange start="YYYY-MM-DD[THH:mm:ss]" end="YYYY-MM-DD[THH:mm:ss]"
          days_of_week="MTWHFSU_or_subset"/>
        <DateRange start="YYYY-MM-DD[THH:mm:ss]" end="YYYY-MM-DD[THH:mm:ss]"
          days_of_week="MTWHFSU_or_subset"/>
      </BookingDates>
      <BookingWindow min="integer_or_duration" max="integer_or_duration"/>
      <Ceiling amount_per_night="float"/>
      <Floor amount_per_night="float"/>
      <CheckinDates>
        <DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
      </CheckinDates>
      <CheckoutDates>
        <DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
      </CheckoutDates>
      <!-- Specify only one of percentage, fixed_amount, fixed_amount_per_night,
           fixed_price, or fixed_price_per_night; applied_nights is only used
           with percentage, fixed_amount_per_night, and fixed_price_per_night. -->
      <Discount percentage="float" fixed_amount="float" fixed_amount_per_night="float"
                fixed_price="float" fixed_price_per_night="float"
                applied_nights="integer_1_to_99" rank="integer_1_to_99">
        <!-- FreeNights may not be used in conjunction with attributes on Discount -->
        <FreeNights stay_nights="integer" discount_nights="integer"
                    discount_percentage="float" night_selection="[cheapest|last]"
                    repeats="boolean"/>
      </Discount>
      <!-- Exactly one of Discount or BestDailyDiscount must be specified.
           Specify only one of percentage, fixed_amount, or fixed_price. -->
      <BestDailyDiscount percentage="float" fixed_amount="float" fixed_price="float"/>
      <Devices>
        <Device type="[desktop|tablet|mobile]"/>
      </Devices>
      <InventoryCount min="integer" max="integer"/>
      <LengthOfStay min="integer" max="integer"/>
      <MembershipRateRule id="RateRuleID"/>
      <MinimumAmount before_discount="integer"/>
      <Occupancy min="integer" max="integer"/>
      <RatePlans>
        <RatePlan id="PackageID_1"/>
        <RatePlan id="PackageID_2"/>
      </RatePlans>
      <RoomTypes>
        <RoomType id="RoomID_1"/>
        <RoomType id="RoomID_2"/>
      </RoomTypes>
      <Stacking type="[any|base|none|second]"/>
      <StayDates application="[all|any|overlap]">
        <DateRange start="[YYYY-]MM-DD" end="[YYYY-]MM-DD" days_of_week="MTWHFSU_or_subset"/>
      </StayDates>
      <UserCountries type="[include|exclude]">
        <Country code="country_code"/>
      </UserCountries>
    </Promotion>
  </HotelPromotions>
</Promotions>

Elemen dan Atribut

Pesan Promosi memiliki elemen dan atribut berikut:

Element / @Attribute Kejadian Jenis Deskripsi
Promotions 1 Complex element Elemen root pesan promosi.
Promotions / @partner 1 string Akun partner untuk pesan ini. Nilai string ini adalah "Kunci partner" nilai yang tercantum di Halaman setelan akun di Pusat Pengelolaan Hotel.

Jika Anda memiliki backend yang menyediakan feed untuk beberapa akun, nilai ini harus sesuai dengan ID yang ditentukan dalam <RequestorID> dari <OTA_HotelRateAmountNotifRQ> dan <OTA_HotelAvailNotifRQ> pesan untuk pesan yang sama menggunakan akun layanan.

Promotions / @id 1 string ID unik untuk pesan permintaan ini. Nilai ini ditampilkan dalam pesan respons. Karakter yang diizinkan adalah a-z, A-Z, 0-9, _ (garis bawah), dan - (tanda hubung).
Promotions / @timestamp 1 DateTime Tanggal dan waktu pembuatan pesan ini.
Promotions / HotelPromotions 0..n HotelPromotions

Promosi untuk properti. Setiap promosi berlaku untuk satu saat ini.

Kecuali <Stacking> digunakan, promosi dengan diskon terbesar diterapkan ke pemesanan saat lebih dari satu promosi memenuhi syarat.

Promotions / HotelPromotions / @hotel_id 1 string ID unik untuk properti. Nilai ini harus cocok dengan ID hotel yang ditentukan menggunakan <id> di elemen <listing> dalam Feed Daftar Hotel. ID Hotel juga tercantum di Pusat Pengelolaan Hotel.
Promotions / HotelPromotions / @action 0..1 enum

Jika ditentukan, nilainya harus "overlay". Jika nilainya "overlay", semua promosi yang disimpan akan dihapus sebelum menyimpan promosi yang ditentukan dalam pesan saat ini.

Jika tidak ditentukan, maka setiap promosi yang ditentukan dalam berupa:

  • Added (jika tidak ada promosi tersimpan yang id yang sama)
  • Updated (jika promosi yang disimpan memiliki id)
  • Deleted (jika promosi yang disimpan memiliki id dan nilai atribut action untuk promosi yang ditentukan dalam pesan saat ini adalah "delete")
Promotions / HotelPromotions / Promotion 0..99 Promotion

Promosi tunggal untuk sebuah properti. Perhatikan bahwa jika action="overlay" dan <Promotion> adalah tidak ditentukan, semua promosi untuk properti tersebut akan dihapus.

Jika Anda perlu menggunakan lebih dari 99 promosi, hubungi Manajer Akun Teknis (TAM) Anda.

Promotions / HotelPromotions / Promotion / @id 1 string ID unik untuk promosi. Jumlah maksimum karakter yang diizinkan adalah 40. Karakter yang diizinkan adalah a-z, A-Z, 0-9, _ (garis bawah), - (tanda hubung), dan . (titik).
Promotions /HotelPromotions / Promotion / @action 0..1 enum

Jika ditentukan, nilainya harus delete. Jika tidak dan suatu promosi dengan id yang sama tidak disimpan, maka promosi disimpan. Atau, jika tidak ditentukan, dan promosi dengan id yang sama disimpan, maka promosi yang ada akan diperbarui.

Jika delete ditentukan, promosi yang disimpan dengan atribut id yang sama dihapus. Saat menggunakan delete, jangan sertakan elemen turunan apa pun di <Promotion>. Selain itu, delete tidak diizinkan bersama dengan <HotelPromotions action="overlay"/>.

Promotions / HotelPromotions / Promotion / BookingDates 0..1 BookingDates Penampung untuk satu atau beberapa rentang yang menentukan kapan pemesanan harus dilakukan agar promosi dapat diterapkan.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange 1..99 DateRange Rentang yang menentukan kapan pemesanan harus dilakukan agar promosi menjadi diterapkan.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @start 0..1 Date atau DateTime

Tanggal mulai atau tanggal dan waktu (berdasarkan zona waktu properti), inklusif, dalam rentang tersebut.

  • Tanggal atau tanggal dan waktu yang ditentukan oleh start harus lebih awal dari (atau sama dengan) tanggal atau {i>datetime<i} yang ditentukan oleh end.
  • Jika start tidak ditentukan, rentang akan secara efektif tak terbatas dalam hal waktu mulai.
  • Jika start diisi sebagai tanggal "YYYY-MM-DD", kolom ini adalah ditafsirkan sebagai tanggal & waktu "YYYY-MM-DDT00:00:00".
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @end 0..1 Date atau DateTime

Tanggal akhir atau datetime (berdasarkan zona waktu properti), inklusif, dalam rentang tersebut.

  • Tanggal atau datetime yang ditentukan oleh end harus setelahnya dari (atau sama dengan) tanggal atau {i>datetime<i} yang ditentukan oleh start.
  • Jika end tidak ditentukan, rentang akan secara efektif tak terbatas dalam hal waktu berakhir.
  • Jika end diberikan sebagai tanggal "YYYY-MM-DD", kolom ini akan ditafsirkan sebagai tanggal & waktu "YYYY-MM-DDT23:59:59".
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @days_of_week 0..1 string

Hari yang diizinkan dalam rentang tanggal. Jika tidak ditetapkan, semua hari diizinkan dalam rentang tanggal tersebut. Masing-masing karakter tertentu pada {i>string <i}menentukan hari. Misalnya, "MTWHF" menentukan hari kerja itu diizinkan dalam rentang tanggal tersebut.

Karakter yang valid adalah:

  • M untuk hari Senin
  • T untuk hari Selasa
  • W untuk hari Rabu
  • H untuk Kamis
  • F untuk hari Jumat
  • S untuk hari Sabtu
  • U untuk hari Minggu

Kombinasi karakter apa pun valid.

Promotions / HotelPromotions / Promotion / BookingWindow 0..1 BookingWindow Menentukan jangka waktu saat pemesanan harus dilakukan sesuai dengan tanggal check-in (berdasarkan zona waktu properti). Misalnya, periode pemesanan dapat ditetapkan ke minimal 7 hari, tetapi tidak lebih dari 180 hari, sebelum check in.
Promotions / HotelPromotions / Promotion / BookingWindow / @min 0..1 integer or duration Durasi minimum sebelum check in saat pemesanan harus dilakukan agar promosi dapat diterapkan. Jika tidak ditentukan, atau nilainya adalah 0, tidak ada batas minimum.

Jenis nilai yang valid adalah:

  • Bilangan bulat: Jumlah hari sebelum check-in tanggal. Misalnya, nilai 30 menunjukkan promosi hanya berlaku untuk pemesanan minimal 30 hari sebelum tanggal check-in.
  • Durasi ISO 8601 (hari, jam, dan menit): Jumlah hari (dan, jika perlu, jam/menit) sebelum tanggal check-in. Sebagai contoh, nilai P30D menunjukkan promosi hanya berlaku untuk pemesanan setidaknya 30 hari sebelum tanggal check-in. J senilai P30DT6H memerlukan pemesanan pada atau sebelum pukul 18.00 pada hari ke-30 sebelum kedatangan.
Promotions / HotelPromotions / Promotion / BookingWindow / @max 0..1 integer or duration Jumlah hari maksimum sebelum check in saat pemesanan harus dilakukan agar promosi dapat diterapkan. Jika tidak ditentukan, atau nilainya adalah 0, tidak ada batas maksimum.

Jenis nilai yang valid adalah:

  • Bilangan bulat: Jumlah hari sebelum check-in tanggal. Misalnya, nilai 30 menunjukkan promosi hanya berlaku untuk pemesanan maksimal 30 hari sebelum tanggal check-in.
  • Durasi ISO 8601 (hari, jam, dan menit): Jumlah hari (dan, jika perlu, jam/menit) sebelum tanggal check-in. Sebagai contoh, nilai P30D menunjukkan promosi hanya berlaku untuk pemesanan maksimal 30 hari sebelum tanggal check-in. J senilai P30DT6H memerlukan pemesanan pada atau setelah pukul 18.00 pada hari ke-30 sebelum kedatangan.
Promotions / HotelPromotions / Promotion / Ceiling 0..1 Ceiling

Menentukan batasan pada nilai maksimum tempat tarif dapat ditetapkan setelah promosi diterapkan.

Promosi harus selalu mencantumkan <Discount> atau <BestDailyDiscount>, jadi untuk membuat promosi yang hanya menerapkan <Ceiling>, salah satu opsinya adalah menyetel <Discount> dengan percentage 0.

Jika penumpukan dikonfigurasi, maka beberapa promosi dengan <Ceiling> dapat diterapkan untuk satu kunjungan. Setiap promosi akan menerapkan diskonnya, segera diikuti oleh batas maksimalnya. Tujuan contoh berikut menunjukkan bagaimana setiap langit-langit berkontribusi pada promosi dalam stack.

Contoh:

Harga menginap 1 malam di tempat AmountBeforeTax 100 dan ada dua promosi:

  1. Promosi dengan jenis tumpukan base, a fixed_amount dari 25, dan langit-langit amount_per_night dari 60
  2. Promosi dengan jenis tumpukan second, fixed_amount dari 25, dan langit-langit amount_per_night dari 90

Berikut adalah urutan perhitungannya:

  1. Promosi base diterapkan terlebih dahulu dan diskon AmountBeforeTax ke 75, tapi batasnya akan lebih rendah menjadi 60.
  2. Diskon promosi second AmountBeforeTax dari 60 menjadi 35. Fitur ini berada di bawah langit-langit dari 90 sehingga batas kedua tidak diterapkan. Rasio akhirnya adalah 35.

Fakta bahwa 60 adalah plafon keseluruhan yang lebih ketat tidak relevan karena hanya berlaku untuk promosinya sendiri, dan tidak boleh ada plafon yang mencakup seluruh stack promosi.

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

Jumlah maksimum yang dapat ditetapkan untuk tarif per malam setelah diskon yang diterapkan.

Jika elemen <Floor> juga ditentukan, elemen ini harus ditetapkan ke nilai yang lebih besar atau sama dengan Atribut amount_per_night di <Floor>.

amount_per_night diterapkan untuk pajak dan biaya jika termasuk dalam tarif per malam menggunakan AmountAfterTax, tetapi bukan yang ditentukan menggunakan TaxFeeInfo.

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

Menentukan batasan pada nilai minimum yang dapat ditetapkan tarifnya setelah promosi diterapkan.

Promosi harus selalu mencantumkan <Discount> atau <BestDailyDiscount>, jadi untuk membuat promosi yang hanya menerapkan <Floor>, salah satu opsinya adalah menyetel <Discount> dengan percentage 0.

Logika <Floor> masih berlaku untuk diskon <FreeNights>, meskipun malam gratis memiliki Diskon 100% diterapkan untuk item tersebut.

Jika penumpukan dikonfigurasi, maka beberapa promosi dengan <Floor> dapat diterapkan untuk satu kunjungan. Setiap promosi akan menerapkan diskonnya, segera diikuti oleh harga minimumnya. Tujuan contoh berikut menunjukkan bagaimana setiap lantai berkontribusi terhadap promosi dalam stack.

Contoh:

Harga menginap 1 malam di tempat AmountBeforeTax 100 dan ada dua promosi:

  1. Promosi dengan jenis tumpukan base, a fixed_amount dari 25, dan lantai amount_per_night dari 90
  2. Promosi dengan jenis tumpukan second, fixed_amount dari 25, dan lantai amount_per_night dari 60

Berikut adalah urutan perhitungannya:

  1. Promosi base diterapkan terlebih dahulu dan diskon AmountBeforeTax ke 75, tapi kemudian lantainya menaikkannya hingga 90.
  2. Diskon promosi second AmountBeforeTax dari 90 menjadi 65. Ini di atas lantai dasar dari 60 sehingga lantai dua tidak diterapkan. Rasio akhirnya adalah 65.

Fakta bahwa 90 adalah keseluruhan dasar yang lebih ketat tidak relevan karena hanya berlaku untuk promosinya sendiri, dan tidak boleh ada minimum yang membentang di seluruh stack promosi.

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

Jumlah minimum yang dapat ditetapkan untuk tarif per malam setelah diskon yang diterapkan.

Jika elemen <Ceiling> juga ditentukan, elemen ini harus ditetapkan ke nilai yang lebih kecil dari atau sama dengan Atribut amount_per_night di <Ceiling>.

amount_per_night diterapkan untuk pajak dan biaya jika termasuk dalam tarif per malam menggunakan AmountAfterTax, tetapi bukan yang ditentukan menggunakan TaxFeeInfo.

Promotions / HotelPromotions / Promotion / CheckinDates 0..1 CheckinDates Penampung untuk satu atau beberapa rentang tanggal yang menentukan kapan check in harus agar promosi dapat diterapkan.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange 1..20 DateRange

Rentang tanggal yang menentukan kapan check in harus dilakukan agar promosi dapat diterapkan. Elemen ini tidak diperlukan jika Anda menghapus satu atau beberapa promosi.

Format YearlessDate juga didukung.

  • Jika salah satu dari start atau end adalah tahun tanpa tahun tanggal, keduanya harus diisi sebagai tanggal tanpa tahun.
  • Rentang tanggal tanpa tahun tidak boleh digabungkan dengan tahun baru. Sebagai gantinya, menunjukkan rentang sebagai dua rentang tanggal yang berdekatan. Misalnya, {"12-29", "01-05"} dapat direpresentasikan sebagai {"12-29", "12-31"} dan {"01-01", "01-05"}.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @start 0..1 Date or YearlessDate Tanggal mulai (berdasarkan zona waktu properti), inklusif, dari rentang tanggal. Tanggal ini harus sebelum, atau sama dengan, Tanggal end. Jika start tidak ditentukan, maka tanggal rentang tanggal mulai tidak terbatas secara efektif.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @end 0..1 Date or YearlessDate Tanggal akhir (berdasarkan zona waktu properti), inklusif, dari rentang tanggal tertentu. Tanggal ini harus sama dengan, atau setelah, start tanggal. Jika end tidak ditentukan, maka tanggal rentang tanggal akhir sebenarnya tidak terbatas.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @days_of_week 0..1 string

Hari yang diizinkan dalam rentang tanggal. Jika tidak ditetapkan, semua hari diizinkan dalam rentang tanggal tersebut. Masing-masing karakter tertentu pada {i>string <i}menentukan hari. Misalnya, "MTWHF" menentukan hari kerja itu diizinkan dalam rentang tanggal tersebut.

Karakter yang valid adalah:

  • M untuk hari Senin
  • T untuk hari Selasa
  • W untuk hari Rabu
  • H untuk Kamis
  • F untuk hari Jumat
  • S untuk hari Sabtu
  • U untuk hari Minggu

Kombinasi karakter apa pun valid.

Promotions / HotelPromotions / Promotion / CheckoutDates 0..1 CheckoutDates Penampung untuk satu atau beberapa rentang tanggal yang menentukan saat check out harus dilakukan agar promosi dapat diterapkan.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange 1..20 DateRange

Rentang tanggal yang menentukan kapan check out harus dilakukan agar promosi dapat diterapkan. Elemen ini tidak diperlukan jika Anda menghapus satu atau beberapa promosi.

Format YearlessDate juga didukung.

  • Jika salah satu dari start atau end merupakan tahun tanggal, keduanya harus diisi sebagai tanggal tanpa tahun.
  • Rentang tanggal tanpa tahun tidak boleh digabungkan dengan tahun baru. Sebagai gantinya, menunjukkan rentang sebagai dua rentang tanggal yang berdekatan. Misalnya, {"12-29", "01-05"} dapat direpresentasikan sebagai {"12-29", "12-31"} dan {"01-01", "01-05"}.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @start 0..1 Date or YearlessDate Tanggal mulai (berdasarkan zona waktu properti), inklusif, dari rentang tanggal. Tanggal ini harus sebelum, atau sama dengan, Tanggal end. Jika start tidak ditentukan, maka tanggal rentang tanggal mulai tidak terbatas secara efektif.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @end 0..1 Date or YearlessDate Tanggal akhir (berdasarkan zona waktu properti), inklusif, dari rentang tanggal tertentu. Tanggal ini harus sama dengan, atau setelah, start tanggal. Jika end tidak ditentukan, maka tanggal rentang tanggal akhir sebenarnya tidak terbatas.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @days_of_week 0..1 string

Hari yang diizinkan dalam rentang tanggal. Jika tidak ditetapkan, semua hari diizinkan dalam rentang tanggal tersebut. Masing-masing karakter tertentu pada {i>string <i}menentukan hari. Misalnya, "MTWHF" menentukan hari kerja itu diizinkan dalam rentang tanggal tersebut.

Karakter yang valid adalah:

  • M untuk hari Senin
  • T untuk hari Selasa
  • W untuk hari Rabu
  • H untuk Kamis
  • F untuk hari Jumat
  • S untuk hari Sabtu
  • U untuk hari Minggu

Kombinasi karakter apa pun valid.

Promotions / HotelPromotions / Promotion / Devices 0..1 Devices Container untuk mencantumkan perangkat pengguna yang memenuhi syarat untuk promosi. Jika ditentukan, hanya pengguna yang memenuhi syarat di perangkat yang tercantum ditawarkan tarif diskon. Jika tidak ditentukan, pengguna yang memenuhi syarat di perangkat ditawarkan dengan tarif diskon.
Promotions / HotelPromotions / Promotion / Devices / Device 1..3 Device Menentukan satu jenis perangkat pengguna yang memenuhi syarat untuk promosi.
Promotions / HotelPromotions / Promotion / Devices / Device / @type 1 enum Jenis perangkat. Nilainya harus desktop, tablet, atau mobile.
Promotions / HotelPromotions / Promotion / Discount 1 Discount

Tepat satu dari Discount atau BestDailyDiscount harus ditetapkan.

Menentukan diskon yang akan diterapkan untuk promosi ini.

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

Tepat satu dari percentage, fixed_amount, fixed_amount_per_night, fixed_price, atau fixed_price_per_night adalah tidak diperlukan.

Nilai desimal dari 0-100 yang menentukan persentase diskon. Hal ini diterapkan ke AmountAfterTax (atau AmountBeforeTax jika AmountAfterTax tidak lain).

Contoh:

  • Jika AmountAfterTax adalah 100 dan percentage adalah 20, maka

    tarif promosi = AmountAfterTax * (1 - persentase diskon)

    80,00 = 100 * (1 - 0,2)

  • Jika AmountBeforeTax adalah 100, percentage adalah 20 dan TaxFeeInfo menentukan pajak sebesar 10, maka

    tarif promosi = AmountBeforeTax * (1 - persentase diskon) + pajak

    90,00 = 100 * (1 - 0,2) + 10

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

Tepat satu dari percentage, fixed_amount, fixed_amount_per_night, fixed_price, atau fixed_price_per_night adalah tidak diperlukan.

Jumlah tetap yang akan dikurangi dari jumlah Tarif per malam AmountAfterTax (atau jumlah tarif per malam AmountBeforeTax jika AmountAfterTax tidak ditentukan). Diasumsikan dalam mata uang yang sama dengan tarif per malam. Jika ini lebih besar dari jumlah tarif per malam, nilai yang dihasilkan adalah nol.

Contoh:

  • Jika kami menetapkan harga menginap 1 malam di mana AmountBeforeTax adalah 90, AmountAfterTax adalah 100, dan fixed_amount adalah 20, maka

    tarif promosi = AmountAfterTax - tetap diskon

    80,00 = 100 - 20

  • Jika kami menetapkan harga menginap 1 malam di mana AmountBeforeTax adalah 100, fixed_amount adalah 20, dan TaxFeeInfo menentukan pajak sebesar 8%, maka

    tarif promosi = (AmountBeforeTax - tetap diskon) * (1 + pajak persentase)

    86,40 = (100 - 20) * 1,08

  • Jika kami menetapkan harga menginap 1 malam di mana AmountBeforeTax adalah 50, fixed_amount adalah 50 60, dan TaxFeeInfo menentukan pajak sebesar 10, kemudian

    tarif promosi = (AmountBeforeTax - tetap diskon) * pajak

    10,00 = 0 + 10

  • Jika kami menetapkan harga menginap 3 malam Nilai AmountAfterTax adalah 100, 110, dan 120; dan fixed_amount adalah 150, maka

    tarif promosi = sum(AmountAfterTax) - (tetap diskon)

    180,00 = (100 + 110 + 120) - 150

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

Tepat satu dari percentage, fixed_amount, fixed_amount_per_night, fixed_price, atau fixed_price_per_night adalah tidak diperlukan.

Diskon tetap yang diterapkan ke setiap AmountAfterTax tarif per malam (atau N termurah jika applied_nights ditentukan). Jika AmountAfterTax tidak ditentukan, ini diterapkan ke AmountBeforeTax. Diasumsikan dalam mata uang yang sama dengan tarif per malam. Jika fixed_amount_per_night lebih besar dari tarif per malam, tarif per malam itu dikurangi menjadi nol— diskon tidak dapat menyebabkan tarif per malam menjadi negatif.

Contoh:

  • Jika kami menetapkan harga menginap 3 malam Nilai AmountAfterTax adalah 100, 110, dan 120; dan fixed_amount_per_night adalah 10, lalu

    tarif promosi = total(AmountBeforeTax - jumlah tetap diskon)

    300,00 = ((100 - 10) + (110 - 10) + (120 - 10))

  • Jika kami menetapkan harga menginap 3 malam Nilai AmountAfterTax adalah 10, 50, dan 100; dan fixed_amount_per_night adalah 20, lalu

    tarif promosi = total(AmountAfterTax - jumlah tetap diskon)

    110,00 = (0 + (50 - 20) + (100 - 20))

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

Tepat satu dari percentage, fixed_amount, fixed_amount_per_night, fixed_price, atau fixed_price_per_night adalah tidak diperlukan.

Jika tarif per malam AmountAfterTax ditentukan, maka menetapkan harga menginap, termasuk pajak dan biaya, ke nilai yang ditentukan. Jika AmountBeforeTax ditentukan, maka terlepas dari apakah AmountAfterTax ditentukan atau tidak, hal ini akan menetapkan harga sebelum pajak untuk menginap ke nilai yang ditentukan. Diasumsikan dalam mata uang yang sama dengan tarif per malam.

Jika AmountAfterTax dimaksudkan untuk mencerminkan persentase pajak, lalu tetapkan harga tetap untuk AmountBeforeTax dapat menyebabkan pajak dan biaya yang tidak akurat. Secara umum, sangat direkomendasikan untuk menggunakan TaxFeeInfo untuk menentukan pajak dan biaya properti.

Contoh:

  • Jika kami menetapkan harga menginap 1 malam di mana AmountBeforeTax adalah 90, AmountAfterTax adalah 100, dan fixed_price adalah 80, maka tarif promosinya adalah 80.
  • Jika kami menetapkan harga menginap 1 malam di mana AmountBeforeTax adalah 100, fixed_amount adalah 80, dan TaxFeeInfo menentukan pajak sebesar 8%, maka

    tarif promosi = harga tetap * (1 + pajak persentase)

    86,40 = 80 * 1,08

  • Jika kami menetapkan harga menginap 3 malam Nilai AmountAfterTax adalah 100, 110, dan 120; dan fixed_amount adalah 300, lalu

    tarif promosi = 300

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

Tepat satu dari percentage, fixed_amount, fixed_amount_per_night, fixed_price, atau fixed_price_per_night adalah tidak diperlukan.

Jika tarif per malam AmountAfterTax ditentukan, maka menetapkan harga untuk setiap malam menginap, termasuk pajak dan biaya, ke nilai yang ditentukan. Jika AmountBeforeTax ditentukan, maka terlepas dari apakah AmountAfterTax ditentukan atau tidak, hal ini akan menetapkan harga sebelum pajak untuk setiap malam menginap ke nilai yang ditentukan. Penting diasumsikan dalam mata uang yang sama dengan tarif per malam.

Jika AmountAfterTax dimaksudkan untuk mencerminkan persentase pajak, lalu tetapkan harga tetap untuk AmountBeforeTax dapat menyebabkan pajak dan biaya yang tidak akurat. Secara umum, sangat direkomendasikan untuk menggunakan TaxFeeInfo untuk menentukan pajak dan biaya properti.

Jika applied_nights ditentukan, harga yang baru akan diterapkan ke N malam termurah.

Contoh:

  • Jika kami menetapkan harga menginap 2 malam Nilai AmountBeforeTax adalah 90, 90; Nilai AmountAfterTax adalah 100, 100; dan fixed_price adalah 80, maka tarif promosinya adalah 80 + 80 = 160.
  • Jika kami menetapkan harga menginap 2 malam AmountBeforeTax adalah 100.100; fixed_amount adalah 80, dan TaxFeeInfo menentukan pajak sebesar 8%, maka tarif promosi adalah (80 + 80) * 1,08 = 172,8.
  • Jika kami menetapkan harga menginap 3 malam Nilai AmountAfterTax adalah 100, 110, dan 120; dan fixed_amount adalah 110, maka tarif promosinya adalah 110 * 3 = 330.
Promotions / HotelPromotions / Promotion / Discount / @applied_nights 0..1 integer

Ini hanya boleh digunakan dengan percentage atau fixed_amount_per_night.

Jumlah malam saat diskon diterapkan, dimulai dengan yang paling murah. Harus berupa bilangan bulat dari 1 sampai 99. Jika tidak ditentukan, diskon berlaku untuk semua malam.

Promotions / HotelPromotions / Promotion / Discount / FreeNights 0..1 FreeNights Menentukan diskon pada malam tertentu menginap saat masa inap minimum panjangnya terpenuhi. Atribut pada elemen Discount induk tidak diizinkan jika elemen ini digunakan.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @stay_nights 1 integer

Jumlah malam yang diperlukan agar diskon dapat diterapkan. Masing-masing diskon diterapkan ke segmen malam menginap yang terpisah.

Misalnya, untuk menginap 10 malam dengan stay_nights 4 (dan repeats benar), lalu ada dua malam menginap segmen: malam 1 hingga 4 dan malam ke-5 hingga 8; tindakan Malam ke-9 dan ke-10 bukan bagian dari segmen malam menginap.

Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_nights 1 integer Jumlah malam dengan diskon dalam setiap segmen masa inap.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_percentage 1 float Diskon yang diterapkan ke malam diskon. Jika nilai ini seharga 50, maka setiap malam yang dipilih mendapatkan diskon 50%.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection 1 string Harus cheapest atau last. Jika last, lalu malam di akhir segmen masa inap untuk malam hari didiskon. Jika cheapest, maka harga termurah malam dalam segmen masa inap akan didiskon.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats 1 boolean

Apakah diskon dapat diterapkan ke beberapa malam menginap segmen. Jika false, maka hanya segmen yang menginap di bagian awal itinerari didiskon. Jika true, maka semua segmen malam menginap akan didiskon.

Misalnya, jika stay_nights adalah 4 dan itinerari adalah 10 malam, maka jika repeats adalah true, maka 2 segmen didiskon (malam 1-4 dan malam 5-8); tapi, jika repeats adalah false, maka hanya 1 segmen yang diskon (malam 1-4).

Promotions / HotelPromotions / Promotion / Discount / @rank 0..1 integer Tetapkan peringkat pada promosi ini dan mengikutsertakannya ke pilihan berperingkat, dengan hanya promosi dengan peringkat terendah yang dipilih untuk diterapkan. Nilai-nilai harus antara 1 dan 99, inklusif. Jika beberapa promosi memiliki kesamaan peringkat, maka satu dipilih dan diterapkan secara sewenang-wenang.
Promotions / HotelPromotions / Promotion / BestDailyDiscount 1 Discount

Tepat satu dari Discount atau BestDailyDiscount harus ditetapkan.

Menentukan diskon harian yang dapat diterapkan pada malam hari menginap. Hal ini berbeda dengan Discount, yang berlaku diskon untuk seluruh masa inap.

Setiap properti dapat memiliki satu grup promosi yang dianggap sebagai “harian terbaik”. Artinya, untuk setiap malam menginap, single "hari terbaik" promosi yang memenuhi syarat dan menghasilkan pendapatan diskon untuk malam tersebut dipilih dan dapat diterapkan.

Stacking mungkin tidak ditentukan dengan BestDailyDiscount. "Hari terbaik" diskon yang menghasilkan diskon terbesar untuk setiap malam digabungkan dan diperlakukan sebagai satu diskon menginap (yaitu Discount) dengan jenis tumpukan ditetapkan ke base. Diskon gabungan ini dibandingkan, dan dapat digabungkan dengan <Discount> lain yang memenuhi syarat promosi untuk menemukan satu atau kombinasi yang memberikan diskon terdalam. Dapat berupa kombinasi dari BestDailyDiscount atau satu Discount, mana pun yang menghasilkan harga lebih rendah, akan dipilih dan yang diterapkan untuk jenis tumpukan base.

StayDates dapat ditentukan dengan jenis diskon ini, tetapi application harus disetel ke overlap

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

Tepat satu dari percentage, fixed_amount, atau fixed_price harus ada.

Nilai desimal dari 0-100 yang menentukan persentase diskon. Hal ini diterapkan ke AmountAfterTax (atau AmountBeforeTax jika AmountAfterTax tidak lain).

Contoh:

  • Jika AmountAfterTax untuk satu malam menginap adalah 100 dan percentage adalah 20, lalu

    tarif promosi = AmountAfterTax * (1 - persentase diskon)

    80,00 = 100 * (1 - 0,2)

  • Jika AmountBeforeTax untuk satu kali menginap adalah 100, percentage adalah 20 dan TaxFeeInfo menentukan pajak sebesar 10, maka

    tarif promosi = AmountBeforeTax * (1 - persentase diskon) + pajak

    90,00 = 100 * (1 - 0,2) + 10

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

Tepat satu dari percentage, fixed_amount, atau fixed_price harus ada.

Jumlah tetap yang akan dikurangi dari satu Tarif per malam AmountAfterTax (atau Tarif per malam AmountBeforeTax jika AmountAfterTax tidak ditentukan). Diasumsikan dalam mata uang yang sama dengan tarif per malam. Jika ini lebih besar dari jumlah tarif per malam, nilai yang dihasilkan adalah nol.

Contoh:

  • Jika AmountBeforeTax untuk satu malam adalah 90, AmountAfterTax adalah 100, dan fixed_amount adalah 20, maka

    tarif promosi = AmountAfterTax - tetap diskon

    80,00 = 100 - 20

  • Jika AmountBeforeTax untuk satu malam adalah 100, fixed_amount adalah 20, dan TaxFeeInfo menentukan pajak sebesar 8%, lalu

    tarif promosi = (AmountBeforeTax - tetap diskon) * (1 + pajak persentase)

    86,40 = (100 - 20) * 1,08

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

Tepat satu dari percentage, fixed_amount, atau fixed_price harus ada.

Jika tarif per malam AmountAfterTax ditentukan, maka menetapkan harga untuk malam menginap, termasuk pajak dan biaya, ke nilai yang ditentukan. Jika AmountBeforeTax ditentukan, maka terlepas dari apakah AmountAfterTax ditentukan atau tidak, hal ini akan menetapkan harga sebelum pajak untuk menginap ke nilai yang ditentukan. Diasumsikan dalam mata uang yang sama dengan tarif per malam.

Contoh:

  • Jika AmountBeforeTax untuk satu malam adalah 90, AmountAfterTax adalah 100, dan fixed_price adalah 80, maka tarif promosinya adalah 80.
  • Jika AmountBeforeTax untuk satu malam adalah 100, fixed_amount adalah 80, dan TaxFeeInfo menentukan pajak sebesar 8%, lalu

    tarif promosi = harga tetap * (1 + pajak persentase)

    86,40 = 80 * 1,08

Promotions / HotelPromotions / Promotion / InventoryCount 0..1 InventoryCount Menentukan batasan jumlah ruangan yang harus tersedia agar promosi ini diterapkan. Diskon hanya berlaku untuk malam hari yang memenuhi batasan tersebut. Tidak diizinkan dengan Diskon fixed_amount. Perhatikan bahwa jumlah kamar ditentukan dengan OTA_HotelInvCountNotifRQ (InvCount) atau OTA_HotelAvailNotifRQ (BookingLimit).
Promotions / HotelPromotions / Promotion / InventoryCount / @min 0..1 integer Jumlah minimum ruangan yang harus tersedia untuk promosi untuk diterapkan ke tarif per malam. Jika tidak ditentukan, maka tidak minimum.
Promotions / HotelPromotions / Promotion / InventoryCount / @max 0..1 integer Jumlah maksimum ruang yang harus tersedia untuk promosi untuk diterapkan ke tarif per malam. Jika tidak ditentukan, maka tidak maksimum.
Promotions / HotelPromotions / Promotion / LengthOfStay 0..1 LengthOfStay Menentukan batas lama menginap yang dapat dicapai dengan promosi ini diterapkan. Promosi tidak berlaku jika panjang masa inap berada di luar batas minimum dan maksimum.
Promotions / HotelPromotions / Promotion / LengthOfStay / @min 0..1 integer Jumlah malam minimum menginap yang diizinkan agar promosi diterapkan. Jika tidak ditentukan, tidak ada batas minimum.
Promotions / HotelPromotions / Promotion / LengthOfStay / @max 0..1 integer Jumlah malam maksimum menginap yang diizinkan agar promosi menjadi diterapkan. Jika tidak ditentukan, tidak ada batas maksimum.
Promotions / HotelPromotions / Promotion / MembershipRateRule 0..1 MembershipRateRule

Penampung untuk aturan tarif keanggotaan yang memicu UI tertentu perlakuan untuk diskon terkait.

Elemen ini tidak boleh ditentukan kecuali <Discount> juga ditentukan.

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

ID aturan tarif yang terkait dengan program keanggotaan.

Promotions / HotelPromotions / Promotion / MinimumAmount 0..1 MinimumAmount Menentukan jumlah minimum tarif kamar harian (menggunakan nilai yang lebih besar AmountBeforeTax atau AmountAfterTax) yang harus terlampaui agar promosi dapat diterapkan.
Promotions / HotelPromotions / Promotion / MinimumAmount / @before_discount 1 integer Nilai yang harus dilampaui agar promosi dapat diterapkan.
Promotions / HotelPromotions / Promotion / Occupancy 0..1 Occupancy Menentukan batasan jumlah tamu untuk promosi ini diterapkan. Promosi tidak berlaku jika jumlah tamu berada di luar minimum dan maksimum.
Promotions / HotelPromotions / Promotion / Occupancy / @min 0..1 integer Jumlah tamu yang ditentukan pengguna setidaknya harus pada nilai ini agar diskon yang akan diterapkan.
Promotions / HotelPromotions / Promotion / Occupancy / @max 0..1 integer Jumlah tamu yang ditentukan pengguna tidak boleh melebihi nilai ini agar diskon yang akan diterapkan.
Promotions / HotelPromotions / Promotion / RatePlans 0..1 RatePlans Penampung untuk daftar paket tarif yang menerapkan promosi. Jika <RatePlans> tidak ditentukan, promosi berlaku untuk semua paket tarif.
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan 1..n RatePlan Menentukan paket tarif. Paket tarif ditentukan oleh kombinasi paket, tarif, dan ketersediaan, sebagaimana didefinisikan dalam Transaksi (Data Properti), OTA_HotelRateAmountNotifRQ, dan OTA_HotelAvailabilityNotifRQ pesan, dan seperti yang diidentifikasi oleh PackageID.
Promotions / HotelPromotions / Promotion / RatePlans / RatePlan / @id 1 string ID unik untuk paket tarif. Nilai ini dipetakan ke Nilai PackageID di <PackageData> di pesan Transaksi (Data Properti), dan di Atribut RatePlanCode di <StatusApplicationControl> di keduanya <OTA_HotelRateAmountNotifRQ> dan <OTA_HotelAvailNotifRQ>. Jumlah karakter maksimal yang diizinkan adalah 50.
Promotions / HotelPromotions / Promotion / RoomTypes 0..1 RoomTypes Container untuk daftar jenis kamar yang menerapkan promosi. Promosi diterapkan untuk setiap <RoomType> yang ditentukan. Jika <RoomTypes> tidak ditentukan, elemen promosi berlaku untuk semua kamar.
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType 1..n RoomType Menentukan jenis kamar. Jenis kamar didefinisikan dalam Elemen <RoomData> di Pesan Transaksi (Data Properti) dan saat ini direferensikan menggunakan nilai <RoomID>-nya. ( Nilai <RoomID> juga direferensikan oleh Atribut InvTypeCode di OTA_HotelRateAmountNotifRQ messages.)
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType / @id 1 string ID unik untuk inventaris (jenis kamar). Nilai ini memetakan ke <RoomID> di pesan Transaksi (Data Properti). Jumlah karakter maksimal yang diizinkan adalah 50.
Promotions / HotelPromotions / Promotion / Stacking 0..1 Stacking Menentukan cara promosi dapat digabungkan. Jika tidak ditentukan, "type" (tipe) diasumsikan sebesar base.
Promotions / HotelPromotions / Promotion / Stacking / @type 1 enum

Beberapa promosi dapat diterapkan ke satu tarif bergantung pada setelan ini:

  • any: Dapat digabungkan dengan promosi lainnya (kecuali none), tetapi urutan promosinya tidak dijamin bisa diterapkan.
  • base: Promosi base terbaik yang memenuhi syarat adalah dipilih dan diterapkan terlebih dahulu, sebelum promosi lainnya. Ini adalah sebelumnya bernama base_only.
  • second: Promosi second terbaik yang memenuhi syarat dipilih dan diterapkan setelah promosi base (jika ada) dan sebelum promosi any.
  • none: Tidak dapat digabungkan dengan promosi.

Dari kombinasi yang diizinkan, kumpulan promosi yang menghasilkan diskon terbesar diterapkan ke tarif.

Promotions / HotelPromotions / Promotion / StayDates 0..1 StayDates Penampung untuk satu atau beberapa rentang tanggal yang menentukan cara promosi diterapkan, seperti untuk mengakomodasi diskon musiman.
Promotions / HotelPromotions / Promotion / StayDates / @application 1 enum

Menjelaskan cara penerapan promosi.

Nilai yang valid adalah:

  • all: Menerapkan promosi ke setiap malam di itinerari jika semua tanggal di itinerari tumpang-tindih dengan tanggal menginap.
  • any: Menerapkan promosi ke semua malam di itinerari jika ada tanggal dalam itinerari yang tumpang tindih dengan tanggal di rentang tanggal menginap.
  • overlap: Menerapkan promosi hanya untuk item baris malam di itinerari yang tumpang tindih dengan tanggal dalam tanggal menginap {i>range<i}.

Atribut ini harus selalu ditentukan.

  • Jika <Discount> menentukan percentage dan application disetel ke all atau any, diskon akan diterapkan sebagai persentase dari masa menginap penuh.
  • Jika <Discount> menentukan percentage dan application disetel ke overlap, diskon diterapkan sebagai persentase tarif per malam untuk tarif yang tumpang tindih malam hari.
  • <Discount> menentukan fixed_amount dan application yang ditetapkan ke overlap adalah Kombinasi tidak valid.
  • <FreeNights> mendukung semua application nilai. Perhatikan bahwa untuk overlap, hanya malam menginap yang tumpang-tindih yang akan dipertimbangkan untuk diskon lainnya.
Promotions / HotelPromotions / Promotion / StayDates / DateRange 1..99 DateRange

Rentang tanggal yang menentukan tanggal saat promosi diterapkan.

Format YearlessDate juga didukung.

  • Jika salah satu dari start atau end merupakan tahun tanggal, keduanya harus diisi sebagai tanggal tanpa tahun.
  • Rentang tanggal tanpa tahun tidak boleh digabungkan dengan tahun baru. Sebagai gantinya, menunjukkan rentang sebagai dua rentang tanggal yang berdekatan. Misalnya, {"12-29", "01-05"} dapat direpresentasikan sebagai {"12-29", "12-31"} dan {"01-01", "01-05"}.
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @start 0..1 Date or YearlessDate Tanggal mulai (berdasarkan zona waktu properti), inklusif, dari rentang tanggal. Tanggal ini harus sebelum, atau sama dengan, Tanggal end. Jika start tidak ditentukan, maka tanggal rentang tanggal mulai tidak terbatas secara efektif.
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end 0..1 Date or YearlessDate Tanggal akhir (berdasarkan zona waktu properti), inklusif, dari rentang tanggal tertentu. Tanggal ini harus sama dengan, atau setelah, start tanggal. Jika end tidak ditentukan, maka tanggal rentang tanggal akhir sebenarnya tidak terbatas.
Promotions / HotelPromotions / Promotion / StayDates / DateRange / @days_of_week 0..1 string

Hari yang diizinkan dalam rentang tanggal. Jika tidak ditetapkan, semua hari diizinkan dalam rentang tanggal tersebut. Masing-masing karakter tertentu pada {i>string <i}menentukan hari. Misalnya, "MTWHF" menentukan hari kerja itu diizinkan dalam rentang tanggal tersebut.

Karakter yang valid adalah:

  • M untuk hari Senin
  • T untuk hari Selasa
  • W untuk hari Rabu
  • H untuk Kamis
  • F untuk hari Jumat
  • S untuk hari Sabtu
  • U untuk hari Minggu

Kombinasi karakter apa pun valid.

Promotions / HotelPromotions / Promotion / UserCountries 0..1 UserCountries Penampung untuk mencantumkan lokasi pengguna (negara) yang memenuhi syarat untuk promosi. Jika ditentukan, hanya pengguna yang memenuhi syarat dalam daftar negara lain ditawarkan tarif diskon. Jika tidak ditentukan, memenuhi syarat pengguna di negara mana pun ditawarkan tarif diskon.
Promotions / HotelPromotions / Promotion / UserCountries / @type 0..1 enum Jenis spesifikasi UserCountries.

Nilai yang valid adalah include dan exclude.

Jika type UserCountry ditetapkan sebagai include, promosi berlaku untuk pengguna dari negara yang tercantum.

Jika type UserCountries adalah exclude, promosi berlaku untuk pengguna dari luar yang tercantum negara.

Jika type UserCountries tidak disetel, statusnya akan diperlakukan sebagai include dan promosi berlaku untuk pengguna dari negara yang tercantum.

Promotions / HotelPromotions / Promotion / UserCountries / Country 1..300 Country Menentukan satu negara tempat pengguna memenuhi syarat untuk promosi.
Promotions / HotelPromotions / Promotion / UserCountries / Country / @code 1 string Negara CLDR kode, seperti DE atau FR. Perhatikan bahwa, untuk beberapa negara, kode negara CLDR tidak sama dengan ISO 2 huruf kode negara. Selain itu, kode wilayah CLDR tidak didukung.

Contoh

Ada batas 500 promosi per properti. Lihat "Hapus satu promosi" untuk menghapus promosi dari properti.

Pesan dasar

Contoh berikut menampilkan pesan Promotions dasar:

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


Kondisi inventaris

Contoh berikut menunjukkan cara membuat diskon jika ada kelebihan inventaris yang dekat dengan tanggal kedatangan:

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


Menghapus satu promosi

Contoh berikut menunjukkan cara menghapus satu promosi untuk sebuah properti:

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

Hapus semua promosi

Contoh berikut menunjukkan cara menghapus semua promosi untuk suatu properti:

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



Menempatkan semua promosi

Contoh berikut menunjukkan cara menempatkan <HotelPromotions> untuk sebuah properti dengan satu atau beberapa promosi baru. Saat action="overlay", semua disimpan promosi dihapus sebelum menyimpan promosi yang ditentukan dalam pesan saat ini:

<?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 Jenis Tumpukan yang Berbeda

Contoh berikut menunjukkan kasus saat tiga promosi berbeda akan diterapkan (base, second, any). Perhatikan bahwa promosi none tidak akan diterapkan karena promosi lain memberikan diskon yang lebih baik. Jika data asli harga $100, harga diskonnya menjadi $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>


Tidak Ada Jenis Tumpukan

Contoh berikut menunjukkan kasus saat promosi none digunakan karena kombinasi promosi lain akan memberikan diskon yang lebih kecil. Jika harga aslinya adalah $100, harga diskonnya menjadi $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>



Batas Durasi Periode Pemesanan

Contoh berikut menunjukkan kasus saat BookingWindow digunakan dengan batas awal dan akhir yang didefinisikan sebagai Durasi ISO 8601 . Batasan periode pemesanan ini mengharuskan pemesanan pada atau sebelum pukul 18.00 sehari sebelum kedatangan, dan pada atau setelah pukul 12:00 pada hari ke-2 sebelum saat tiba.

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


Batas DateTime Tanggal Pemesanan

Contoh berikut menunjukkan kasus saat BookingDates digunakan dengan atribut start dan end sebagai Jenis DateTime. Batasan tanggal pemesanan ini mengharuskan pemesanan dilakukan antara pukul 06.30 pada 01-07-2020 dan 18.45 pada 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>


Rentang tanggal tanpa tahun

Contoh berikut menunjukkan kasus saat CheckInDates berisi DateRanges yang memiliki start dan end kolom tanpa tahun. Dalam contoh ini, promosi berlaku sampai tanggal 29/12/2029, terlepas dari tahunnya. Tidak Bertahun rentang tanggal yang melewati batas tahun baru tidak valid, sehingga DateRange dinyatakan sebagai dua rentang tanggal yang berdekatan.

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



Diskon FreeNights

Contoh berikut adalah diskon 50% untuk dua malam untuk setiap empat malam menginap selama rentang tanggal pemesanan yang ditentukan. Untuk itinerari sepuluh malam, total empat malam akan didiskon 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>

Contoh berikutnya memberikan diskon 50% satu malam untuk setiap tiga malam menginap selama rentang tanggal menginap yang ditentukan. Hanya jumlah malam menginap yang tumpang-tindih agar memenuhi syarat untuk mendapatkan diskon. Untuk itinerari berikut dengan check in tanggal 01-01-2022 dan check-out pada tanggal 2022-01-07, masa inap yang memenuhi syarat dan diskon diterapkan sebagai berikut.

  • 01-01-2022 (menginap)
  • 02-01-2022 (menginap)
  • 2022-01-03
  • 2022-01-04 (didiskon)
  • 05-01-2022 (menginap)
  • 06-01-2022 (menginap)
<?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>


Pilihan Peringkat

Contoh berikut menawarkan dua diskon, satu diskon 20% dan satu lagi untuk diskon 15%. Selama evaluasi, hanya diskon 15% yang diterapkan karena peringkatnya lebih rendah.

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

Contoh berikut memberikan diskon menginap dua malam dengan menerapkan BestDailyDiscount ditumpuk dengan 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>

Pertimbangkan untuk menginap dua malam dari 30 April 2023 hingga 2 Mei 2023 Untuk penghitungan, kombinasi diskon harian terbaik yang menghasilkan diskon terdalam ditemukan terlebih dahulu.

Untuk malam pertama, "umum" promosi adalah satu-satunya jumlah yang memenuhi syarat dengan dengan diskon tetap sebesar 20.

Untuk malam kedua, "mungkin" menawarkan diskon yang lebih besar dibandingkan "umum" diskon. Jadi, ketika “mungkin” dipilih diskon tetap jumlahnya adalah 50.

Kemudian untuk menginap, "pesta" diskon promosi menjadi 5 per malam, atau Total 10. Paket ini dapat digabungkan dengan kombinasi diskon harian terbaik karena "pesta" memiliki jenis tumpukan yang ditetapkan ke any. Jika sudah ditetapkan hingga base, maka hanya kombinasi diskon harian terbaik atau "pesta" diskon yang diterapkan. Lihat deskripsi Stacking untuk mengetahui informasi selengkapnya.

`Secara keseluruhan, harga penginapan adalah 20 + 50 + 10 = 80 jumlah tetap diskon.

Respons

Sintaksis

Pesan PromotionsResponse menggunakan sintaksis berikut:

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

Elemen dan Atribut

Pesan PromotionsResponse memiliki elemen dan atribut berikut:

Element / @Attribute Kejadian Jenis Deskripsi
PromotionsResponse 1 Complex element Elemen {i>root<i} yang menunjukkan keberhasilan atau masalah Pesan permintaan promosi.
PromotionsResponse / @timestamp 1 DateTime Tanggal dan waktu pembuatan pesan ini.
PromotionsResponse / @id 1 string ID unik dari pesan Promosi terkait.
PromotionsResponse / @partner 1 string Akun partner untuk pesan ini.
PromotionsResponse / Success 0..1 Success Menunjukkan bahwa pesan Promosi berhasil diproses tanpa peringatan, error, atau kegagalan.

<Success> atau <Issues> adalah yang ada di setiap pesan.

PromotionsResponse / Issues 0..1 Issues Container untuk satu atau beberapa masalah yang dialami saat memproses Pesan promosi.

<Success> atau <Issues> adalah yang ada di setiap pesan.

PromotionsResponse / Issues / Issue 1..n Issue Deskripsi peringatan, kesalahan, atau kegagalan yang dialami saat memproses pesan Promosi. Detail tentang masalah ini dapat ditemukan inci Pesan Error Status Feed.
PromotionsResponse / Issues / Issue / @code 1 integer ID untuk masalah.
PromotionsResponse / Issues / Issue / @status 1 enum

Jenis masalah yang dialami.

Nilai yang valid adalah warning, error, dan failure.

Contoh

Berhasil

Berikut adalah respons terhadap pesan Promosi yang berhasil diproses.

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

Masalah

Berikut adalah respons terhadap pesan Promosi yang tidak diproses karena yang sama.

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