Promosi

Ringkasan

API ini memungkinkan Anda menentukan kemungkinan diskon. Dari promosi yang ditentukan, Google akan menerapkan promosi atau kumpulan promosi yang memenuhi syarat dan menghasilkan harga terendah. Jika Anda mencari API yang mendukung penyesuaian tarif arbitrer yang dapat menaikkan atau menurunkan harga saat kondisi terpenuhi, pertimbangkan Rate Modifications API kami. Perhatikan bahwa jika kedua API tersebut ada, 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, 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>

Elemen dan Atribut

Pesan Promosi memiliki elemen dan atribut berikut:

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

Jika Anda memiliki backend yang menyediakan feed untuk beberapa akun, nilai ini harus cocok dengan nilai atribut ID yang ditentukan di elemen <RequestorID> pesan <OTA_HotelRateAmountNotifRQ> dan <OTA_HotelAvailNotifRQ> Anda untuk akun yang sama.

Promotions / @id 1 string ID unik untuk pesan permintaan ini. Nilai ini ditampilkan di 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 suatu properti. Setiap promosi berlaku untuk satu properti.

Kecuali jika <Stacking> digunakan, promosi dengan diskon terbesar berlaku untuk pemesanan saat beberapa 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> di 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, setiap promosi yang ditentukan dalam pesan saat ini akan:

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

Satu promosi untuk suatu properti. Perhatikan bahwa jika action="overlay" dan <Promotion> tidak ditentukan, maka semua promosi untuk properti akan dihapus.

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

Promotions / HotelPromotions / Promotion / @id 1 string ID unik untuk promosi. Jumlah karakter maksimum 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 ditentukan dan promosi dengan id yang sama tidak disimpan, maka promosi ini akan disimpan. Sebaliknya, jika tidak ditentukan dan promosi dengan id yang sama disimpan, maka promosi yang sudah ada akan diperbarui.

Jika delete ditentukan, promosi yang tersimpan dengan id yang sama akan 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 Container 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 diterapkan.
Promotions / HotelPromotions / Promotion / BookingDates / DateRange / @start 0..1 Date atau DateTime

Tanggal mulai atau tanggal waktu (berdasarkan zona waktu properti), inklusif, dari rentang.

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

Tanggal akhir atau waktu tanggal akhir (berdasarkan zona waktu properti), inklusif, dari rentang.

  • Tanggal atau waktu yang ditentukan oleh end harus lebih akhir dari (atau sama dengan) tanggal atau waktu yang ditentukan oleh start.
  • Jika end tidak ditentukan, rentang tersebut secara efektif tidak terbatas dalam hal waktu berakhir.
  • Jika end diberikan sebagai tanggal "YYYY-MM-DD", tanggal tersebut akan ditafsirkan sebagai 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 ditentukan, maka semua hari diizinkan dalam rentang tanggal. Setiap karakter dalam string menentukan hari. Misalnya, "MTWHF" menentukan bahwa hari kerja diizinkan dalam rentang tanggal.

Karakter yang valid adalah:

  • M untuk hari Senin
  • T untuk hari Selasa
  • W untuk hari Rabu
  • H untuk hari 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 periode 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 tanggal check-in. Misalnya, nilai 30 menunjukkan bahwa promosi hanya berlaku untuk pemesanan minimal 30 hari sebelum tanggal check-in.
  • ISO 8601 Duration (hari, jam, dan menit): Jumlah hari (dan jam/menit, opsional) sebelum tanggal check-in. Misalnya, nilai P30D menunjukkan bahwa promosi hanya berlaku untuk pemesanan minimal 30 hari sebelum tanggal check-in. Nilai P30DT6H mengharuskan pemesanan pada atau sebelum pukul 18.00 pada hari ke-30 sebelum kedatangan.
