Tarif yang dikirim melalui <OTA_HotelRateAmountNotifRQ>
dapat diubah untuk memperhitungkan dewasa dan anak-anak selain jumlah asli tamu tarif. Pesan ExtraGuestCharges
memungkinkan spesifikasi terkait cara menghitung tarif untuk tamu tambahan tersebut serta kamar, paket tarif, dan tanggal menginap yang akan dikenai biaya.
Persyaratan Kapasitas
Harga yang dihitung dari pesan ExtraGuestCharges
hanya valid jika semua persyaratan kapasitas terpenuhi. Lihat Transaksi (Data Properti) untuk informasi selengkapnya.
Permintaan
Sintaksis
Pesan ExtraGuestCharges
menggunakan sintaksis berikut:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges partner="partner_account_name"
id="message_ID"
timestamp="timestamp">
<HotelExtraGuestCharges hotel_id="HotelID" action="[overlay]">
<ExtraGuestCharge>
<RatePlans>
<RatePlan id="PackageID_1"/>
<RatePlan id="PackageID_2"/>
</RatePlans>
<RoomTypes>
<RoomType id="RoomID_1"/>
<RoomType id="RoomID_2"/>
</RoomTypes>
<StayDates>
<DateRange start="YYYY-MM-DD" end="YYYY-MM-DD"
days_of_week="MTWHFSU_or_subset"/>
</StayDates>
<AgeBrackets>
<AdultCharge amount="float"/>
<ChildAgeBrackets>
<!-- The following are different ways child charges can be specified.
Use the option that matches your system. -->
<ChildAgeBracket max_age="integer" amount="float"
exclude_from_capacity="[true|false]"/>
<ChildAgeBracket max_age="integer" percentage="float"
exclude_from_capacity="[true|false]"
counts_as_base_occupant="[never|preferred|always]"/>
<ChildAgeBracket max_age="integer" discount_amount="float"
exclude_from_capacity="[true|false]"
counts_as_base_occupant="[never|preferred|always]"/>
</ChildAgeBrackets>
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Elemen & Atribut
Pesan ExtraGuestCharges
memiliki elemen dan atribut berikut:
Element / @Attribute | Kejadian | Jenis | Deskripsi |
---|---|---|---|
ExtraGuestCharges | 1 | Complex element | Elemen root pesan ini. |
ExtraGuestCharges / @partner | 1 | string | Akun partner untuk pesan ini. Nilai string ini adalah nilai Partner key yang tercantum di
halaman Setelan akun di Pusat Pengelolaan Hotel.
Catatan: Jika Anda memiliki backend yang menyediakan feed untuk beberapa akun, nilai ini harus cocok dengan nilai atribut |
ExtraGuestCharges / @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). |
ExtraGuestCharges / @timestamp | 1 | DateTime | Tanggal dan waktu pembuatan pesan ini. |
ExtraGuestCharges / HotelExtraGuestCharges | 0..n | HotelExtraGuestCharges | Container untuk tagihan untuk satu properti. |
ExtraGuestCharges / HotelExtraGuestCharges / @hotel_id | 1 | string | ID unik untuk properti. Nilai ini harus cocok dengan ID Hotel yang ditentukan menggunakan
<id> dalam elemen <listing> di Feed Daftar Hotel. ID Hotel juga tercantum di Pusat Pengelolaan Hotel. |
ExtraGuestCharges / HotelExtraGuestCharges / @action | 0..1 | enum | Menentukan cara update diterapkan. Hanya overlay yang didukung, dan defaultnya adalah overlay. Tagihan sebelumnya untuk properti ini
akan dihapus sebelum pembaruan diterapkan. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge | 0..99 | ExtraGuestCharge | Kumpulan biaya tunggal untuk sebuah properti. Hal ini mungkin berisi batasan terkait cara pengenaan biaya dan cara penghitungan biaya berdasarkan usia atau kategori tamu. Setiap |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets | 1 | AgeBrackets | Penampung kelompok usia yang digunakan untuk menghitung biaya berdasarkan usia atau kategori tamu. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / AdultCharge | 0..1 | AdultCharge | Wadah biaya untuk orang dewasa tambahan. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / AdultCharge / @amount | 0..1 | float | Nilai desimal positif yang menentukan jumlah tetap yang akan dikenakan untuk orang dewasa tambahan. Biaya ini menggunakan mata uang yang sama dengan mata uang yang ditentukan untuk tarif per malam. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets | 0..1 | ChildAgeBrackets | Penampung untuk tagihan turunan tambahan. Kelompok usia ini hanya dapat mencakup rentang usia 0-17 tahun inklusif. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket | 1..99 | ChildAgeBracket | Biaya yang berlaku untuk anak-anak dalam rentang usia tertentu. Item ini
harus diurutkan dari max_age terendah ke max_age
tertinggi. Jumlah yang akan ditagih dapat ditentukan menggunakan
amount , percentage , atau
discount_amount . Salah satu atribut tersebut harus ditetapkan untuk setiap <ChildAgeBracket> .
|
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @max_age | 1 | integer | Usia maksimum yang mungkin dikenai biaya yang ditentukan dalam
<ChildAgeBracket> . Usia minimum adalah nol jika tidak ada <ChildAgeBracket> lain yang ditentukan sebelum usia ini. Jika tidak, angkanya lebih besar dari usia maksimum kelompok sebelumnya. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @exclude_from_capacity | 1 | boolean | Boolean yang menunjukkan apakah anak dalam kelompok usia ini harus diperhitungkan dalam total kapasitas kamar dan kapasitas anak-anak. Kapasitas ini dapat ditetapkan dengan Transaksi(Data Properti). Misalnya, bayi di bawah usia tertentu mungkin tidak perlu diperhitungkan dalam kapasitas anak. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @amount | 0..1 | float | Nilai desimal non-negatif yang menentukan jumlah tetap yang akan ditagihkan untuk turunan tambahan dalam kurung ini. Biaya ini menggunakan mata uang yang sama dengan mata uang yang ditentukan untuk tarif per malam. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @percentage | 0..1 | float | Nilai desimal dari 1-99 yang menentukan persentase harga dewasa yang harus dikenakan untuk anak tambahan dalam kurung ini. Biaya ini menggunakan mata uang yang sama dengan mata uang yang ditentukan untuk tarif per malam. Lihat diskusi di |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @discount_amount | 0..1 | float | Nilai desimal positif yang menentukan jumlah diskon tetap dari harga dewasa untuk anak tambahan dalam kurung ini. Biaya ini menggunakan mata uang yang sama dengan mata uang yang ditentukan untuk tarif per malam. Secara umum, biaya untuk anak dalam kurung ini dihitung dengan
mengurangi jumlah tetap dari "harga satuan". Harga unit dibahas secara lebih mendetail di bagian atribut |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @counts_as_base_occupant | 0..1 | string | Jika atribut Tujuannya di sini adalah untuk mendapatkan "harga satuan" yang dapat digunakan untuk menghitung biaya sebenarnya.
Nilai atribut ini harus salah satu dari
|
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RoomTypes | 0..1 | RoomTypes | Container untuk daftar jenis kamar yang dikenai biaya.
Biaya berlaku untuk setiap <RoomType> yang ditentukan. Jika <RoomTypes> tidak ditentukan, biaya akan berlaku untuk semua kamar dalam properti yang ditentukan. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RoomTypes / RoomType | 1..n | RoomType | Menentukan jenis kamar. Jenis kamar ditentukan di elemen <RoomData> di pesan Transaksi (Data Properti) dan dirujuk menggunakan nilai <RoomID> . (Nilai <RoomID> -nya juga dirujuk oleh atribut InvTypeCode dalam pesan OTA_HotelRateAmountNotifRQ.) |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RoomTypes / RoomType / @id | 1 | string | ID unik untuk inventaris (jenis kamar). Nilai ini dipetakan ke <RoomID> dalam pesan Transaksi (Data Properti).
Jumlah karakter maksimal yang diizinkan adalah 50. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RatePlans | 0..1 | RatePlans | Penampung untuk daftar paket tarif yang dikenai biaya.
Jika <RatePlans> tidak ditentukan, tagihan akan berlaku untuk semua paket tarif. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RatePlans / RatePlan | 1..n | RatePlan | Menentukan paket tarif. Paket tarif ditentukan oleh kombinasi paket, tarif, dan ketersediaan, seperti yang ditentukan dalam pesan Transaksi (Data Properti), OTA_HotelRateAmountNotifRQ, dan OTA_HotelAvailabilityNotifRQ, serta seperti yang diidentifikasi oleh PackageID. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / 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> di pesan <OTA_HotelRateAmountNotifRQ> dan <OTA_HotelAvailNotifRQ> .
Jumlah karakter maksimal yang diizinkan adalah 50. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates | 0..1 | StayDates | Penampung untuk satu atau beberapa rentang tanggal yang menentukan cara penerapan tagihan. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange | 1..99 | DateRange | Rentang tanggal yang menentukan tanggal saat promosi diterapkan. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange / @start | 0..1 | Date | Tanggal mulai (berdasarkan zona waktu properti), inklusif, dari rentang tanggal. Tanggal ini harus sebelum, atau sama dengan, tanggal
end . Jika start tidak ditentukan, berarti tanggal mulai rentang
tanggal mulai berlaku tidak terbatas. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange / @end | 0..1 | Date | Tanggal akhir (berdasarkan zona waktu properti), inklusif, dari rentang tanggal. Tanggal ini harus sama dengan, atau setelah, tanggal start . Jika end tidak ditentukan, berarti tanggal akhir rentang
tanggal mulai berlaku tidak terbatas. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange / @days_of_week | 0..1 | string | Hari yang diizinkan dalam rentang tanggal. Jika tidak ditentukan, semua hari diizinkan dalam rentang tanggal tersebut. Setiap karakter dalam string menentukan hari. Misalnya, "MTWHF" menentukan bahwa hari kerja diizinkan dalam rentang tanggal. Karakter yang valid adalah:
Kombinasi karakter apa pun valid. |
Contoh
Tagihan Dewasa
Biaya untuk tambahan orang dewasa hanya dapat dinyatakan dalam jumlah tetap. Contoh berikut menunjukkan pesan ExtraGuestCharges
yang menentukan tagihan orang dewasa:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges timestamp="2001-02-03T04:05:06+00:00" id="1">
<HotelExtraGuestCharges hotel_id="ABC" action="overlay">
<ExtraGuestCharge>
<StayDates />
<AgeBrackets>
<AdultCharge amount="50" />
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Berikut tarif terkaitnya:
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelRateAmountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05"
EchoToken="12345678"
TimeStamp="2020-05-19T20:50:37-05:00"
Version="3.0">
<RateAmountMessages HotelCode="ABC">
<RateAmountMessage>
<StatusApplicationControl Start="2020-05-18"
End="2020-05-23"
InvTypeCode="RoomID_1"
RatePlanCode="PackageID_1"/>
<Rates>
<Rate>
<BaseByGuestAmts>
<BaseByGuestAmt AmountAfterTax="100.00"
CurrencyCode="USD"
NumberOfGuests="1"/>
<BaseByGuestAmt AmountAfterTax="110.00"
CurrencyCode="USD"
NumberOfGuests="2"/>
<BaseByGuestAmt AmountAfterTax="120.00"
CurrencyCode="USD"
NumberOfGuests="3"/>
</BaseByGuestAmts>
</Rate>
</Rates>
</RateAmountMessage>
</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>
Jika pengguna menelusuri empat orang dewasa di Google, tarif totalnya adalah 170 = 120 + 50.
120 berasal dari tarif <BaseByGuestAmt>
dengan NumberOfGuests="3"
dan 50 berasal dari AdultCharge amount="50"
.
Tagihan Anak
Biaya untuk anak-anak dinyatakan dalam kelompok usia hingga 17 tahun dan dapat dinyatakan dalam jumlah tetap, persentase, atau diskon.
Contoh berikut menunjukkan pesan ExtraGuestCharges
yang menentukan biaya turunan:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges timestamp="2001-02-03T04:05:06+00:00" id="1">
<HotelExtraGuestCharges hotel_id="ABC" action="overlay">
<ExtraGuestCharge>
<AgeBrackets>
<ChildAgeBrackets>
<ChildAgeBracket max_age="3" percentage="10"
counts_as_base_occupant="never" />
<ChildAgeBracket max_age="10" percentage="30"
counts_as_base_occupant="preferred"/>
<ChildAgeBracket max_age="17" discount_amount="10"
counts_as_base_occupant="always" />
</ChildAgeBrackets>
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Berikut tarif terkaitnya:
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelRateAmountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05"
EchoToken="12345678"
TimeStamp="2020-05-19T20:50:37-05:00"
Version="3.0">
<RateAmountMessages HotelCode="ABC">
<RateAmountMessage>
<StatusApplicationControl Start="2020-05-18"
End="2020-05-23"
InvTypeCode="RoomID_1"
RatePlanCode="PackageID_1"/>
<Rates>
<Rate>
<BaseByGuestAmts>
<BaseByGuestAmt AmountAfterTax="100.00"
CurrencyCode="USD"
NumberOfGuests="1"/>
<BaseByGuestAmt AmountAfterTax="110.00"
CurrencyCode="USD"
NumberOfGuests="2"/>
</BaseByGuestAmts>
</Rate>
</Rates>
</RateAmountMessage>
</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>
```
1. Suppose you want the total price for 2 adults and 1 child of 2 years
of age.
Children aged 0-3 are never included in the rate's occupancy,
so here you should take the double occupancy rate and divide by 2 to
get the unit price. Then, multiply by the percentage rate and sum
with the rate to get the total price.
`unit price ` = 110 / 2 = 55
`total price` = 110 + 55 * 0.1 = 115.5
1. Suppose you want the total price for 1 adult and 2 children, both of 5
years of age.
Children aged 4-10 are preferably included in the rate's
occupancy. you should start by looking for a 3 adult rate since both
children are preferably included in the rate's occupancy. Since
that doesn't exist you should fall back to the 2 adult rate and then,
take this rate and divide by two to get the unit price. Finally,
multiply by the percentage rate and sum with the scaled rate to
get the total price.
`unit price` = 110 / 2 = 55
`total price` = 55 + 55 * 0.3 + 55 * 0.3 = 88
1. Suppose you want the total price for 1 adult and 1 child of 17
years of age.
Children aged 11-17 are always included in the rate's occupancy, so,
in this case, take the double occupancy rate and divide by 2 to get
the unit price. Then, deduct it by the discount amount and sum with
the scaled rate to get the total price.
`unit price` = 110 / 2 = 55
`total price` = 55 + (55 - 10) = 100
Pembatasan Pengisian Daya
Semua jenis batasan bersifat opsional dan kombinasinya dapat digunakan.
Contoh berikut menunjukkan pesan ExtraGuestCharges
yang menentukan
batasan:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges timestamp="2001-02-03T04:05:06+00:00" id="1">
<HotelExtraGuestCharges hotel_id="ABC" action="overlay">
<ExtraGuestCharge>
<RoomTypes>
<RoomType id="queen" />
<RoomType id="king" />
</RoomTypes>
<RatePlans>
<RatePlan id="free-wifi" />
<RatePlan id="hot-breakfast" />
</RatePlans>
<StayDates>
<DateRange start="2020-09-01" end="2020-09-14"/>
</StayDates>
<AgeBrackets>
<AdultCharge amount="50" />
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Pesan di atas menetapkan bahwa orang dewasa harus dikenai biaya untuk setiap produk yang memiliki jenis kamar "queen" atau "king" dengan paket tarif "free-wifi" atau "hot-breakfast" untuk tanggal 1 September 2020 hingga 14 September 2020.
Tagihan Tumpang-Tindih
Bagian ini menunjukkan contoh pesan tidak valid yang menentukan biaya berbeda untuk kombinasi tanggal dan produk yang sama.
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges timestamp="2001-02-03T04:05:06+00:00" id="1">
<HotelExtraGuestCharges hotel_id="ABC" action="overlay">
<ExtraGuestCharge>
<RoomTypes>
<RoomType id="queen" />
</RoomTypes>
<RatePlans>
<RatePlan id="free-wifi" />
</RatePlans>
<StayDates>
<DateRange start="2020-09-01" end="2020-09-14"/>
</StayDates>
<AgeBrackets>
<AdultCharge amount="50" />
</AgeBrackets>
</ExtraGuestCharge>
<ExtraGuestCharge>
<RoomTypes>
<RoomType id="queen" />
<RoomType id="king" />
</RoomTypes>
<RatePlans>
<RatePlan id="free-wifi" />
<RatePlan id="hot-breakfast" />
</RatePlans>
<StayDates>
<DateRange start="2020-09-01" end="2020-09-05"/>
</StayDates>
<AgeBrackets>
<AdultCharge amount="20" />
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Pesan di atas tidak valid karena <ExtraGuestCharge>
pertama
menentukan bahwa "ratu" dan "wifi gratis" untuk 1 hingga 14 September akan mengenakan biaya
tambahan orang dewasa sebesar 50. <ExtraGuestCharge>
kedua menentukan bahwa "ratu" atau "king" dengan "wifi gratis" atau "sarapan panas" untuk 1 hingga 5 September harus mengenakan biaya tambahan untuk orang dewasa berusia 20 tahun.
Terdapat biaya tumpang tindih untuk "ratu" dan "wifi gratis" untuk 1 sampai 5 September, serta konflik antara apakah akan mengenakan biaya 20 atau 50 untuk orang dewasa tambahan.
Respons
Sintaksis
Pesan ExtraGuestChargesResponse
menggunakan sintaksis berikut:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestChargesResponse timestamp="timestamp"
id="message_ID"
partner="partner_key">
<!-- Either Success or Issues will be populated. -->
<Success/>
<Issues>
<Issue code="issue_code" status="issue_type">issue_description</Issue>
</Issues>
</ExtraGuestChargesResponse>
Elemen & Atribut
Pesan ExtraGuestChargesResponse
memiliki elemen dan atribut berikut:
Element / @Attribute | Kejadian | Jenis | Deskripsi |
---|---|---|---|
ExtraGuestChargesResponse | 1 | Complex element | Elemen root yang menunjukkan keberhasilan atau masalah untuk pesan permintaan ExtraGuestCharges yang diterima. |
ExtraGuestChargesResponse / @timestamp | 1 | DateTime | Tanggal dan waktu pembuatan pesan ini. |
ExtraGuestChargesResponse / @id | 1 | string | ID unik dari pesan ExtraGuestCharges terkait. |
ExtraGuestChargesResponse / @partner | 1 | string | Akun partner untuk pesan ini. |
ExtraGuestChargesResponse / Success | 0..1 | Success | Menunjukkan bahwa pesan ExtraGuestCharges berhasil diproses tanpa peringatan, error, atau kegagalan.
|
ExtraGuestChargesResponse / Issues | 0..1 | Issues | Container untuk satu atau beberapa masalah yang ditemukan saat memproses pesan ExtraGuestCharges .
|
ExtraGuestChargesResponse / Issues / Issue | 1..n | Issue | Deskripsi peringatan, error, atau kegagalan yang ditemukan saat memproses pesan ExtraGuestCharges . Detail tentang masalah ini dapat ditemukan
di Pesan Error Status Feed. |
ExtraGuestChargesResponse / Issues / Issue / @code | 1 | integer | ID untuk masalah. |
ExtraGuestChargesResponse / Issues / Issue / @status | 1 | enum | Jenis masalah yang dialami. Nilai yang valid adalah |
Contoh
Berhasil
Berikut adalah respons terhadap pesan ExtraGuestCharges
yang berhasil diproses.
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestChargesResponse timestamp="2020-05-18T16:20:00-04:00"
id="12345678"
partner="partner_key">
<Success/>
</ExtraGuestChargesResponse>
Masalah
Berikut adalah respons terhadap pesan ExtraGuestCharges
yang tidak diproses karena error.
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestChargesResponse timestamp="2020-05-18T16:20:00-04:00"
id="12345678"
partner="partner_key">
<Issues>
<Issue code="1001" status="error">Example</Issue>
</Issues>
</ExtraGuestChargesResponse>