Transakcja (dane usługi)

Żądania

Składnia

Komunikat Transaction (Property Data) ma taką 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

Wiadomość 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 element główny wiadomości definiującej typy pokojów i pakiety w pojedynczej usłudze.
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 - (łącznik).
Transaction / @partner 1 string Konto partnera, z którego pochodzi ta wiadomość. Ta wartość ciągu znaków to wartość „Klucz partnera” podana na stronie Ustawienia konta w Hotel Center.

Uwaga: jeśli masz backend, który udostępnia pliki danych dla wielu kont, ta wartość musi odpowiadać wartości atrybutu ID określonej w elemencie <RequestorID> wiadomości <OTA_HotelRateAmountNotifRQ> i <OTA_HotelAvailNotifRQ> dla tego samego konta.

Transaction / PropertyDataSet 1.. PropertyDataSet Kontener do definiowania rodzajów pokojów i pakietów w pojedynczej usłudze.
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 wcześniej zdefiniowane w danej usłudze właściwości <RoomData> i <PackageData>. Prawidłowe są tylko pola <RoomData> i <PackageData> z bieżącej wiadomości.
  • delta : Dodaje wcześniej nieokreślone wartości <RoomData> i <PackageData> lub modyfikuje istniejące.

Ten atrybut jest opcjonalny i domyślnie ma wartość delta, jeśli nie zostanie podany.

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

Opisuje pomieszczenie.

Uwaga: wymagana jest co najmniej 1 z tych właściwości: <RoomData> lub <PackageData>.

Transaction / PropertyDataSet / RoomData / RoomID 1 RoomID Unikalny identyfikator typu pomieszczenia. 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 nazwy kategorii pokoju w co najmniej jednym języku.
Transaction / PropertyDataSet / RoomData / Name / Text 1..n Text Określa nazwę kategorii 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 opis kategorii 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ślisz właściwość <AllowablePackageIDs>, typ pokoju określony przez parametr <RoomID> w nadrzędnym elemencie <RoomData> będzie można łączyć tylko z planami stawek zdefiniowanymi przez elementy <AllowablePackageID>.

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

Możesz użyć właściwości <AllowablePackageIDs> lub <AllowableRoomIDs>, ale nie obu naraz.

Transaction / PropertyDataSet / RoomData / AllowablePackageIDs / AllowablePackageID 1..n AllowablePackageID Określa identyfikator PackageID abonamentu, który można łączyć z pokojem tego typu. Plan stawek jest określany na podstawie kombinacji pakietu, stawek i dostępności. PackageID odpowiada 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 fizycznie mogą pomieścić w pomieszczeniu. Powinna być równa lub większa od wszystkich wartości NumberOfGuests przesyłanych ze stawkami.

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

Uwaga: jeśli zasada <Capacity> nie jest skonfigurowana, liczba dozwolonych osób jest uważana za nieograniczona. Jeśli to pole nie jest skonfigurowane, a zdefiniowany jest ExtraGuestCharges lub AdditionalGuestAmounts, ceny mogą być generowane dla dowolnej liczby osób. Zalecamy ustawienie atrybutu <Capacity>, jeśli zdefiniowany jest parametr ExtraGuestCharges lub AdditionalGuestAmounts. Dzięki temu ceny nie będą wyświetlane w przypadku nieprawidłowych opcji dotyczących liczby osób.

Transaction / PropertyDataSet / RoomData / AdultCapacity 0..1 integer Maksymalna liczba osób dorosłych, które fizycznie mieszczą się w sali. Powinna być równa lub większa od wszystkich wartości NumberOfGuests przesyłanych ze stawkami.

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

Transaction / PropertyDataSet / RoomData / ChildCapacity 0..1 integer Maksymalna liczba dzieci, które fizycznie mieszczą się w sali.

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

Transaction / PropertyDataSet / RoomData / OccupancySettings 0..1 OccupancySettings Ustawienia, które mogą ograniczać lub modyfikować wymagania dotyczące liczby osób w 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 jest wartość 2, tej sali nie można zarezerwować dla 1 gościa.

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

  • <MinAge>: minimalny wiek wszystkich gości przebywających w pokoju. Jeśli na przykład wartość to 18, tę salę można zarezerwować tylko dla grup, do których wszyscy goście mają co najmniej 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 pokoi. Dla pokoju lub zestawu pokoi możesz określić więcej niż 1 <PhotoURL>.

