Tarif yang dikirim melalui <OTA_HotelRateAmountNotifRQ>
dapat diubah untuk memperhitungkan orang dewasa dan anak-anak selain jumlah tamu asli pada tarif tersebut. Pesan ExtraGuestCharges
memungkinkan spesifikasi penghitungan tarif untuk tamu tambahan tersebut dan kamar, paket tarif, serta tanggal menginap mana yang harus dikenakan 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:
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 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 | Penampung untuk tagihan 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 pembaruan diterapkan. Hanya overlay yang didukung, dan default-nya adalah overlay. Semua tagihan sebelumnya untuk properti ini akan dihapus sebelum pembaruan diterapkan. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge | 0..99 | ExtraGuestCharge | Satu set tagihan untuk properti. Info ini mungkin berisi batasan tentang cara pemberlakuan biaya dan penghitungan tagihan 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 | Penampung dengan 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 satu 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 biaya turunan tambahan. Kelompok usia ini hanya mungkin 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 ke max_age tertinggi. Jumlah yang akan ditagih dapat ditentukan menggunakan
amount , percentage , atau
discount_amount . Tepat satu dari atribut tersebut harus
ditentukan untuk setiap <ChildAgeBracket> .
|
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @max_age | 1 | integer | Usia maksimum yang mungkin dikenakan biaya yang ditentukan dalam
<ChildAgeBracket> . Usia minimum adalah nol
jika tidak ada <ChildAgeBracket> lain yang ditentukan
sebelumnya. Jika tidak, rentang usia ini satu lebih besar daripada usia maksimum kelompok
sebelumnya. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @exclude_from_capacity | 1 | boolean | Boolean yang menunjukkan apakah turunan dalam kelompok usia ini harus diperhitungkan dalam kapasitas total dan kapasitas turunan ruangan. Kapasitas ini dapat ditetapkan dengan Transaksi(Data Properti). Misalnya, bayi di bawah usia tertentu mungkin tidak perlu mengurangi kapasitas anak. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @amount | 0..1 | float | Nilai desimal non-negatif yang menentukan jumlah tetap yang akan dikenakan 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 kelompok ini. Biaya ini menggunakan mata uang yang sama dengan mata uang 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 kelompok ini. Biaya ini menggunakan mata uang yang sama dengan mata uang yang ditentukan untuk tarif per malam. Secara umum, biaya untuk turunan dalam kelompok ini dihitung dengan mengurangi jumlah tetap dari "harga unit". 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 unit" yang menjadi dasar penghitungan 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 akan diterapkan ke 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 dalam elemen <RoomData> di pesan Transaksi (Data Properti) dan direferensikan menggunakan nilai <RoomID> -nya. (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> di pesan Transaksi (Data Properti).
Jumlah karakter maksimal yang diizinkan adalah 50. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RatePlans | 0..1 | RatePlans | Container untuk daftar paket tarif yang dikenai biaya.
Jika <RatePlans> tidak ditentukan, 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 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> serta <OTA_HotelAvailNotifRQ> .
Jumlah karakter maksimal 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 akan diterapkan. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange / @start | 0..1 | Date | Tanggal mulai (berdasarkan zona waktu properti), inklusif, untuk
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), termasuk, 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, 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 tambahan orang dewasa hanya dapat dinyatakan dalam 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 tarif terkait:
<?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, rasio 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 terkait:
<?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 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 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.
Tagihan Tumpang-Tindih
Bagian ini menampilkan 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 untuk orang dewasa berusia 50 tahun ke atas. <ExtraGuestCharge>
kedua
menentukan bahwa "queen" atau "king" yang menggunakan "free-wifi" atau
"hot-breakfast" untuk 1 hingga 5 September harus mengenakan biaya untuk 20 orang dewasa lagi.
Ada tagihan yang tumpang tindih untuk "ratu" dan "Wi-Fi gratis" untuk 1 hingga 5 September dan perbedaan antara apakah akan mengenakan biaya 20 atau 50 orang 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 | Penampung 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 ditemukan. 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>