Transakcja (dane usługi)

Prośby

Składnia

Komunikat Transaction (Property Data) używa następującej składni:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="timestamp"
             id="message_ID"
             partner="partner_key">
  <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>
      <AdultCapacity>max_number_of_adult_occupants</AdultCapacity>
      <ChildCapacity>max_number_of_child_occupants</ChildCapacity>
      <OccupancySettings>
        <MinOccupancy>min_number_of_occupants</MinOccupancy>
        <MinAge>min_age_of_occupants</MinAge>
      </OccupancySettings>
      <PhotoURL>
        <Caption>
          <Text text="photo_description" language="language_code"/>
        </Caption>
        <URL>photo_location</URL>
      </PhotoURL>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>[western|japanese|japanese_western]</JapaneseHotelRoomStyle>
        <Beds>
           <Bed size="[single|semi_double|double|queen|king]">
             <Width unit="cm" number="bed_width"/>
             <Length unit="cm" number="bed_length"/>
           </Bed>
           <!-- Include with any additional beds. -->
        </Beds>
        <Suite/>
        <Capsule/>
        <Roomsharing>[shared|private]</Roomsharing>
        <Outdoor/>
        <MobilityAccessible/>
        <Smoking>[smoking|non_smoking]</Smoking>
        <BathAndToilet relation="[together|separate]">
          <Bath bathtub="[false|true]" shower="[false|true]"/>
          <Toilet electronic_bidet="[false|true]" mobility_accessible="[false|true]"/>
        </BathAndToilet>
        <OpenAirBath/>
        <AirConditioning/>
        <Balcony/>
        <Views>
          <!-- (Optional) Defines the type of views from the room. -->
          <!-- Example: <OceanView/> -->
        </Views>
      </RoomFeatures>
    </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>
      <PhotoURL>
        <Caption>
          <Text text="photo_description" language="language_code"/>
          ...
        </Caption>
        <URL>photo_location</URL>
      </PhotoURL>
      ...
      <Meals>
        <Breakfast
          included="[true|false]" buffet="[true|false]"
          in_room="[true|false]" in_private_space="[true|false]"/>
        <Dinner
          included="[true|false]" buffet="[true|false]"
          in_room="[true|false]" in_private_space="[true|false]"/>
      </Meals>
      <CheckinTime>checkin_time</CheckinTime>
      <CheckoutTime>checkout_time</CheckoutTime>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Elementy i atrybuty

Komunikat transakcji (dane usługi) składa się z tych elementów i atrybutów:

Element / @Atrybut Wystąpienia Typ Opis
Transaction 1 Complex element W implementacji ARI jest to główny element wiadomości, który określa typy i pakiety pomieszczeń dla pojedynczej usługi.
Transaction / @timestamp 1 DateTime Data i godzina utworzenia tej wiadomości.
Transaction / @id 1 string Unikalny identyfikator tej wiadomości z żądaniem. Ta wartość jest zwracana w wiadomości z odpowiedzią. Dozwolone znaki to a–z, A–Z, 0–9, _ (podkreślenie) i - (myślnik).
Transaction / @partner 1 string Konto partnera, do którego należy ta wiadomość. Wartość ciągu znaków to wartość „Klucz partnera” podana na stronie Ustawienia konta w Hotel Center.

Uwaga: jeśli masz backend, który dostarcza pliki danych dla wielu kont, ta wartość musi być zgodna z wartością atrybutu ID określoną w elemencie <RequestorID> komunikatów <OTA_HotelRateAmountNotifRQ> i <OTA_HotelAvailNotifRQ> dla tego samego konta.

Transaction / PropertyDataSet 1.. PropertyDataSet Kontener do definiowania typów pomieszczeń i pakietów dla pojedynczej usługi.
Transaction / PropertyDataSet / @action 0..1 enum

Typ aktualizacji, która ma zostać zastosowana do definicji stawek za pokój.

Prawidłowe wartości to:

  • overlay : zastępuje wszystkie zdefiniowane wcześniej elementy <RoomData> i <PackageData> w danej usłudze. Prawidłowe są tylko wartości <RoomData> i <PackageData> w bieżącej wiadomości.
  • delta : Dodaje wcześniej niezdefiniowane elementy <RoomData> i <PackageData> lub zmienia istniejące.

Ten atrybut jest opcjonalny i ma domyślną wartość delta, jeśli nie zostanie określony.

