Transaksi (Data Properti)

Permintaan

Sintaksis

Pesan Transaction (Property Data) menggunakan sintaksis berikut:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="timestamp"
             id="message_ID"
             partner="partner_account_name">
  <PropertyDataSet action="[overlay|delta]">
    <!-- (Required) ID that matches the Hotel List Feed -->
    <Property>HotelID</Property>
    <RoomData>
      <!-- (Required) One room ID per RoomData element -->
      <RoomID>RoomID</RoomID>
      <Name>
        <Text text="room_name" language="language_code"/>
      </Name>
      <Description>
        <Text text="room_description" language="language_code"/>
      </Description>
      <!-- (Optional) Restricts the rate plans allowed for this room type to
        those listed here. If specified, don't specify AllowableRoomIDs. -->
      <AllowablePackageIDs>
        <AllowablePackageID>PackageID</AllowablePackageID>
      </AllowablePackageIDs>
      <Capacity>max_number_of_occupants</Capacity>
      <PhotoURL>
        <Caption>
          <Text text="photo_description" language="language_code"/>
          ...
        </Caption>
        <URL>photo_location</URL>
      </PhotoURL>
    </RoomData>
    <PackageData>
      <!-- (Required) One package ID per PackageData element -->
      <PackageID>PackageID</PackageID>
      <Name>
        <Text text="package_name" language="language_code"/>
      </Name>
      <Description>
        <Text text="package_description" language="language_code"/>
      </Description>
      <!-- (Optional) Restricts the room types allowed for this rate plan to
        those listed here. If specified, don't specify AllowablePackageIDs. -->
      <AllowableRoomIDs>
        <AllowableRoomID>RoomID</AllowableRoomID>
      </AllowableRoomIDs>
      <Refundable available="[false|true]" refundable_until_days="
        number_of_days"
        refundable_until_time="time"/>
      <!-- For these next 3 elements, boolean_value can be 0/1 or true/false -->
      <BreakfastIncluded>boolean_value</BreakfastIncluded>
      <InternetIncluded>boolean_value</InternetIncluded>
      <ParkingIncluded>boolean_value</ParkingIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Elemen & Atribut

Pesan Transaksi (Data Properti) memiliki elemen dan atribut berikut:
Elemen/@Atribut Kemunculan Jenis Deskripsi
Transaction 1 Complex element Dalam implementasi ARI, ini adalah elemen root untuk pesan yang menentukan jenis dan paket kamar untuk satu properti.
Transaction/@timestamp 1 DateTime Tanggal dan waktu pembuatan pesan ini.
Transaction/@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).
Transaction/@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.

Catatan: 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.

Transaction/PropertyDataSet 1..n PropertyDataSet Container untuk menentukan jenis dan paket kamar untuk satu properti.
Transaction/PropertyDataSet/@action 0..1 Enum

Jenis pembaruan yang akan diterapkan ke definisi tarif kamar.

Nilai yang valid adalah:

  • overlay : Mengganti semua <RoomData> dan <PackageData> yang ditentukan sebelumnya untuk properti. Hanya <RoomData> dan <PackageData> di pesan saat ini yang valid.
  • delta : Menambahkan <RoomData> dan <PackageData> yang belum ditentukan sebelumnya, atau mengubah yang sudah ada.

Atribut ini bersifat opsional dan ditetapkan secara default ke delta jika tidak ditentukan.

Transaction/PropertyDataSet/Property 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.
Transaction/PropertyDataSet/RoomData 0..n RoomData

Mendeskripsikan kamar.

Catatan: Setidaknya salah satu dari <RoomData> atau <PackageData> harus ada.