Promotions / HotelPromotions / Promotion / BookingWindow / @max 0..1 integer or duration Jumlah maksimum hari 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 tanggal check-in. Misalnya, nilai 30 menunjukkan bahwa promosi hanya berlaku untuk pemesanan paling lambat 30 hari sebelum tanggal check-in.
  • ISO 8601 Duration (hari, jam, dan menit): Jumlah hari (dan jam/menit, opsional) sebelum tanggal check-in. Misalnya, nilai P30D menunjukkan bahwa promosi hanya berlaku untuk pemesanan paling lambat 30 hari sebelum tanggal check-in. Nilai P30DT6H mengharuskan pemesanan pada atau setelah pukul 18.00 pada hari ke-30 sebelum kedatangan.
Promotions / HotelPromotions / Promotion / Ceiling 0..1 Ceiling

Menentukan batasan nilai maksimum yang dapat ditetapkan untuk tarif setelah promosi diterapkan.

Promosi harus selalu menentukan <Discount> atau <BestDailyDiscount>, jadi untuk membuat promosi yang hanya menerapkan <Ceiling>, salah satu opsi adalah menetapkan <Discount> dengan percentage dari 0.

Jika penumpukan dikonfigurasi, beberapa promosi dengan <Ceiling> dapat diterapkan ke satu masa inap. Setiap promosi akan menerapkan diskonnya, yang segera diikuti dengan batasnya. Contoh berikut menunjukkan bagaimana setiap batas berkontribusi pada penghitungan promosi berikutnya dalam stack.

Contoh:

Menetapkan harga untuk menginap 1 malam dengan AmountBeforeTax 100 dan ada tumpukan dua promosi:

  1. Promosi dengan jenis penumpukan base, fixed_amount 25, dan amount_per_night langit-langit 60
  2. Promosi dengan jenis penumpuk second, fixed_amount 25, dan amount_per_night langit-langit 90

Berikut adalah urutan penghitungan:

  1. Promosi base diterapkan terlebih dahulu dan memberikan diskon sebesar AmountBeforeTax menjadi 75, tetapi kemudian batas bawah menurunkannya menjadi 60.
  2. Promosi second memberikan diskon AmountBeforeTax dari 60 menjadi 35. Nilai ini berada di bawah batas 90 sehingga batas kedua tidak diterapkan. Tarif akhir adalah 35.

Fakta bahwa 60 adalah batas keseluruhan yang lebih ketat tidak relevan karena hanya berlaku untuk promosinya sendiri, dan tidak boleh ada satu batas 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 diterapkan.

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

amount_per_night diterapkan ke pajak dan biaya jika disertakan dalam tarif per malam menggunakan AmountAfterTax, tetapi tidak termasuk yang ditentukan menggunakan TaxFeeInfo.

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

Menentukan batasan nilai minimum yang dapat ditetapkan untuk tarif setelah promosi diterapkan.

Promosi harus selalu menentukan <Discount> atau <BestDailyDiscount>, jadi untuk membuat promosi yang hanya menerapkan <Floor>, salah satu opsi adalah menetapkan <Discount> dengan percentage dari 0.

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

Jika penumpukan dikonfigurasi, beberapa promosi dengan <Floor> dapat diterapkan ke satu masa inap. Setiap promosi akan menerapkan diskonnya, yang segera diikuti dengan harga minimumnya. Contoh berikut menunjukkan bagaimana setiap lantai berkontribusi pada penghitungan promosi berikutnya dalam stack.

Contoh:

Menetapkan harga untuk menginap 1 malam dengan AmountBeforeTax 100 dan ada tumpukan dua promosi:

  1. Promosi dengan jenis penumpukan base, fixed_amount 25, dan amount_per_night lantai 90
  2. Promosi dengan jenis penumpukan second, fixed_amount sebesar 25, dan nilai minimum amount_per_night sebesar 60

Berikut adalah urutan penghitungan:

  1. Promosi base diterapkan terlebih dahulu dan memberikan diskon pada AmountBeforeTax menjadi 75, tetapi kemudian nilai minimum menaikkannya hingga 90.
  2. Promosi second memberikan diskon AmountBeforeTax dari 90 menjadi 65. Nilai ini berada di atas nilai minimum 60 sehingga nilai minimum kedua tidak diterapkan. Tarif akhir adalah 65.

Fakta bahwa 90 adalah nilai minimum keseluruhan yang lebih ketat tidak relevan karena nilai tersebut hanya valid untuk promosinya sendiri, dan tidak boleh ada satu nilai minimum yang mencakup seluruh stack promosi.

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

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

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