Transaction / PropertyDataSet / Property 1 string Unikalny identyfikator usługi. Ta wartość musi być zgodna z identyfikatorem hotelu określonym za pomocą atrybutu <id> w elemencie <listing> w pliku danych z listą hoteli. Identyfikator hotelu znajdziesz też w Hotel Center.
Transaction / PropertyDataSet / RoomData 0..n RoomData

Opisuje pomieszczenie.

Uwaga: wymagany jest co najmniej 1 z tych elementów: <RoomData> lub <PackageData>.

Transaction / PropertyDataSet / RoomData / RoomID 1 RoomID Unikalny identyfikator rodzaju pokoju. Do tej wartości odwołuje się atrybut InvTypeCode w elemencie <StatusApplicationControl> w komunikatach <OTA_HotelAvailNotifRQ> i <OTA_HotelRateAmountNotifRQ>.
Transaction / PropertyDataSet / RoomData / Name 1 Name Kontener na nazwę kategorii pokoju w co najmniej jednym języku.
Transaction / PropertyDataSet / RoomData / Name / Text 1..n Text Określa kategorię pokoju w jednym języku.
Transaction / PropertyDataSet / RoomData / Name / Text / @text 1..n string Nazwa kategorii pokoju w języku określonym w atrybucie language.
Transaction / PropertyDataSet / RoomData / Description 1 Name Kontener na opis kategorii pokoju w co najmniej jednym języku.
Transaction / PropertyDataSet / RoomData / Description / Text 1..n Text Określa kategorię pokoju w jednym języku.
Transaction / PropertyDataSet / RoomData / Description / Text / @text 1..n string Opis kategorii pokoju w języku określonym w atrybucie language.
Transaction / PropertyDataSet / RoomData / Description / Text / @language 1..n string Dwuliterowy kod języka.
Transaction / PropertyDataSet / RoomData / AllowablePackageIDs 0..1 AllowablePackageIDs Kontener elementów <AllowablePackageID>.

Jeśli określono <AllowablePackageIDs>, typ pokoju określony przez <RoomID> w nadrzędnym elemencie <RoomData> można łączyć tylko z planami stawek zdefiniowanymi przez elementy <AllowablePackageID>.

Jeśli <AllowablePackageIDs> nie jest określony, typ pokoju określony przez <RoomID> w nadrzędnym elemencie <RoomData> można połączyć z każdym abonamentem.

Użyj właściwości <AllowablePackageIDs> lub <AllowableRoomIDs>, ale nie obu naraz.

Transaction / PropertyDataSet / RoomData / AllowablePackageIDs / AllowablePackageID 1..n AllowablePackageID Określa identyfikator pakietu (PackageID), który można połączyć z pokojem tego typu. Abonament zależy od pakietu, stawek i dostępności. PackageID odpowiada wartości RatePlanCode w komunikatach OTA_HotelRateAmountNotifRQ i OTA_HotelAvailNotifRQ.
Transaction / PropertyDataSet / RoomData / Capacity 0..1 integer Maksymalna liczba osób dorosłych i dzieci, które może fizycznie pomieścić pokój. Powinna być równa lub większa od wartości NumberOfGuests wysyłanych ze stawkami.

Wartość <Capacity> musi być dodatnią liczbą całkowitą z zakresu od 1 do 99 włącznie. Przykład znajdziesz tutaj.

Uwaga: jeśli wartość <Capacity> nie jest ustawiona, liczba dozwolonych osób jest uznawana za nieograniczona. Jeśli to pole nie jest skonfigurowane, a w obiekcie są zdefiniowane ExtraGuestCharges lub AdditionalGuestAmounts, ceny mogą być generowane dla dowolnej liczby osób. Jeśli są zdefiniowane ExtraGuestCharges lub AdditionalGuestAmounts, zalecamy ustawienie właściwości <Capacity>, aby mieć pewność, że ceny nie będą wyświetlane w przypadku nieprawidłowych opcji liczby osób.

Transaction / PropertyDataSet / RoomData / AdultCapacity 0..1 integer Maksymalna liczba osób dorosłych, które może fizycznie pomieścić pokój. Ta wartość powinna być równa lub większa od dowolnych wartości NumberOfGuests przesyłanych razem ze stawkami.

Wartość <AdultCapacity> musi być dodatnią liczbą całkowitą z zakresu od 1 do 99 włącznie. Przykład znajdziesz tutaj.

Transaction / PropertyDataSet / RoomData / ChildCapacity 0..1 integer Maksymalna liczba dzieci, które mogą fizycznie pomieścić dany pokój.

Wartość <ChildCapacity> musi być dodatnią liczbą całkowitą z zakresu od 1 do 99 włącznie. Przykład znajdziesz tutaj.