Transaction/PropertyDataSet/RoomData/RoomID 1 RoomID ID unik untuk jenis kamar. Nilai ini direferensikan menggunakan atribut InvTypeCode di elemen <StatusApplicationControl> di pesan <OTA_HotelAvailNotifRQ> dan <OTA_HotelRateAmountNotifRQ>.
Transaction/PropertyDataSet/RoomData/Name 1 Name Container untuk nama kategori kamar dalam satu atau beberapa bahasa.
Transaction/PropertyDataSet/RoomData/Name/Text 1..n Text Menentukan nama kategori kamar dalam satu bahasa.
Transaction/PropertyDataSet/RoomData/Name/Text/@text 1..n String Nama kategori kamar dalam bahasa yang ditentukan oleh atribut language.
Transaction/PropertyDataSet/RoomData/Description 1 Name Container untuk deskripsi kategori kamar dalam satu atau beberapa bahasa.
Transaction/PropertyDataSet/RoomData/Description/Text 1..n Text Menentukan deskripsi kategori kamar dalam satu bahasa.
Transaction/PropertyDataSet/RoomData/Description/Text/@text 1..n String Deskripsi kategori kamar dalam bahasa yang ditentukan oleh atribut language.
Transaction/PropertyDataSet/RoomData/Description/Text/@language 1..n String Kode bahasa dua huruf.
Transaction/PropertyDataSet/RoomData/AllowablePackageIDs 0..1 AllowablePackageIDs Container untuk elemen <AllowablePackageID>.

Jika <AllowablePackageIDs> ditentukan, jenis kamar yang diidentifikasi oleh <RoomID> di elemen <RoomData> induk hanya dapat digabungkan dengan paket tarif yang ditentukan oleh elemen <AllowablePackageID>.

Jika <AllowablePackageIDs> tidak ditentukan, jenis kamar yang diidentifikasi oleh <RoomID> di elemen <RoomData> induk dapat digabungkan dengan paket tarif apa pun.

Transaction/PropertyDataSet/RoomData/AllowablePackageIDs/AllowablePackageID 1..n AllowablePackageID Menentukan PackageID dari paket tarif yang dapat digabungkan dengan jenis kamar ini. Paket tarif ditentukan oleh kombinasi paket, tarif, dan ketersediaan. PackageID sesuai dengan RatePlanCode di pesan OTA_HotelRateAmountNotifRQ dan OTA_HotelAvailNotifRQ.
Transaction/PropertyDataSet/RoomData/Capacity 0..1 Integer Jumlah maksimum tamu yang dapat diakomodasi secara fisik. Nilai ini harus lebih besar dari atau sama dengan nilai NumberOfGuests apa pun yang Anda kirim dengan tarif.

Nilai <Capacity> harus berupa bilangan bulat positif antara 1 dan 99, inklusif.

Transaction/PropertyDataSet/RoomData/PhotoURL 0..n PhotoURL URL dan teks opsional untuk foto kamar atau Paket Kamar yang dimaksud. Anda dapat menentukan lebih dari satu <PhotoURL> untuk suatu kamar atau Paket Kamar.