amount_per_night diterapkan ke pajak dan biaya jika disertakan dalam tarif per malam menggunakan AmountAfterTax, tetapi tidak termasuk yang ditentukan menggunakan TaxFeeInfo.

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

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

Format YearlessDate juga didukung.

  • Jika salah satu dari start atau end adalah tanggal tanpa tahun, keduanya harus diisi sebagai tanggal tanpa tahun.
  • Rentang tanggal tanpa tahun tidak boleh mencakup tahun baru. Sebagai gantinya, tampilkan 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 mulai dari rentang tanggal menjadi tidak terbatas.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @end 0..1 Date or YearlessDate Tanggal akhir (berdasarkan zona waktu properti), inklusif, dari rentang tanggal. Tanggal ini harus sama dengan, atau setelah, tanggal start. Jika end tidak ditentukan, maka tanggal akhir dari rentang tanggal menjadi tidak terbatas.
Promotions / HotelPromotions / Promotion / CheckinDates / DateRange / @days_of_week 0..1 string

Hari yang diizinkan dalam rentang tanggal. Jika tidak ditentukan, maka semua hari diizinkan dalam rentang tanggal. Setiap karakter dalam string menentukan hari. Misalnya, "MTWHF" menentukan bahwa hari kerja diizinkan dalam rentang tanggal.

Karakter yang valid adalah:

  • M untuk hari Senin
  • T untuk hari Selasa
  • W untuk hari Rabu
  • H untuk hari 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 Container untuk satu atau beberapa rentang tanggal yang menentukan kapan check out harus dilakukan agar promosi diterapkan.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange 1..20 DateRange

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

Format YearlessDate juga didukung.

  • Jika salah satu dari start atau end adalah tanggal tanpa tahun, keduanya harus diisi sebagai tanggal tanpa tahun.
  • Rentang tanggal tanpa tahun tidak boleh mencakup tahun baru. Sebagai gantinya, tampilkan 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 mulai dari rentang tanggal menjadi tidak terbatas.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @end 0..1 Date or YearlessDate Tanggal akhir (berdasarkan zona waktu properti), inklusif, dari rentang tanggal. Tanggal ini harus sama dengan, atau setelah, tanggal start. Jika end tidak ditentukan, maka tanggal akhir dari rentang tanggal menjadi tidak terbatas.
Promotions / HotelPromotions / Promotion / CheckoutDates / DateRange / @days_of_week 0..1 string

Hari yang diizinkan dalam rentang tanggal. Jika tidak ditentukan, maka semua hari diizinkan dalam rentang tanggal. Setiap karakter dalam string menentukan hari. Misalnya, "MTWHF" menentukan bahwa hari kerja diizinkan dalam rentang tanggal.

Karakter yang valid adalah:

  • M untuk hari Senin
  • T untuk hari Selasa
  • W untuk hari Rabu
  • H untuk hari 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 pencantuman perangkat pengguna yang memenuhi syarat untuk promosi. Jika ditentukan, hanya pengguna yang memenuhi syarat di perangkat tercantum yang ditawari tarif diskon. Jika tidak ditentukan, pengguna yang memenuhi syarat di perangkat apa pun akan ditawari 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 ditentukan.

Menentukan diskon yang akan diterapkan untuk promosi ini.

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

Salah satu dari percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price, atau fixed_price_per_night harus ada.

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

Contoh:

  • Jika AmountAfterTax 100 dan percentage adalah 20, maka

    tarif promosi = AmountAfterTax * (1 - diskon persentase)

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

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

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

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

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

Salah satu dari percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price, atau fixed_price_per_night harus ada.

Nilai desimal dari 0-100 yang menentukan persentase diskon dasar. Serupa dengan percentage, nilai tersebut diterapkan ke AmountAfterTax (atau AmountBeforeTax jika AmountAfterTax tidak ditentukan).

Tidak seperti percentage, diskon ini selalu dihitung sebagai persentase tarif dasar, terlepas dari promosi sebelumnya yang telah diterapkan secara berurutan.