Ten element przyjmuje te 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 oznacza 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 funkcjach pokoju.
Transaction / PropertyDataSet / RoomData / RoomFeatures / JapaneseHotelRoomStyle 0..1 enum

Wskazuje styl japońskiego pokoju hotelowego.

Prawidłowe wartości to:

  • western: pokój w stylu zachodnim z łóżkami.
  • japanese: pokój w stylu japońskim z łóżkiem futonowym.
  • japanese_western: pokój w stylu zachodnim z łóżkami w stylu zachodnim i futonami w stylu japońskim.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Beds 0..1 Object Zawiera tyle elementów typu <Bed>, ile jest w sali. Pamiętaj, że japońskie futony nie powinny tu być uwzględniane.

Każdy element <Bed> ma te atrybuty:

  • size (opcjonalnie): prawidłowe wartości to single, semi_double, double, queen i king.
Każdy element <Bed> ma te elementy podrzędne:
  • <Width> (opcjonalny): określa szerokość łóżka. Musisz mieć atrybut unit o wartości cm i atrybut number o szerokości łóżka w centymetrach całkowitych.
  • <Length> (opcjonalny): określa długość łóżka. Musisz mieć atrybut unit o wartości cm i atrybut number o długości łóżka 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 jest to pokój typu suite.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Capsule 0..1 enum Podaj ten element, jeśli jest to pokój kapsułowy.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Roomsharing 0..1 enum Określa, czy pokój jest udostępniany innym osobom, np. właścicielom lub gościom. Prawidłowe wartości to shared i private.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Outdoor 0..1 enum Wybierz ten element, jeśli jest to pokój hotelowy na świeżym powietrzu, który nie ma stałych ścian, instalacji hydraulicznych ani klimatyzacji. Na przykład pokoje hotelowe nie są przeznaczone do zakwaterowania na świeżym powietrzu, natomiast kempingi, w przypadku których goście zatrzymują się w namiotach, oraz parkingi dla kamperów, do których goście przynoszą swój kamper, znajdują się na świeżym powietrzu.
Transaction / PropertyDataSet / RoomData / RoomFeatures / MobileAccessible 0..1 enum Stosuj ten element, jeśli pomieszczenie jest dostosowane do potrzeb osób poruszających się.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Smoking 0..1 enum Określa, czy jest to pokój 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 łazience i toalecie w pokoju.

Ten atrybut to:

  • relation (opcjonalnie): wskazuje położenie łazienki i toalety względem siebie. Prawidłowe wartości to together, np. łazienka, w której łazienka i toaleta znajdują się w tym samym pomieszczeniu, oraz separate, gdzie łazienka i toaleta są wydzielone na siebie. Tego atrybutu nie można ustawiać, jeśli w pomieszczeniu nie są jednocześnie łazienki i toalety.