Transaction / PropertyDataSet / RoomData / OccupancySettings 0..1 OccupancySettings Ustawienia, które mogą ograniczać lub modyfikować wymagania dotyczące obłożenia sali.

Element <OccupancySettings> przyjmuje te elementy podrzędne:

  • <MinOccupancy>: minimalna liczba gości, którzy mogą zatrzymać się w pokoju. Jeśli na przykład ustawiona wartość to 2, nie można zarezerwować tej sali dla jednego gościa.

    Wartość <MinOccupancy> musi być dodatnią liczbą całkowitą z zakresu od 1 do 99 włącznie.

  • <MinAge>: minimalny wiek wszystkich gości zatrzymujących się w pokoju. Jeśli na przykład parametr ma wartość 18, tę salę można zarezerwować tylko dla grup, w których wszyscy goście mają ukończone 18 lat.

    Wartość <MinAge> musi być dodatnią liczbą całkowitą z zakresu od 0 do 99 włącznie.

<OccupancySettings>
  <MinOccupancy>2</MinOccupancy>
  <MinAge>16</MinAge>
</OccupancySettings>

Nie trzeba uwzględniać wszystkich elementów podrzędnych.

Transaction / PropertyDataSet / RoomData / PhotoURL 0..n PhotoURL Adres URL i opcjonalny podpis zdjęcia danego pokoju lub zestawu. Dla pokoju lub pakietu pokoi możesz określić więcej niż jeden obiekt <PhotoURL>.