Contoh:

  • Misalnya, kita memiliki dua promosi yang diterapkan secara berurutan untuk masa inap satu malam dengan harga 100. Yang pertama adalah diskon persentase reguler sebesar 10% dan yang kedua adalah diskon persentase dasar sebesar 10%. Kemudian, tarif diskonnya adalah 80 karena kedua promosi tersebut memberikan diskon 10%. Perhatikan bahwa jika promosi kedua juga merupakan diskon persentase reguler, tarif diskonnya adalah 81 karena promosi kedua memberikan diskon 10% dari 90.
Promotions / HotelPromotions / Promotion / Discount / @fixed_amount 0..1 float

Salah satu dari percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price, atau fixed_price_per_night harus ada.

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

Contoh:

  • Jika kita menetapkan harga untuk menginap 1 malam dengan AmountBeforeTax 90, AmountAfterTax 100, dan fixed_amount 20, maka

    tarif promosi = AmountAfterTax - diskon tetap

    80,00 = 100 - 20

  • Jika kita menetapkan harga untuk menginap 1 malam dengan AmountBeforeTax 100, fixed_amount 20, dan TaxFeeInfo menentukan pajak sebesar 8%, maka

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

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

  • Jika kita menetapkan harga untuk menginap 1 malam dengan AmountBeforeTax 50, fixed_amount 60, dan TaxFeeInfo menentukan pajak sebesar 10, maka

    tarif promosi = (AmountBeforeTax - diskon tetap) * pajak

    10,00 = 0 + 10

  • Jika kita menetapkan harga untuk menginap 3 malam dengan nilai AmountAfterTax 100, 110, dan 120; serta fixed_amount 150, maka

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

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

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

Salah satu dari percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price, atau fixed_price_per_night harus ada.

Diskon tetap yang berlaku untuk masing-masing tarif per malam AmountAfterTax (atau N termurah jika applied_nights ditentukan). Jika AmountAfterTax tidak ditentukan, maka diskon tersebut akan diterapkan ke AmountBeforeTax. Ini diasumsikan dalam mata uang yang sama dengan tarif per malam. Jika fixed_amount_per_night lebih besar dari tarif per malam, tarif per malam tersebut akan dikurangi menjadi nol. Diskon tidak dapat menyebabkan tarif per malam menjadi negatif.

Contoh:

  • Jika kita menetapkan harga untuk menginap 3 malam dengan nilai AmountAfterTax 100, 110, dan 120; serta fixed_amount_per_night 10, maka

    tarif promosi = total(AmountBeforeTax - diskon jumlah tetap)

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

  • Jika kita menetapkan harga untuk menginap 3 malam dengan nilai AmountAfterTax 10, 50, dan 100; serta fixed_amount_per_night 20, maka

    tarif promosi = total(AmountAfterTax - diskon jumlah tetap)

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

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

Salah satu dari percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price, atau fixed_price_per_night harus ada.

Jika tarif per malam AmountAfterTax ditentukan, hal ini akan menetapkan harga untuk masa inap, termasuk pajak dan biaya, ke nilai yang ditentukan. Jika AmountBeforeTax ditentukan, baik AmountAfterTax ditentukan maupun tidak, hal ini akan menetapkan harga sebelum pajak untuk masa inap ke nilai yang ditentukan. Ini diasumsikan dalam mata uang yang sama dengan tarif per malam.

Jika AmountAfterTax dimaksudkan untuk mencerminkan pajak persentase, menetapkan harga tetap untuk AmountBeforeTax dapat mengakibatkan pajak dan biaya yang tidak akurat. Secara umum, sangat disarankan untuk menggunakan TaxFeeInfo guna menentukan pajak dan biaya properti.

Contoh:

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

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

    86,40 = 80 * 1,08

  • Jika kita menetapkan harga untuk menginap 3 malam dengan nilai AmountAfterTax 100, 110, dan 120; serta fixed_amount 300, maka

    tarif promosi = 300

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

Salah satu dari percentage, percentage_of_base, fixed_amount, fixed_amount_per_night, fixed_price, atau fixed_price_per_night harus ada.