Element opcjonalnie przyjmuje te elementy podrzędne:

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

    Te atrybuty:

    • bathtub (opcjonalnie): wskazuje, że w łazience jest wanna. Prawidłowe wartości to 0 (lub false) i 1 (lub true).
    • shower (opcjonalnie): wskazuje, że w łazience jest prysznic. Prawidłowe wartości to 0 (lub false) i 1 (lub true).
  • <Toilet> (opcjonalnie): istnienie tego elementu wskazuje, że w pokoju jest toaleta.

    Te atrybuty:

    • electronic_bidet (opcjonalnie): wskazuje, ż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 do potrzeb osób poruszających się. Prawidłowe wartości to 0 (lub false) i 1 (lub 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 Użyj tego elementu, jeśli pokój ma prywatną łaźnię na świeżym powietrzu.
Transaction / PropertyDataSet / RoomData / RoomFeatures / AirConditioning 0..1 enum Użyj tego elementu, jeśli pokój jest klimatyzowany.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Balcony 0..1 enum Użyj tego elementu, jeśli pokój ma balkon lub werandę.
Transaction / PropertyDataSet / RoomData / RoomFeatures / Views 0..1 Object Możliwe opcje to:

<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 związane z ceną i warunki, które nie są częścią opisu fizycznego pokoju.

Uwaga: wymagana jest co najmniej 1 z tych właściwości: <RoomData> lub <PackageData>.

Transaction / PropertyDataSet / PackageData / PackageID 1 string PackageID w tych komunikatach odpowiada 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 jednym lub kilku językach.
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ślisz właściwość <AllowableRoomIDs>, plan stawek określony przez element <PackageID> w nadrzędnym elemencie <PackageData> będzie można łączyć tylko z typami pokojów zdefiniowanymi przez elementy <AllowableRoomID>.

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

Możesz użyć właściwości <AllowablePackageIDs> lub <AllowableRoomIDs>, ale nie obu naraz.

Transaction / PropertyDataSet / PackageData / AllowableRoomIDs / AllowableRoomID 1..n AllowableRoomID Określa identyfikator pokoju typu pokoju, który można połączyć z tym abonamentem. Typ pomieszczenia jest zdefiniowany w elemencie <RoomData>.
Transaction / PropertyDataSet / PackageData / Refundable 0..1 Refundable Umożliwia wyświetlanie informacji o cenie jako podlegającej pełnym zwrotowi lub możliwości anulowania. Jeśli jej nie podasz, nie pojawią się żadne informacje o zwrocie środków.

Uwaga: zalecamy skonfigurowanie wszystkich atrybutów. Jeśli nie ustawisz co najmniej jednego atrybutu, pojawi się komunikat z ostrzeżeniem o stanie pliku danych.

Jeśli nie ustawisz ż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 jest 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 wartość 1 lub true, aby wskazać, czy stawka umożliwia pełny zwrot środków. W przeciwnym razie ustaw 0 lub false.
Transaction / PropertyDataSet / PackageData / Refundable / @refundable_until_days 0..1 integer (Wymagane, jeśli available to true) Określa, na ile dni przed zameldowaniem 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ą godzinę (według lokalnego czasu hotelu), aby uwzględnić prośbę o pełny zwrot środków. Możesz go połączyć z właściwością refundable_until_days, aby na przykład określić, że „Zwroty środków są dostępne do 16:00 2 dni przed datą zameldowania”. Jeśli refundable_until_time nie jest ustawiony, domyślną wartością jest północ.
Transaction / PropertyDataSet / PackageData / BreakfastIncluded 0..1 boolean Określa, czy w pokoju tego typu jest śniadanie. Prawidłowe wartości to 0 (lub false) i 1 (lub true).

Zalecamy używanie <Meals> zamiast <BreakfastIncluded>.

Transaction / PropertyDataSet / PackageData / CheckinTime 0..1 Time Najwcześniejszy możliwy czas zameldowania w czasie lokalnym w hotelu. Godzina musi być mniejsza niż 24:00.
Transaction / PropertyDataSet / PackageData / CheckoutTime 0..1 Time Najpóźniejszy możliwy czas wymeldowania według lokalnego czasu hotelu.
Transaction / PropertyDataSet / PackageData / InternetIncluded 0..1 boolean Określa, czy w pokoju jest bezpłatny dostęp do internetu, a pozostałe pokoje nie zawierają tego udogodnień. Nie umieszczaj tego elementu w hotelach, w których we wszystkich pokojach jest bezpłatny dostęp do internetu. Ten element nie dotyczy przewodowego lub bezprzewodowego internetu w pokoju, który nie jest dostępny w pokojach dla gości. Prawidłowe wartości to 0 (lub false) i 1 (lub true).
Transaction / PropertyDataSet / PackageData / Meals 0..1 Object Zawiera informacje o posiłkach w tej paczce.

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

  • included (wymagane): ustaw wartość 1 (lub true), jeśli cena obejmuje śniadanie lub kolację. W przeciwnym razie ustaw 0 lub false.
  • in_room (opcjonalnie): ustaw wartość 1 (lub true), jeśli goście mogą zjeść śniadanie lub kolację w pokoju, w którym się zatrzymali. W przeciwnym razie ustaw wartość 0 (lub false).
  • in_private_space (opcjonalnie): ustaw wartość 1 (lub true), jeśli goście mogą zjeść śniadanie lub kolację w pokoju (z wyjątkiem pokoju, w którym przebywają), w którym mogą uniknąć kontaktu z innymi gośćmi. W przeciwnym razie ustaw na 0 (lub false).
  • buffet (opcjonalnie): ustaw wartość 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ść true (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ć atrybut included.

Transaction / PropertyDataSet / PackageData / ParkingIncluded 0..1 boolean Określa, czy pokój obejmuje wliczony w cenę parking, w przypadku których parking w innym przypadku byłby płatną usługą w tym hotelu. Nie określaj wartości tego elementu w przypadku hotelu, w którym parking jest wliczony w cenę. Prawidłowe wartości to 0 (lub false) i 1 (lub 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 pomieszczeń i pakietów

Poniżej pokazujemy podstawowy przykład definiowania danych dotyczących pokoju i pakietu usługi w wiadomości transakcji (dane usługi). Atrybut overlay służy do zapewnienia, że jeśli jakiekolwiek dane już nieoczekiwanie istnieją, zostaną usunięte wszystkie istniejące dane i zastąpione danymi z tej wiadomości:

<?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 pomieszczenia

Poniższy przykład pokazuje, jak dodać typ pokoju i pakiet 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 znajdziesz przykład usuwania istniejących typów pokojów i pakietów. W tej sytuacji, jeśli wiadomości w polach „Dane sal i pakietów” i „Dodaj typ pokoju” zostały już wcześniej wysłane do Google, to po wyświetleniu wiadomości przez Google typy pokoi King i Double nie będą już istniały. Pamiętaj, że usunięcie danych pakietu ma wpływ na ogólny abonament według definicji w transakcjach (dane o obiekcie), wiadomościach OTA_HotelRateAmountNotifRQ i OTA_HotelAvailNotifRQ (odwoływanie się do tej samej wartości PackageID). Dlatego może być konieczne powiązane aktualizacje przy użyciu innych typów wiadomości, aby odzwierciedlały to, że PackageID_2 i PackageID_3 nie są już tu 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żej pokazujemy, jak za pomocą elementu <AllowablePackageIDs> ograniczyć plany stawek dozwolone w przypadku konkretnego typu pokoju. W tym przykładzie typ pokoju Queen (RoomID_2) można połączyć tylko z abonamentem i abonamentem, które są oznaczone 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 ustawiania 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>

Pokój dwuosobowy (RoomID_1) może pomieścić do 4 osób. Może on pomieścić do 4 dorosłych i 3 dzieci. Aby można było zarezerwować ten pokój, muszą być spełnione wszystkie 3 wymagania dotyczące liczby miejsc. Ta konfiguracja reprezentuje typowy pokój z 2 łóżkami, które mogą pomieścić 2 osoby. Liczba miejsc dla dzieci jest o 1 mniejsza od łącznej pojemności, ponieważ w pomieszczeniu musi być co najmniej 1 osoba dorosła.

Rozszerzone przykłady zawierające atrybut <RoomFeatures> i posiłki

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

2 łóżka pojedyncze

Poniższy przykład pokazuje, jak używać atrybutu <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 znajdziesz 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>

Japoński styl bez łóżka

Poniżej znajdziesz przykład pokoju w stylu japońskim bez łóżka. W pokoju typu japanese nie są wymagane informacje 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 western z łóżkiem

Poniżej znajdziesz 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 japanese_western pokoju, skorzystaj z tego przykładu:

<?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

Poniższy przykład zawiera metadane dotyczące pokoju i pakietu 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) ma taką 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

Wiadomość TransactionResponse (Property Data) składa się z tych elementów i atrybutów:

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

Każda wiadomość zawiera element <Success> lub <Issues>.

TransactionResponse / Issues 0..1 Issues Kontener rozwiązania co najmniej jednego problemu, który wystąpił podczas przetwarzania wiadomości dotyczącej transakcji.

Każda wiadomość zawiera element <Success> lub <Issues>.

TransactionResponse / Issues / Issue 1..n Issue Opis ostrzeżenia, błędu lub błędu napotkanych podczas przetwarzania wiadomości dotyczącej transakcji. Szczegółowe informacje o tych problemach znajdziesz w artykule 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 przetworzony komunikat dotyczący 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 dotyczący 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>