Elemen ini menggunakan elemen turunan berikut:

  • <URL>: Menentukan lokasi foto. Lokasi harus bersifat publik (bukan di balik firewall) dan harus menyertakan protokol (http://).
  • <Caption>: Menentukan teks untuk foto. Elemen ini menggunakan satu elemen turunan, <Text>, yang memiliki dua atribut yang diperlukan, text dan language. Atribut text adalah teks, dan atribut language menentukan kode bahasa dua huruf seperti "en".

<PhotoURL>
  <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
  <Caption>
    <Text text="A bright and breezy way to enjoy your mornin'
      cuppa tea." language="en"/>
    <Text text="Une façon lumineuse et aérée pour profiter
      de votre journée tasse de thé." language="fr"/>
  </Caption>
</PhotoURL>
Transaction/PropertyDataSet/PackageData/PackageID 1 String PackageID di pesan ini sesuai dengan RatePlanCode di pesan OTA_HotelRateAmountNotifRQ dan OTA_HotelAvailNotifRQ.
Transaction/PropertyDataSet/PackageData/Name 1 Name Container untuk nama kategori paket dalam satu atau beberapa bahasa.
Transaction/PropertyDataSet/PackageData/Name/Text 1..n Text Menentukan nama kategori paket dalam satu bahasa.
Transaction/PropertyDataSet/PackageData/Name/Text/@text 1..n String Nama kategori paket dalam bahasa yang ditentukan oleh atribut language.
Transaction/PropertyDataSet/PackageData/Description 1 Name Container untuk deskripsi kategori paket dalam satu atau beberapa bahasa.
Transaction/PropertyDataSet/PackageData/Description/Text 1..n Text Menentukan deskripsi kategori paket dalam satu bahasa.
Transaction/PropertyDataSet/PackageData/Description/Text/@text 1..n String Deskripsi kategori paket dalam bahasa yang ditentukan oleh atribut language.
Transaction/PropertyDataSet/PackageData/Description/Text/@language 1..n String Kode bahasa dua huruf.
Transaction/PropertyDataSet/PackageData/AllowableRoomIDs 0..1 AllowableRoomIDs Container untuk elemen <AllowableRoomID>.

Jika <AllowableRoomIDs> ditentukan, paket tarif yang diidentifikasi oleh <PackageID> di elemen <PackageData> induk hanya dapat digabungkan dengan jenis kamar yang ditentukan oleh elemen <AllowableRoomID>.

Jika <AllowableRoomIDs> tidak ditentukan, paket tarif yang diidentifikasi oleh <PackageID> di elemen <PackageData> induk dapat digabungkan dengan semua jenis kamar.

Transaction/PropertyDataSet/PackageData/AllowableRoomIDs/AllowableRoomID 1..n AllowableRoomID Menentukan RoomID dari jenis kamar yang dapat digabungkan dengan paket tarif ini. Jenis kamar ditentukan di elemen <RoomData>.
Transaction/PropertyDataSet/PackageData 0..n PackageData Container untuk elemen yang menjelaskan persyaratan dan fitur tarif yang bukan bagian dari deskripsi kamar fisik.
Transaction/PropertyDataSet/PackageData/Refundable 0..1 Refundable Memungkinkan pencantuman tarif sebagai dapat dikembalikan sepenuhnya atau memberikan pembatalan tanpa biaya. Jika tidak disediakan, tidak ada informasi tentang pengembalian dana yang ditampilkan.

Catatan: Sebaiknya tetapkan semua atribut. Pesan peringatan status feed dibuat saat satu atau beberapa atribut tidak ditetapkan.

Jika Anda tidak menetapkan atribut apa pun, tarif tersebut tidak akan ditampilkan sebagai dapat dikembalikan.

Saat menetapkan atribut, perhatikan hal berikut:

  • Jika available atau refundable_until_days tidak ditetapkan, tarif tidak akan ditampilkan sebagai dapat dikembalikan.
  • Jika available adalah 0 atau false, atribut lainnya akan diabaikan. Tarif tidak ditampilkan sebagai dapat dikembalikan meskipun salah satu atau kedua atribut lainnya telah ditetapkan.
Transaction/PropertyDataSet/PackageData/Refundable/@available 1 Boolean (Wajib) Tetapkan ke 1 atau true untuk menunjukkan apakah tarif memungkinkan pengembalian dana penuh; jika tidak, tetapkan ke 0 atau false.
Transaction/PropertyDataSet/PackageData/Refundable/@refundable_until_days 0..1 Integer (Wajib jika available adalah true) Menentukan jumlah hari sebelum check in saat pengembalian dana penuh dapat diminta. Nilai refundable_until_days harus berupa bilangan bulat antara 0 dan 330, inklusif.
Transaction/PropertyDataSet/PackageData/Refundable/@refundable_until_time 0..1 Time (Sangat direkomendasikan jika available adalah true) Menentukan waktu terakhir pada hari tertentu, dalam waktu lokal hotel, saat permintaan pengembalian dana penuh akan dipenuhi. Penentuan atribut ini dapat dikombinasikan dengan refundable_until_days, misalnya, "pengembalian dana tersedia hingga pukul 16.00 dua hari sebelum check-in". Jika refundable_until_time tidak ditentukan, nilai akan ditetapkan secara default ke tengah malam.
Transaction/PropertyDataSet/PackageData/BreakfastIncluded 0..1 Boolean Menentukan apakah jenis kamar ini menyertakan sarapan.

Nilai yang valid adalah 0 (atau false) dan 1 (atau true).

Transaction/PropertyDataSet/PackageData/InternetIncluded 0..1 Boolean Jika kamar menyertakan akses internet tanpa biaya, sedangkan kamar lain tidak menyertakan fasilitas ini. Jangan tetapkan elemen ini di hotel yang menyediakan internet gratis untuk semua kamar. Elemen ini tidak berlaku untuk internet kabel dalam kamar atau internet nirkabel yang tidak tersedia di kamar tamu. Nilai yang valid adalah 0 (atau false) dan 1 (atau true).
Transaction/PropertyDataSet/PackageData/ParkingIncluded 0..1 Boolean Apakah kamar mencakup parkir gratis, di mana tempat parkir akan menjadi layanan berbayar di hotel ini. Jangan tentukan nilai untuk elemen ini di hotel yang menawarkan parkir gratis. Nilai yang valid adalah 0 (atau false) dan 1 (atau true). Nilai defaultnya adalah false.

Contoh

Contoh 1

Berikut ini adalah contoh dasar tentang cara menentukan data paket dan kamar properti di pesan Transaksi (Data Properti). Atribut overlay digunakan untuk memastikan bahwa, jika ada data yang tidak diperkirakan, semua data yang ada akan dihapus dan diganti dengan data di pesan ini:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-05-18T16:20:00-04:00"
             id="12345678"
             partner="partner_account_name">
  <PropertyDataSet action="overlay">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <Name>
        <Text text="King" language="en"/>
      </Name>
      <Description>
        <Text text="Room with a king bed" language="en"/>
      </Description>
      <Capacity>2</Capacity>
      <PhotoURL>
        <URL>http://www.foo.com/static/bar/image.jpg</URL>
        <Caption>
          <Text text="Room with a king bed" language="en"/>
        </Caption>
      </PhotoURL>
    </RoomData>
    <RoomData>
      <RoomID>RoomID_2</RoomID>
      <Name>
        <Text text="Double" language="en"/>
      </Name>
      ...
    </RoomData>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Name>
        <Text text="Standard" language="en"/>
      </Name>
      <Description>
        <Text text="Standard rate" language="en"/>
      </Description>
      <Refundable available="true" refundable_until_days="7" refundable_until_time="18:00:00"/>
      <BreakfastIncluded>0</BreakfastIncluded>
    </PackageData>
    <PackageData>
      <PackageID>PackageID_2</PackageID>
      <Name>
        <Text text="Free Breakfast" language="en"/>
      </Name>
      <Description>
        <Text text="Free breakfast rate" language="en"/>
      </Description>
      <Refundable available="true" refundable_until_days="7" refundable_until_time="18:00:00"/>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Contoh 2

Berikut adalah contoh cara menambahkan paket dan jenis kamar ke data <Transaction> yang ada:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-07-18T16:20:00-04:00"
             id="12345678"
             partner="partner_account_name">
  <PropertyDataSet action="delta">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_3</RoomID>
      <Name>
        <Text text="Queen" language="en"/>
      </Name>
      ...
    </RoomData>
    <PackageData>
      <PackageID>PackageID_3</PackageID>
      <Name>
        <Text text="Non-Refundable" language="en"/>
      </Name>
      ...
      <Refundable available="false"/>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Contoh 3

Berikut adalah contoh cara menghapus jenis kamar dan paket yang ada. Dalam skenario ini, jika pesan dalam Contoh 1 dan Contoh 2 telah dikirim ke Google sebelumnya, jenis kamar King dan Double tidak akan tersedia lagi setelah Google menerima pesan yang ditampilkan di bawah. Perhatikan bahwa menghapus data paket akan memengaruhi keseluruhan paket tarif sebagaimana yang ditentukan di seluruh pesan Transaksi (Data Properti), OTA_HotelRateAmountNotifRQ, dan OTA_HotelAvailabilityNotifRQ (dengan merujuk nilai PackageID yang sama), serta pembaruan yang sesuai menggunakan jenis pesan lain mungkin diperlukan untuk menunjukkan bahwa PackageID_2 dan PackageID_3 tidak lagi ditentukan di sini.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-08-18T16:20:00-04:00"
             id="12345678"
             partner="partner_account_name">
  <PropertyDataSet action="overlay">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <Name>
        <Text text="Queen" language="en"/>
      </Name>
      ...
      <Capacity>2</Capacity>
      <PhotoURL>
        <URL>http://www.foo.com/static/bar/image.jpg</URL>
        <Caption>
          <Text text="Room with a queen bed" language="en"/>
        </Caption>
      </PhotoURL>
    </RoomData>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Name>
        <Text text="Refundable" language="en"/>
      </Name>
      ...
      <Refundable available="true" refundable_until_days="7" refundable_until_time="18:00:00"/>
      <BreakfastIncluded>0</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Contoh 4

Berikut adalah contoh cara menggunakan elemen <AllowablePackageIDs> untuk membatasi paket tarif yang diizinkan untuk jenis kamar. Dalam contoh ini, kamar berjenis Queen (RoomID_2) hanya dapat dikombinasikan dengan paket dan paket tarif yang diidentifikasi sebagai PackageID_1.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-12-18T16:20:00-04:00"
             id="12345678"
             partner="partner_account_name">
  <PropertyDataSet action="overlay">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <Name>
        <Text text="King" language="en"/>
      </Name>
      ...
    </RoomData>
    <RoomData>
      <RoomID>RoomID_2</RoomID>
      <Name>
        <Text text="Queen" language="en"/>
      </Name>
      <AllowablePackageIDs>
        <AllowablePackageID>PackageID_1</AllowablePackageID>
      </AllowablePackageIDs>
      ...
    </RoomData>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Name>
        <Text text="Standard" language="en"/>
      </Name>
      ...
      <Refundable available="true" refundable_until_days="7" refundable_until_time="18:00:00"/>
      <BreakfastIncluded>0</BreakfastIncluded>
    </PackageData>
    <PackageData>
      <PackageID>PackageID_2</PackageID>
      <Name>
        <Text text="Free Breakfast" language="en"/>
      </Name>
      ...
      <Refundable available="true" refundable_until_days="7" refundable_until_time="18:00:00"/>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Respons

Sintaksis

Pesan TransactionResponse (Property Data) menggunakan sintaksis berikut:
<?xml version="1.0" encoding="UTF-8"?>
<TransactionResponse timestamp="timestamp"
                     id="message_ID"
                     partner="partner_account_name">
  <!-- Either Success or Issues will be populated. -->
  <Success/>
  <Issues>
    <Issue code="issue_code" status="issue_type">issue_description</Issue>
  </Issues>
</TransactionResponse>

Elemen & Atribut

Pesan TransactionResponse (Property Data) memiliki elemen dan atribut berikut:
Elemen/@Atribut Kemunculan Jenis Deskripsi
TransactionResponse 1 Complex element Elemen root yang menunjukkan keberhasilan atau masalah untuk pesan permintaan Transaksi yang diterima.
TransactionResponse/@timestamp 1 DateTime Tanggal dan waktu pembuatan pesan ini.
TransactionResponse/@id 1 String ID unik dari pesan Transaksi yang terkait.
TransactionResponse/@partner 1 String Akun partner untuk pesan ini.
TransactionResponse/Success 0..1 Success Menunjukkan bahwa pesan Transaksi berhasil diproses tanpa peringatan, error, atau kegagalan.

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

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

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

TransactionResponse/Issues/Issue 1..n Issue Deskripsi dari peringatan, error, atau kegagalan yang dialami saat memproses pesan Transaksi. Detail tentang masalah ini dapat ditemukan di Pesan Error Status Feed.
TransactionResponse/Issues/Issue/@code 1 Integer ID untuk masalah.
TransactionResponse/Issues/Issue/@status 1 Enum

Jenis masalah yang dialami.

NIlai yang valid adalah peringatan, error, dan kegagalan.

Contoh

Success

Berikut adalah respons terhadap pesan Transaksi yang berhasil diproses.

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

Issues

Berikut adalah respons terhadap pesan Transaksi yang tidak diproses karena error.

<?xml version="1.0" encoding="UTF-8"?>
<TransactionResponse timestamp="2020-05-18T16:20:00-04:00"
                     id="12345678"
                     partner="partner_account_name">
  <Issues>
    <Issue code="1001" status="error">Example</Issue>
  </Issues>
</TransactionResponse>