Jika tarif per malam AmountAfterTax ditentukan, hal ini akan menetapkan harga untuk setiap malam menginap, termasuk pajak dan biaya, ke nilai yang ditentukan. Jika AmountBeforeTax ditentukan, baik AmountAfterTax ditentukan maupun tidak, tindakan ini akan menetapkan harga sebelum pajak untuk setiap malam menginap ke nilai yang ditentukan. Ini diasumsikan dalam mata uang yang sama dengan tarif per malam.

Jika AmountAfterTax dimaksudkan untuk mencerminkan pajak persentase, menetapkan harga tetap untuk AmountBeforeTax dapat mengakibatkan pajak dan biaya yang tidak akurat. Secara umum, sangat disarankan untuk menggunakan TaxFeeInfo guna menentukan pajak dan biaya properti.

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

Contoh:

  • Jika kita menetapkan harga untuk menginap 2 malam dengan nilai AmountBeforeTax 90, 90; nilai AmountAfterTax 100, 100; dan fixed_price 80, maka tarif promosinya adalah 80 + 80 = 160.
  • Jika kita menetapkan harga untuk menginap 2 malam dengan AmountBeforeTax 100, 100; fixed_amount adalah 80, dan TaxFeeInfo menentukan pajak sebesar 8%, maka tarif promosi adalah (80 + 80) * 1,08 = 172,8.
  • Jika kita menetapkan harga untuk menginap 3 malam dengan nilai AmountAfterTax 100, 110, dan 120; serta fixed_amount 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 dari 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 selama masa inap jika lama masa inap minimum 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. Setiap diskon diterapkan ke segmen malam menginap yang terpisah.

Misalnya, untuk masa inap 10 malam dengan stay_nights 4 (dan repeats benar), maka ada dua segmen malam menginap: malam ke-1 hingga ke-4 dan malam ke-5 hingga ke-8; 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 malam menginap.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @discount_percentage 1 float Diskon yang diterapkan untuk malam diskon. Jika nilai ini adalah 50, setiap malam yang dipilih akan mendapatkan diskon 50%.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @night_selection 1 string Harus berupa cheapest atau last. Jika last, malam di akhir segmen malam masa inap akan mendapatkan diskon. Jika cheapest, malam termurah dalam segmen malam menginap akan mendapatkan diskon.
Promotions / HotelPromotions / Promotion / Discount / FreeNights / @repeats 1 boolean

Apakah diskon dapat diterapkan ke beberapa segmen malam menginap. Jika false, hanya segmen malam menginap di awal itinerari yang akan mendapatkan diskon. Jika true, setiap segmen malam menginap akan mendapatkan diskon.

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

Promotions / HotelPromotions / Promotion / Discount / @rank 0..1 integer Memberi peringkat pada promosi ini dan memilihnya dalam pemilihan peringkat, dengan hanya promosi dengan peringkat terendah yang dipilih untuk diterapkan. Nilai harus antara 1 dan 99, inklusif. Jika beberapa promosi memiliki peringkat yang sama, salah satunya akan dipilih dan diterapkan secara acak.
Promotions / HotelPromotions / Promotion / BestDailyDiscount 1 Discount

Tepat satu dari Discount atau BestDailyDiscount harus ditentukan.

Menentukan diskon harian yang dapat diterapkan untuk satu malam menginap. Hal ini berbeda dengan Discount, yang menerapkan diskon ke seluruh masa inap.

Setiap properti dapat memiliki satu grup promosi yang dianggap "terbaik harian". Artinya, untuk setiap malam menginap, promosi "terbaik harian" tunggal yang memenuhi syarat dan memberikan diskon terbesar untuk malam tersebut akan dipilih dan dapat diterapkan.

Stacking dapat ditentukan dengan BestDailyDiscount. Nilainya harus ditetapkan ke base atau none. Diskon "harian terbaik" yang memberikan diskon terdalam untuk setiap malam digabungkan dan diperlakukan sebagai diskon satu masa inap (yaitu Discount) dengan tetap mengikuti jenis penumpukan yang dikonfigurasi. Diskon gabungan ini dibandingkan dengan, dan dapat digabungkan dengan, promosi <Diskon> lainnya yang memenuhi syarat untuk menemukan satu atau kombinasi yang memberikan diskon terdalam. Kombinasi BestDailyDiscount atau satu Discount, mana saja yang menghasilkan harga lebih rendah, dipilih dan diterapkan untuk jenis penumpukan base.

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

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

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

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