Ten element pobiera następujące elementy podrzędne:

  • <URL>: określa lokalizację zdjęcia. Lokalizacja powinna być publiczna (nie za zaporą sieciową) i powinna zawierać protokół (http://).
  • <Caption>: definiuje podpis zdjęcia. Ten element przyjmuje pojedynczy element podrzędny <Text>, który ma 2 wymagane atrybuty: Text i language. Atrybut Text to podpis, a atrybut language określa dwuliterowy kod języka, np. en.
<PhotoURL>
 <URL>http://www.example.com/image1.jpg</URL>
 <Caption>
  <Text text="A bright way to enjoy your
   mornin' cuppa tea." language="en"/>
  <Text text="Une façon lumineuse pour profiter
   de votre tasse de thé." language="fr"/>
 </Caption>
</PhotoURL>
Transaction / PropertyDataSet / RoomData / RoomFeatures 0..1 <RoomFeatures> Zawiera informacje o wyposażeniu pokoju.
Transaction / PropertyDataSet / RoomData / RoomFeatures / JapaneseHotelRoomStyle 0..1 enum

Wskazuje styl japońskiego pokoju hotelowego.

Prawidłowe wartości to:

  • western: pokój z łóżkami w stylu zachodnim.
  • japanese: pokój w stylu japońskim z łóżkami z futonem.
  • japanese_western: pokój w japońskim stylu zachodnim z łóżkami w stylu zachodniego i futonami w japońskim stylu.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Beds 0..1 Object Liczba elementów <Bed> w pokoju jest równa liczbie sal. Pamiętaj, że japońskie futony nie są tu uwzględniane.

Każdy element <Bed> ma te atrybuty:

  • size (opcjonalny): prawidłowe wartości to single, semi_double, double, queen i king.
Każdy element <Bed> zawiera te elementy podrzędne:
  • <Width> (opcjonalnie): określa szerokość łóżka. Musisz podać atrybut unit o wartości cm oraz atrybut number o szerokości łóżka w centymetrach całkowitych.
  • <Length> (opcjonalnie): określa długość łóżka. Musisz podać atrybut unit o wartości cm oraz atrybut number o długości łóżka wyrażonych w centymetrach całkowitych.
Przykład:
<Beds>
  <Bed size="double">
    <Width unit="cm" number="140"/>
    <Length unit="cm" number="195"/>
  </Bed>
  <Bed/> <!-- Size unknown -->
</Beds>
Transaction / PropertyDataSet / RoomData / RoomFeatures / Suite 0.. enum Podaj ten element, jeśli pokój jest apartamentem.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Capsule 0..1 enum Podaj ten element, gdy ten pokój jest salą kapsułową.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Roomsharing 0..1 enum Informacja, czy pokój jest udostępniany innym osobom, takim jak właściciele lub goście. Prawidłowe wartości to shared i private.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Outdoor 0..1 enum Dodaj ten element, gdy pomieszczenie dotyczy hotelu na świeżym powietrzu, który nie ma stałych ścian, instalacji wodno-kanalizacyjnych ani klimatyzacji. Na przykład pokoje hotelowe nie są obiektami zakwaterowania na świeżym powietrzu, a kempingi, w których goście mogą nocować w namiotach, oraz parkingi dla kamperów, do których przyjeżdżają własne kampery, znajdują się na świeżym powietrzu.
Transaction / PropertyDataSet / RoomData / RoomFeatures / MobileAccessible 0..1 enum Dodaj ten element, gdy sala jest przystosowana dla osób z niepełnosprawnością ruchową.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Smoking 0..1 enum Określa, czy pokój jest przeznaczony dla niepalących czy dla palących. Prawidłowe wartości to non_smoking i smoking.
Transaction / PropertyDataSet / RoomData / RoomFeatures / BathAndToilet 0..1 Object Zawiera informacje o łazienkach i toaletach w pokoju.

Atrybut to:

  • relation (opcjonalnie): wskazuje, w jaki sposób wanna i toaleta są umieszczone względem siebie. Prawidłowe wartości to together, na przykład łazienka, w której zarówno łazienka, jak i toaleta znajdują się razem w tym samym pomieszczeniu, oraz separate, gdzie łazienka i toaleta mają własne miejsce. Tego atrybutu nie można ustawić, jeśli w pokoju nie ma ani łaźni, ani toalety.

Element opcjonalnie pobiera te elementy podrzędne:

  • <Bath> (opcjonalnie): istnienie tego elementu wskazuje, że w pokoju znajduje się wanna.

    Są to:

    • bathtub (opcjonalny): oznacza, że w łazience jest wanna. Prawidłowe wartości to 0 (lub false) i 1 (albo true).
    • shower (opcjonalnie): oznacza, że w wannie znajduje się prysznic. Prawidłowe wartości to 0 (lub false) i 1 (lub true).
  • <Toilet> (opcjonalnie): obecność tego elementu wskazuje, że w pokoju jest toaleta.

    Są to:

    • electronic_bidet (opcjonalnie): oznacza, że toaleta jest wyposażona w elektroniczny bidet. Prawidłowe wartości to 0 (lub false) i 1 (lub true).
    • mobility_accessible (opcjonalny): oznacza, że toaleta jest przystosowana dla osób z niepełnosprawnością ruchową. Prawidłowe wartości to 0 (lub false) i 1 (albo true).

Przykład:

<BathAndToilet relation="separate">
  <Bath bathtub="1" shower="1"/>
  <Toilet
    electronic_bidet="1"
    mobility_accessible="1"/>
</BathAndToilet>
Transaction / PropertyDataSet / RoomData / RoomFeatures / OpenAirBath 0..1 enum Dodaj ten element, jeśli w tym pokoju jest prywatna łazienka na świeżym powietrzu.
Transaction / PropertyDataSet / RoomData / RoomFeatures / AirConditioning 0..1 enum Dodaj ten element, jeśli pokój jest klimatyzowany.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Balcony 0..1 enum Dodaj ten element, jeśli ten pokój ma balkon lub loża.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Views 0..1 Object Możliwe opcje:

<AirportView/>
<BayView/>
<BeachView>/>
<CastleView/>
<CityView/>
<CountrysideView/>
<CourtyardView/>
<DuneView/>
<ForestView/>
<GardenView/>
<GolfCourseView/>
<HarborView/>
<LagoonView/>
<LakeView/>
<MarinaView/>
<MountainView/>
<NatureView/>
<OceanView/>
<ParkView/>
<PartialOceanView/>
<PisteView/>
<PoolView/>
<PyramidView/>
<RiverView/>
<StreetView/>

Transaction / PropertyDataSet / PackageData 0..n PackageData

Kontener na elementy opisujące funkcje i hasła dotyczące cen, które nie są częścią opisu fizycznego pomieszczenia.

Uwaga: wymagany jest co najmniej 1 z tych elementów: <RoomData> lub <PackageData>.

Transaction / PropertyDataSet / PackageData / PackageID 1 string Wartość PackageID w tych wiadomościach odpowiada wartości RatePlanCode w komunikatach OTA_HotelRateAmountNotifRQ i OTA_HotelAvailNotifRQ.
Transaction / PropertyDataSet / PackageData / Name 1 Name Kontener na nazwę pakietu w co najmniej jednym języku.
Transaction / PropertyDataSet / PackageData / Name / Text 1..n Text Określa nazwę pakietu w jednym języku.
Transaction / PropertyDataSet / PackageData / Name / Text / @text 1..n string Nazwa pakietu w języku określonym w atrybucie language.
Transaction / PropertyDataSet / PackageData / Description 1 Description Kontener na opis pakietu w co najmniej jednym języku.
Transaction / PropertyDataSet / PackageData / Description / Text 1..n Text Określa opis pakietu w jednym języku.
Transaction / PropertyDataSet / PackageData / Description / Text / @text 1..n string Opis pakietu w języku określonym w atrybucie language.
Transaction / PropertyDataSet / PackageData / Description / Text / @language 1..n string Dwuliterowy kod języka.
Transaction / PropertyDataSet / PackageData / AllowableRoomIDs 0..1 AllowableRoomIDs Kontener elementów <AllowableRoomID>.

Jeśli określono <AllowableRoomIDs>, abonament określony przez <PackageID> w nadrzędnym elemencie <PackageData> może być łączony tylko z typami pomieszczeń zdefiniowanymi przez elementy <AllowableRoomID>.

Jeśli <AllowableRoomIDs> nie jest określony, abonament określony przez <PackageID> w nadrzędnym elemencie <PackageData> można łączyć z dowolnym typem pokoju.

Użyj właściwości <AllowablePackageIDs> lub <AllowableRoomIDs>, ale nie obu naraz.

Transaction / PropertyDataSet / PackageData / AllowableRoomIDs / AllowableRoomID 1..n AllowableRoomID Określa identyfikator pokoju, który można połączyć z tym abonamentem. Typ pomieszczenia jest określony w elemencie <RoomData>.
Transaction / PropertyDataSet / PackageData / Refundable 0..1 Refundable Umożliwia podanie ceny jako całkowitej możliwej do zwrotu lub anulowania. Jeśli nie zostanie podany, nie wyświetlą się żadne informacje o zwrocie środków.

Uwaga: zalecamy ustawienie wszystkich atrybutów. Jeśli nie ustawisz co najmniej 1 atrybutu, zostanie wygenerowane ostrzeżenie o stanie pliku danych.

Jeśli nie skonfigurujesz żadnych atrybutów, stawka nie będzie wyświetlana jako podlegająca zwrotowi.

Podczas ustawiania atrybutów pamiętaj o tych kwestiach:

  • Jeśli wartość available lub refundable_until_days nie jest ustawiona, stawka nie będzie wyświetlana jako podlegająca zwrotowi.
  • Jeśli available ma wartość 0 lub false, pozostałe atrybuty są ignorowane. Stawka nie jest wyświetlana jako podlegająca zwrotowi, nawet jeśli ustawiono co najmniej jeden z pozostałych atrybutów.
Transaction / PropertyDataSet / PackageData / Refundable / @available 1 boolean (Wymagane) Ustaw jako 1 lub true, aby wskazać, czy stawka umożliwia pełny zwrot środków. W przeciwnym razie ustaw wartość 0 lub false.
Transaction / PropertyDataSet / PackageData / Refundable / @refundable_until_days 0..1 integer (Wymagane, jeśli available to true) Określa liczbę dni przed zameldowaniem, na które można poprosić o pełny zwrot środków. Wartość refundable_until_days musi być liczbą całkowitą z zakresu od 0 do 330 włącznie.
Transaction / PropertyDataSet / PackageData / Refundable / @refundable_until_time 0.. Time (Zdecydowanie zalecane, jeśli available to true) Określa ostatnią porę dnia (według lokalnego czasu hotelu), o której prośba o pełny zwrot środków zostanie uwzględniona. Możesz go połączyć z polem refundable_until_days, aby na przykład określić, że „Zwroty środków są dostępne do 16:00 na 2 dni przed datą zameldowania”. Jeśli zasada refundable_until_time nie jest ustawiona, domyślnie przyjmuje się północ.
Transaction / PropertyDataSet / PackageData / BreakfastIncluded 0..1 boolean Określa, czy pokój tego typu obejmuje śniadanie. Prawidłowe wartości to 0 (lub false) i 1 (lub true).

Zaleca się użycie właściwości <Meals> zamiast <BreakfastIncluded>.

Transaction / PropertyDataSet / PackageData / CheckinTime 0..1 Time Najwcześniejsza możliwa godzina zameldowania zgodnie z czasem lokalnym hotelu. Czas musi być krótszy niż 24:00.
Transaction / PropertyDataSet / PackageData / CheckoutTime 0..1 Time Najpóźniejsza możliwa godzina wymeldowania według czasu lokalnego.
Transaction / PropertyDataSet / PackageData / InternetIncluded 0..1 boolean Określa, czy w pokoju jest bezpłatny dostęp do internetu, a inne pokoje nie mają tego udogodnienia. Nie ustawiaj tego elementu w hotelu, który zapewnia bezpłatny dostęp do internetu we wszystkich pokojach. Nie dotyczy to internetu przewodowego ani bezprzewodowego, które nie jest dostępne w pokojach gości. Prawidłowe wartości to 0 (lub false) i 1 (lub true).
Transaction / PropertyDataSet / PackageData / Meals 0..1 Object Zawiera informacje na temat posiłków w tym pakiecie.

Element <Meals> przyjmuje 2 opcjonalne elementy podrzędne: <Breakfast> i <Dinner>, które mają te atrybuty:

  • included (wymagany): ustaw na 1 (lub true), jeśli cena obejmuje śniadanie/kolację. W przeciwnym razie ustaw wartość 0 lub false.
  • in_room (opcjonalnie): 1 (lub true), jeśli goście mogą zjeść śniadanie/kolację w pokoju, w którym się zatrzymują. W przeciwnym razie ustaw wartość 0 (lub false).
  • in_private_space (opcjonalnie): 1 (lub true), jeśli goście mogą zjeść śniadanie lub kolację w pomieszczeniu (z wyjątkiem pokoju, w którym się zatrzymują), w którym mogą uniknąć kontaktu z innymi gośćmi. W przeciwnym razie ustaw wartość 0 (lub false).
  • buffet (opcjonalnie): ustaw jako 1 (lub true), jeśli śniadanie/kolacja jest podawane w formie bufetu. W przeciwnym razie ustaw wartość 0 (lub false).

Atrybuty opcjonalne są używane tylko wtedy, gdy included ma wartość prawda.

Aby filtry posiłków (no meals, breakfast only, dinner only i breakfast and dinner) działały, zarówno <Breakfast>, jak i <Dinner> muszą mieć podany atrybut included.

Transaction / PropertyDataSet / PackageData / ParkingIncluded 0..1 boolean Określa, czy w pokoju znajduje się bezpłatny parking, a w miejscu, gdzie parking w innym przypadku byłby usługą płatną w hotelu. Nie podawaj wartości tego elementu w przypadku hotelu z bezpłatnym parkingiem. Prawidłowe wartości to 0 (lub false) oraz 1 (albo true). Wartość domyślna to false.
Transaction / PropertyDataSet / PackageData / PhotoURL 0..1 Object (Tak samo jak <PhotoURL> w <RoomData>, ale w przypadku opakowania (np. zdjęć posiłków).)

Przykłady

Dane dotyczące sal i pakietów

Poniżej znajdziesz podstawowy przykład definiowania danych pokoju i pakietu w wiadomości o transakcji (dane usługi). Atrybut overlay służy do zagwarantowania, że jeśli jakieś dane już istnieją nieoczekiwanie, zostaną usunięte i zastąpione danymi podanymi w tym komunikacie:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-05-18T16:20:00-04:00"
             id="12345678"
             partner="partner_key">
  <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>
      <!-- Additional RoomData child elements omitted. -->
    </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>

Dodaj typ pokoju

Poniżej znajdziesz przykład dodawania rodzaju pokoju i pakietu do istniejących danych <Transaction>:

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

Usuń typy pomieszczeń

Poniżej pokazujemy, jak usunąć istniejące rodzaje pokojów i pakiety. W takim przypadku, jeśli wiadomości z sekcji „Dane dotyczące sal i pakietów” oraz „Dodaj typ pokoju” zostały wcześniej wysłane do Google, pokój typu King i Double przestanie istnieć po otrzymaniu przez Google wyświetlonej wiadomości. Pamiętaj, że usunięcie danych pakietu wpływa na ogólny plan taryfowy zgodnie z definicją w komunikatach dotyczących transakcji (dane obiektu), OTA_HotelRateAmountNotifRQ i OTA_HotelAvailNotifRQ (przez odwoływanie się do tej samej wartości PackageID), dlatego odpowiednie aktualizacje przy użyciu innych typów wiadomości mogą być wymagane, aby uwzględnić to, że PackageID_2 i PackageID_3 nie są już tutaj zdefiniowane.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-08-18T16:20:00-04:00"
             id="12345678"
             partner="partner_key">
  <PropertyDataSet action="overlay">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <Name>
        <Text text="Queen" language="en"/>
      </Name>
      <!-- Additional RoomData child elements omitted. -->
      <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>
      <!-- Additional PackageData child elements omitted. -->
      <Refundable available="true" refundable_until_days="7" refundable_until_time="18:00:00"/>
      <BreakfastIncluded>0</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>


Ogranicz plany stawek

Poniższy przykład pokazuje, jak za pomocą elementu <AllowablePackageIDs> ograniczać plany stawek dozwolone dla danego typu pokoju. W tym przykładzie pokój typu Queen (RoomID_2) można połączyć tylko z pakietem i abonamentem zidentyfikowanym jako PackageID_1.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-12-18T16:20:00-04:00"
             id="12345678"
             partner="partner_key">
  <PropertyDataSet action="overlay">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <Name>
        <Text text="King" language="en"/>
      </Name>
      <!-- Additional RoomData child elements omitted. -->
    </RoomData>
    <RoomData>
      <RoomID>RoomID_2</RoomID>
      <Name>
        <Text text="Queen" language="en"/>
      </Name>
      <AllowablePackageIDs>
        <AllowablePackageID>PackageID_1</AllowablePackageID>
      </AllowablePackageIDs>
      <!-- Additional RoomData child elements omitted. -->
    </RoomData>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Name>
        <Text text="Standard" language="en"/>
      </Name>
      <!-- Additional PackageData child elements omitted. -->
      <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>
      <!-- Additional PackageData child elements omitted. -->
      <Refundable available="true" refundable_until_days="7" refundable_until_time="18:00:00"/>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Ogranicz pojemność sali

Poniżej znajdziesz przykład użycia elementów <Capacity>, <AdultCapacity> i <ChildCapacity> do ustawienia ograniczeń dotyczących pojemności sal.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-12-18T16:20:00-04:00"
             id="12345678"
             partner="partner_key">
  <PropertyDataSet action="overlay">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <Name>
        <Text text="Double" language="en"/>
      </Name>
      <Capacity>4</Capacity>
      <AdultCapacity>4</AdultCapacity>
      <ChildCapacity>3</ChildCapacity>
      <!-- Additional RoomData child elements omitted. -->
    </RoomData>
  </PropertyDataSet>
</Transaction>

Pokoje dwuosobowe (RoomID_1) mogą pomieścić do 4 osób. Może też nocować maksymalnie 4 osoby dorosłe i 3 dzieci. Aby można było zarezerwować ten pokój, trzeba spełnić wszystkie 3 wymagania dotyczące pojemności. Ta konfiguracja jest reprezentatywna dla typowego pokoju z 2 łóżkami, z których każde może pomieścić 2 osoby. Liczba dzieci jest o 1 mniejsza niż łączna liczba osób, ponieważ w sali musi być obecna co najmniej jedna osoba dorosła.

Rozszerzone przykłady z użyciem słowa <RoomFeatures> i posiłków

JapaneseHotelRoomStyle nie ma wartości domyślnej. Pominięcie wartości nie powoduje błędu XML, ale Twoja wizytówka nie wyświetla się w wynikach wyszukiwania, gdy użytkownik filtruje według stylu pokoju lub łóżka.

2 łóżka pojedyncze

Poniższy przykład pokazuje, jak użyć właściwości <RoomFeatures>:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>western</JapaneseHotelRoomStyle>
        <Beds> <!-- Two single beds -->
          <Bed size="single">
            <Width unit="cm" number="97"/>
            <Length unit="cm" number="195"/>
          </Bed>
          <Bed size="single">
            <Width unit="cm" number="97"/>
            <Length unit="cm" number="195"/>
          </Bed>
        </Beds>
        <Suite/>
        <Capsule/>
        <Roomsharing>private</Roomsharing>
        <Outdoor/>
        <MobilityAccessible/>
        <Smoking>non_smoking</Smoking>
        <BathAndToilet relation="separate">
          <Bath bathtub="1" shower="1"/>
          <Toilet electronic_bidet="1" mobility_accessible="1"/>
        </BathAndToilet>
        <OpenAirBath/>
        <AirConditioning/>
        <Balcony/>
        <Views>
          <LakeView/>
          <MarinaView/>
          <BeachView/>
          <ForestView/>
          <MountainView/>
          <NatureView/>
        </Views>
      </RoomFeatures>
    </RoomData>
  </PropertyDataSet>
</Transaction>

2 łóżka podwójne

Poniżej znajduje się przykład pokoju w stylu western z 2 łóżkami double.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>western</JapaneseHotelRoomStyle>
        <Beds> <!-- Two double beds-->
          <Bed size="double"></Bed>
          <Bed size="double"></Bed>
        </Beds>
      </RoomFeatures>
    </RoomData>
  </PropertyDataSet>
</Transaction>

Styl japoński bez łóżka

Poniżej znajduje się przykład pokoju bez łóżka w japońskim stylu. W przypadku pokoju w stylu japanese nie jest wymagana informacja o łóżku.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>japanese</JapaneseHotelRoomStyle>
      </RoomFeatures>
    </RoomData>
  </PropertyDataSet>
</Transaction>

Japoński westerny z łóżkiem

Poniżej znajduje się przykład pokoju w stylu japanese_western z łóżkiem o rozmiarze king.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>japanese_western</JapaneseHotelRoomStyle>
        <Beds>
          <Bed size="king"></Bed>
        </Beds>
      </RoomFeatures>
    </RoomData>
  </PropertyDataSet>
</Transaction>

Jeśli partner nie ma informacji o liczbie łóżek w pokojach japanese_western, zapoznaj się z tym przykładem:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>RoomID_1</RoomID>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>japanese_western</JapaneseHotelRoomStyle>
      </RoomFeatures>
    </RoomData>
  </PropertyDataSet>
</Transaction>


Posiłki

Ten przykład zawiera metadane dotyczące pomieszczeń i pakietów w przypadku posiłków, zdjęć oraz godzin zameldowania i wymeldowania:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Name>
        <Text text="Meals Included" language="en"/>
      </Name>
      <PhotoURL>
        <Caption>
          <Text text="Breakfast" language="en"/>
          <Text text="朝食" language="ja"/>
        </Caption>
        <URL>http://example.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
      <Meals>
        <!-- Guests can choose to have breakfast in their room or in another
        space to avoid contact with other guests. -->
        <Breakfast included="1" in_room="1" in_private_space="1"/>
        <Dinner included="1" buffet="1"/>
      </Meals>
      <CheckinTime>15:00</CheckinTime>
      <CheckoutTime>11:00</CheckoutTime>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Tylko śniadanie

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <PackageData>
      <PackageID>PackageID_1</PackageID>
      <Name>
        <Text text="Breakfast Included" language="en"/>
      </Name>
      <PhotoURL>
        <Caption>
          <Text text="Breakfast" language="en"/>
          <Text text="朝食" language="ja"/>
        </Caption>
        <URL>http://example.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
      <Meals>
        <Breakfast included="true"/>
        <!-- Dinner not included needs to be explicitly specified -->
        <Dinner included="false"/>
      </Meals>
      <CheckinTime>15:00</CheckinTime>
      <CheckoutTime>11:00</CheckoutTime>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Odpowiedzi

Składnia

Komunikat TransactionResponse (Property Data) używa następującej składni:

<?xml version="1.0" encoding="UTF-8"?>
<TransactionResponse 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>
</TransactionResponse>

Elementy i atrybuty

Komunikat TransactionResponse (Property Data) ma te elementy i atrybuty:

Element / @Atrybut Wystąpienia Typ Opis
TransactionResponse 1 Complex element Element główny wskazujący pomyślne lub problemy dotyczące odebranej wiadomości z żądaniem transakcji.
TransactionResponse / @timestamp 1 DateTime Data i godzina utworzenia tej wiadomości.
TransactionResponse / @id 1 string Unikalny identyfikator z powiązanej wiadomości o transakcji.
TransactionResponse / @partner 1 string Konto partnera, do którego należy ta wiadomość.
TransactionResponse / Success 0..1 Success Wskazuje, że wiadomość dotycząca transakcji została przetworzona bez ostrzeżeń i błędów.

W każdej wiadomości znajduje się <Success> lub <Issues>.

TransactionResponse / Issues 0..1 Issues Kontener na co najmniej 1 problem napotkany podczas przetwarzania wiadomości dotyczącej transakcji.

W każdej wiadomości znajduje się <Success> lub <Issues>.

TransactionResponse / Issues / Issue 1..n Issue Opis ostrzeżenia, błędu lub niepowodzenia podczas przetwarzania wiadomości dotyczącej transakcji. Szczegółowe informacje o tych problemach znajdziesz w sekcji Komunikaty o błędach stanu pliku danych.
TransactionResponse / Issues / Issue / @code 1 integer Identyfikator problemu.
TransactionResponse / Issues / Issue / @status 1 enum

Typ napotkanego problemu.

Prawidłowe wartości to warning, error i failure.

Przykłady

Gotowe

Poniżej znajdziesz odpowiedź na pomyślnie przetworzoną wiadomość dotyczącą transakcji.

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

Problemy

Poniżej znajdziesz odpowiedź na komunikat o transakcji, który nie został przetworzony z powodu błędów.

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