Tarif yang dikirim melalui <OTA_HotelRateAmountNotifRQ> dapat diubah untuk memperhitungkan orang dewasa dan anak-anak selain jumlah tamu asli tarif. Pesan ExtraGuestCharges memungkinkan spesifikasi cara penghitungan tarif untuk tamu tambahan ini dan untuk kamar, paket tarif, dan tanggal menginap mana biaya mereka harus diterapkan.
Persyaratan Kapasitas
Harga yang dihitung dari pesan ExtraGuestCharges hanya valid jika semua persyaratan kapasitas terpenuhi. Lihat Transaksi (Data Properti)
untuk mengetahui 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:
| Elemen / @Atribut | 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 di 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 biaya satu properti. |
| ExtraGuestCharges / HotelExtraGuestCharges / @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. |
| ExtraGuestCharges / HotelExtraGuestCharges / @action | 0..1 | enum | Menentukan cara update diterapkan. Hanya overlay yang
didukung, dan defaultnya adalah overlay. Setiap biaya sebelumnya untuk
properti ini akan dihapus sebelum pembaruan diterapkan. |
| ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge | 0..99 | ExtraGuestCharge | Satu set biaya untuk properti. Hal ini dapat berisi pembatasan tentang cara biaya dapat diterapkan dan cara biaya dihitung berdasarkan usia atau kategori tamu. Setiap |
| ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets | 1 | AgeBrackets | Container kelompok usia untuk menghitung biaya berdasarkan usia atau kategori tamu. |
| ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / AdultCharge | 0..1 | AdultCharge | Container untuk biaya dewasa tambahan. |
| ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / AdultCharge / @amount | 0..1 | float | Nilai desimal positif yang menentukan jumlah tetap yang akan ditagih 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 | Container untuk biaya tambahan anak. Rentang usia ini hanya dapat mencakup rentang usia 0-17 tahun. |
| ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket | 1..99 | ChildAgeBracket | Biaya yang berlaku untuk anak-anak dalam rentang usia tertentu. Nilai ini
harus diurutkan dari max_age terendah hingga max_age
tertinggi. Jumlah yang akan ditagih dapat ditentukan menggunakan
amount, percentage, atau
discount_amount. Tepat satu atribut tersebut harus
ditentukan untuk setiap <ChildAgeBracket>.
|
| ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @max_age | 1 | integer | Usia maksimum yang dikenai biaya yang ditentukan dalam
<ChildAgeBracket>. Usia minimum adalah nol
jika tidak ada <ChildAgeBracket> lain yang ditentukan
sebelum ini. Jika tidak, usia tersebut lebih besar dari usia maksimum
rentang sebelumnya. |
| ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @exclude_from_capacity | 1 | boolean | Boolean yang menunjukkan apakah anak dalam rentang usia ini harus dihitung dalam kapasitas total dan kapasitas anak di kamar. Kapasitas ini dapat ditetapkan dengan Transaction(Property Data). Misalnya, bayi di bawah usia tertentu mungkin tidak perlu dihitung dalam kapasitas anak. |
| ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @amount | 0..1 | float | Nilai desimal non-negatif yang menentukan jumlah tetap yang akan ditagih untuk anak tambahan dalam rentang ini. Biaya ini menggunakan mata uang yang sama dengan 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 dibebankan untuk anak tambahan dalam rentang ini. Biaya ini menggunakan mata uang yang sama dengan yang ditentukan untuk tarif per malam. Lihat diskusi di bagian |
| 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 rentang ini. Biaya ini menggunakan mata uang yang sama dengan yang ditentukan untuk tarif per malam. Secara umum, biaya untuk anak dalam rentang ini dihitung dengan
mengurangi jumlah tetap dari "harga per unit". Harga satuan dibahas lebih mendetail di bagian atribut |
| ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @counts_as_base_occupant | 0..1 | string | Jika atribut Tujuannya di sini adalah mendapatkan "harga per unit" 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 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> dalam pesan Transaksi (Data Properti) dan direferensikan menggunakan nilai <RoomID>-nya. (Nilai <RoomID>-nya juga direferensikan oleh atribut InvTypeCode di pesan OTA_HotelRateAmountNotifRQ.) |
| ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RoomTypes / RoomType / @id | 1 | string | ID unik untuk inventaris (jenis kamar). Nilai ini dipetakan ke <RoomID> di pesan Transaksi (Data Properti).
Jumlah karakter maksimum yang diizinkan adalah 50. |
| ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RatePlans | 0..1 | RatePlans | Container untuk daftar paket tarif yang dikenai biaya.
Jika <RatePlans> tidak ditentukan, maka biaya 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 didefinisikan di pesan Transaksi (Data Properti), OTA_HotelRateAmountNotifRQ, dan OTA_HotelAvailNotifRQ, 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> di pesan Transaksi (Data Properti), dan di atribut RatePlanCode di <StatusApplicationControl> di pesan <OTA_HotelRateAmountNotifRQ> serta <OTA_HotelAvailNotifRQ>.
Jumlah karakter maksimum yang diizinkan adalah 50. |
| ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates | 0..1 | StayDates | Container untuk satu atau beberapa rentang tanggal yang menentukan cara biaya diterapkan. |
| ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange | 1..99 | DateRange | Rentang tanggal yang menentukan tanggal 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, maka tanggal mulai dari rentang tanggal menjadi 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, maka tanggal akhir dari rentang tanggal menjadi tidak terbatas. |
| ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / 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:
Kombinasi karakter apa pun valid. |
Contoh
Biaya Dewasa
Biaya untuk orang dewasa tambahan hanya dapat dinyatakan sebagai jumlah tetap. Contoh
berikut menunjukkan pesan ExtraGuestCharges yang menentukan biaya 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 adalah tarif yang sesuai:
<?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>
Saat 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".
Biaya Turunan
Biaya untuk anak-anak dinyatakan dalam rentang usia hingga 17 tahun dan dapat dinyatakan dalam jumlah tetap, persentase, atau diskon.
Contoh berikut menunjukkan pesan ExtraGuestCharges yang menentukan biaya anak:
<?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 adalah tarif yang sesuai:
<?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
Batasan Pengisian Daya
Semua jenis batasan bersifat opsional dan kombinasi apa pun 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 menentukan bahwa orang dewasa harus ditagih 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.
Biaya yang 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 "queen" dan "free-wifi" untuk 1 hingga 14 September harus mengenakan biaya tambahan 50 untuk orang dewasa. <ExtraGuestCharge> kedua
menentukan bahwa "queen" atau "king" dengan "free-wifi" atau
"hot-breakfast" untuk 1 hingga 5 September harus mengenakan biaya tambahan sebesar 20 untuk orang dewasa.
Ada biaya yang tumpang-tindih untuk "queen" dan "free-wifi" dari 1 hingga 5 September dan 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:
| Elemen / @Atribut | 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 dari peringatan, error, atau kegagalan yang dialami 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>