Contoh:

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

    tarif promosi = AmountAfterTax * (1 - diskon persentase)

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

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

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

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

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

Salah 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). Ini diasumsikan dalam mata uang yang sama dengan tarif per malam. Jika jumlah tersebut lebih besar dari total 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 - diskon tetap

    80,00 = 100 - 20

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

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

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

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

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

Jika tarif per malam AmountAfterTax ditentukan, hal ini akan menetapkan harga untuk malam menginap, termasuk pajak dan biaya, ke nilai yang ditentukan. Jika AmountBeforeTax ditentukan, baik AmountAfterTax ditentukan maupun tidak, hal ini akan menetapkan harga sebelum pajak untuk masa inap ke nilai yang ditentukan. Ini 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%, maka

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

    86,40 = 80 * 1,08

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

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

Elemen ini tidak boleh ditentukan kecuali jika <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 total minimum tarif kamar harian (menggunakan AmountBeforeTax atau AmountAfterTax yang lebih besar) yang harus dilampaui 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 yang berlaku untuk promosi ini. Promosi tidak berlaku jika jumlah tamu berada di luar batas minimum dan maksimum.
Promotions / HotelPromotions / Promotion / Occupancy / @min 0..1 integer Jumlah tamu yang ditentukan pengguna harus minimal nilai ini agar diskon dapat diterapkan.
Promotions / HotelPromotions / Promotion / Occupancy / @max 0..1 integer Jumlah tamu yang ditentukan pengguna tidak boleh melebihi nilai ini agar diskon dapat diterapkan.
Promotions / HotelPromotions / Promotion / RatePlans 0..1 RatePlans Container untuk daftar paket tarif yang menerapkan promosi. Jika <RatePlans> tidak ditentukan, promosi akan 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, seperti yang didefinisikan di pesan Transaksi (Data Properti), OTA_HotelRateAmountNotifRQ, dan OTA_HotelAvailNotifRQ, serta 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> dalam pesan Transaksi (Data Properti), dan di atribut RatePlanCode di <StatusApplicationControl> dalam pesan <OTA_HotelRateAmountNotifRQ> serta <OTA_HotelAvailNotifRQ>. Jumlah karakter maksimum yang diizinkan adalah 50.
Promotions / HotelPromotions / Promotion / RoomTypes 0..1 RoomTypes Container untuk daftar jenis kamar yang menerapkan promosi. Promosi ini berlaku untuk setiap <RoomType> yang ditentukan. Jika <RoomTypes> tidak ditentukan, promosi akan berlaku untuk semua kamar.
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType 1..n RoomType Menentukan jenis kamar. Jenis kamar ditentukan di elemen <RoomData> dalam pesan Transaksi (Data Properti) dan direferensikan menggunakan nilai <RoomID>-nya. (Nilai <RoomID>-nya juga direferensikan oleh atribut InvTypeCode di pesan OTA_HotelRateAmountNotifRQ.)
Promotions / HotelPromotions / Promotion / RoomTypes / RoomType / @id 1 string ID unik untuk inventaris (jenis kamar). Nilai ini dipetakan ke <RoomID> dalam pesan Transaksi (Data Properti). Jumlah karakter maksimum yang diizinkan adalah 50.
Promotions / HotelPromotions / Promotion / Stacking 0..1 Stacking Menentukan cara promosi dapat digabungkan. Jika tidak ditentukan, "type" diasumsikan menjadi 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 penerapan promosi tidak dijamin.
  • base: Promosi base terbaik yang memenuhi syarat dipilih dan diterapkan terlebih dahulu, sebelum promosi lainnya. Sebelumnya, ini bernama base_only.
  • second: Promosi second terbaik yang memenuhi syarat dipilih dan diterapkan setelah promosi base (jika berlaku) dan sebelum promosi any.
  • none: Tidak dapat digabungkan dengan promosi lainnya.

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

Promotions / HotelPromotions / Promotion / StayDates 0..1 StayDates Container 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 promosi diterapkan.

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 tanggal dalam itinerari tumpang-tindih dengan tanggal dalam rentang tanggal menginap.
  • overlap: Menerapkan promosi hanya ke malam tertentu di itinerari yang tumpang-tindih dengan tanggal dalam rentang tanggal menginap.

Atribut ini harus selalu ditentukan.

  • Jika <Discount> menentukan percentage dan application ditetapkan ke all atau any, maka diskon akan diterapkan sebagai persentase lama menginap keseluruhan.
  • Jika <Discount> menentukan percentage dan application ditetapkan ke overlap, maka diskon akan diterapkan sebagai persentase tarif per malam untuk malam yang tumpang-tindih.
  • <Discount> yang menetapkan fixed_amount dan application yang ditetapkan ke overlap adalah kombinasi yang tidak valid.
  • <FreeNights> mendukung semua nilai application. Perhatikan bahwa untuk overlap, hanya malam menginap yang tumpang-tindih yang dipertimbangkan untuk persyaratan diskon.
Promotions / HotelPromotions / Promotion / StayDates / DateRange 1..99 DateRange

Rentang tanggal yang menentukan tanggal promosi diterapkan.

Format YearlessDate juga didukung.

  • Jika salah satu dari start atau end adalah tanggal tanpa tahun, keduanya harus diisi sebagai tanggal tanpa tahun.
  • Rentang tanggal tanpa tahun tidak boleh mencakup tahun baru. Sebagai gantinya, tampilkan rentang sebagai dua rentang tanggal yang berdekatan. Misalnya, {"12-29", "01-05"} dapat direpresentasikan sebagai {"12-29", "12-31"} dan {"01-01", "01-05"}.

Jika ingin menetapkan rentang StayDates untuk mengizinkan promosi pada hari tertentu dalam seminggu, Anda harus menetapkan tanggal start sebagai tanggal saat ini tanpa end sehingga promosi tidak berakhir masa berlakunya.

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 mulai dari rentang tanggal menjadi tidak terbatas.

Anda harus menentukan nilai start jika nilai end tidak diberikan.

Promotions / HotelPromotions / Promotion / StayDates / DateRange / @end 0..1 Date or YearlessDate Tanggal akhir (berdasarkan zona waktu properti), inklusif, dari rentang tanggal. Tanggal ini harus sama dengan, atau setelah, tanggal start. Jika end tidak ditentukan, rentang tanggal menjadi tidak terbatas mulai tanggal start dan seterusnya.

Anda harus menentukan nilai end jika nilai start tidak diberikan.

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

Hari yang diizinkan dalam rentang tanggal. Jika tidak ditentukan, maka semua hari diizinkan dalam rentang tanggal. Setiap karakter dalam string menentukan hari. Misalnya, "MTWHF" menentukan bahwa hari kerja diizinkan dalam rentang tanggal.

Karakter yang valid adalah:

  • M untuk hari Senin
  • T untuk hari Selasa
  • W untuk hari Rabu
  • H untuk hari 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 Container untuk pencantuman lokasi pengguna (negara) yang memenuhi syarat untuk promosi. Jika ditentukan, hanya pengguna yang memenuhi syarat di negara tercantum yang ditawari tarif diskon. Jika tidak ditentukan, pengguna yang memenuhi syarat di semua negara akan ditawari tarif diskon.
Promotions / HotelPromotions / Promotion / UserCountries / @type 0..1 enum Jenis spesifikasi UserCountries.

Nilai yang valid adalah include dan exclude.

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

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

Jika type UserCountries tidak ditetapkan, type akan diperlakukan sebagai include dan promosi akan diterapkan kepada 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 Kode negara CLDR, seperti DE atau FR. Perhatikan bahwa, untuk beberapa negara, kode negara CLDR tidak sama dengan kode negara ISO 2 huruf. Selain itu, kode wilayah CLDR juga tidak didukung.

Contoh

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

Pesan dasar

Contoh berikut menunjukkan 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 inventaris berlebih 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 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">
    <Promotion id="1" action="delete"/>
  </HotelPromotions>
</Promotions>

Menghapus 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 suatu properti dengan satu atau beberapa promosi baru. Jika action="overlay", semua promosi yang disimpan akan 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 Penumpukan yang Berbeda

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


Jenis Pengurutan Tidak Ada

Contoh berikut menunjukkan kasus saat promosi none digunakan karena kombinasi promosi lain memberikan diskon yang lebih kecil. Jika harga aslinya adalah $100, harga diskonnya adalah $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 elemen BookingWindow digunakan dengan batas awal dan akhirnya yang ditentukan sebagai jenis Durasi ISO 8601. Batasan periode pemesanan ini mengharuskan pemesanan pada atau sebelum pukul 18.00 hari sebelum kedatangan, dan pada atau setelah pukul 12.00 pada hari ke-2 sebelum 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 min="P1DT6H" max="P2DT12H"/>
      <Discount percentage="20"/>
    </Promotion>
  </HotelPromotions>
</Promotions>


Batas DateTime Tanggal Pemesanan

Contoh berikut menunjukkan kasus saat elemen BookingDates digunakan dengan atribut start dan end sebagai jenis DateTime. Pembatasan 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 elemen CheckInDates berisi DateRanges yang memiliki kolom start dan end tanpa tahun. Dalam contoh ini, promosi berlaku untuk tanggal check-in antara 29/12 dan 2/1, terlepas dari tahunnya. Rentang tanggal tanpa tahun yang melintasi 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 memberikan diskon 50% untuk dua malam dari setiap empat malam menginap selama rentang tanggal pemesanan yang ditentukan. Untuk itinerari sepuluh malam, total empat malam akan mendapatkan diskon 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% untuk satu malam dari setiap tiga malam menginap untuk rentang tanggal menginap yang ditentukan. Hanya malam menginap yang tumpang-tindih yang memenuhi syarat untuk mendapatkan diskon. Untuk itinerari berikut dengan check-in pada 01-01-2022 dan check-out pada 07-01-2022, jumlah malam menginap dan diskon yang memenuhi syarat diterapkan sebagai berikut.

  • 01-01-2022 (masa inap)
  • 02-01-2022 (masa inap)
  • 2022-01-03
  • 04-01-2022 (diskon)
  • 05-01-2022 (masa inap)
  • 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 Berperingkat

Contoh berikut menawarkan dua diskon, satu diskon 20% dan satu lagi diskon 15%. Selama evaluasi, hanya diskon 15% yang diterapkan karena memiliki peringkat 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 untuk menginap dua malam dengan menerapkan BestDailyDiscount yang 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 masa inap dua malam dari 30 April 2023 hingga 2 Mei 2023 Untuk penghitungan, kombinasi diskon harian terbaik yang menghasilkan diskon terbesar akan ditemukan terlebih dahulu.

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

Untuk malam kedua, promosi "may" menawarkan diskon yang lebih besar daripada diskon "general". Jadi, jika "may" dipilih, jumlah discount tetapnya adalah 50.

Kemudian, untuk masa inap, promosi "fiesta" memberikan diskon sebesar 5 per malam, atau total 10. Promo ini dapat digabungkan dengan kombinasi diskon harian terbaik karena "fiesta" memiliki jenis penumpukan yang ditetapkan ke any. Jika ditetapkan ke base, hanya kombinasi diskon harian terbaik atau diskon "fiesta" yang akan diterapkan. Lihat deskripsi Stacking untuk mengetahui informasi selengkapnya.

`Secara keseluruhan, harga menginap menerima diskon jumlah tetap sebesar 20 + 50 + 10 = 80.

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:

Elemen / @Atribut Kejadian Jenis Deskripsi
PromotionsResponse 1 Complex element Elemen root yang menunjukkan keberhasilan atau masalah untuk pesan permintaan Promosi yang diterima.
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> ada di setiap pesan.

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

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

PromotionsResponse / Issues / Issue 1..n Issue Deskripsi dari peringatan, error, atau kegagalan yang dialami saat memproses pesan Promosi. Detail tentang masalah ini dapat ditemukan di 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 error.

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