Materiały XML dotyczące cen i asortymentu sal (transakcje)

Na tej stronie znajdziesz informacje o komunikatach o transakcjach opartych na języku XML.

<Transaction>

Elementem głównym wiadomości dotyczącej transakcji jest <Transaction>. Jest to kontener zawierający opisowe informacje o pokojach i pakietach oraz cenach i dostępności pokoi i pakietów.

Element <Transaction> pojawia się w tym miejscu w hierarchii XML wiadomości dotyczących transakcji:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

Wiadomości, których elementem głównym jest <Transaction>, wymagają co najmniej 1 elementu podrzędnego. Wiadomości z transakcją mogą zawierać dowolną liczbę elementów podrzędnych, o ile łączny rozmiar wiadomości nie przekracza 100 MB.

Składnia

W elemencie <Transaction> używana jest taka składnia:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="timestamp" id="transaction_ID">

  <!-- Defines data about a room or package (Room Bundle) -->
  <PropertyDataSet>
    ...
  </PropertyDataSet>

  <!-- Updates/sets prices and availability for rooms and Room Bundles -->
  <!-- (Also removes itineraries from inventory) -->
  <Result>
    ...
  </Result>

</Transaction>

Atrybuty

Element <Transaction> ma te atrybuty:

Atrybut Wymagana? Typ Opis
id Required ciąg znaków Unikalny identyfikator każdej wiadomości dotyczącej transakcji.
partner Optional string Konto partnera, którego dotyczy wiadomość dotycząca transakcji. Zwykle używasz tej opcji, jeśli backend udostępnia pliki danych z cenami dla wielu kont partnerów. Wartość ciągu znaków to wartość „Klucz partnera” podana na stronie Ustawienia konta w Hotel Center.
timestamp Required DateTime

Moment wysłania wiadomości o transakcji.

Wszystkie wiadomości z sygnaturą czasową wysłane w ciągu ostatnich 24 godzin zostaną przetworzone, a pozostałe zostaną odrzucone.

Wiadomości są przetwarzane w kolejności timestamp, a nie w kolejności, w jakiej są odbierane. Na przykład aktualizacja ceny z sygnaturą czasową 2019-05-03 14:09:00, która jest otrzymana po wiadomości z sygnaturą czasową 2019-05-03 14:10:00, będzie nadal przetwarzana w kolejności, a używana będzie cena z wiadomości z sygnaturą czasową 2019-05-03 14:10:00.

Elementy potomne

Element <Transaction> zawiera te elementy podrzędne:

Element podrzędny Wymagana? Typ Opis
<PropertyDataSet> Optional* <PropertyDataSet>

Opisuje konkretne sale i pakiety pokoi. Zwykle używasz tego elementu w oddzielnej wiadomości dotyczącej transakcji do definiowania wspólnych wartości pakietów pokoi i zmniejszania rozmiaru wiadomości o transakcjach.

<Result> Optional* <Result>

Dane o cenach w planie podróży pokoju lub w elemencie <RoomBundle>, który określa pakiety pokoi i dodatkowe typy pokojów w usłudze. Elementu <Result> można też używać do usuwania planów podróży z zasobów reklamowych.

* Wymagane jest co najmniej 1 z tych właściwości: <PropertyDataSet> lub <Result>.

Przykłady

Dane dotyczące pokoju

Poniższy przykład pokazuje dane pokoju w wiadomości dotyczącej transakcji:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>5440OF</RoomID>
      <Name>
        <Text text="Single King Bed Room" language="en"/>
        <Text text="Simple Lit de Roi" language="fr"/>
      </Name>
      <Description>
        <Text text="One king bed with pillowtop mattresses, 300-thread-count linens,
          and down comforters (bedspreads). City view. 300 square feet. Desk with
          rolling chair. Multi-line phone with voice mail. Cable/satellite TV with
          complimentary HBO and pay movies." language="en"/>
        <Text text="Un très grand lit avec matelas à plateau-coussin, ..." language="fr"/>
      </Description>
      <PhotoURL>
        <Caption>
          <Text text="Bathroom View" language="en"/>
          <Text text="La salle de baines" language="fr"/>
        </Caption>
        <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
      <Capacity>4</Capacity>
    </RoomData>
  </PropertyDataSet>
</Transaction>

Informacje o cenach

Poniższy przykład pokazuje dane o cenach w komunikacie transakcji:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>060773</Property>
    <RoomID>RoomType101</RoomID>
    <PackageID>Package101</PackageID>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">278.33</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
    <AllowablePointsOfSale>
      <PointOfSale id="site1"/>
    </AllowablePointsOfSale>
  </Result>
  <Result>
    <Property>052213</Property>
    <RoomID>RoomType101</RoomID>
    <PackageID>Package101</PackageID>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">299.98</Baserate>
    <Tax currency="USD">26.42</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
    <AllowablePointsOfSale>
      <PointOfSale id="otto"/>
      <PointOfSale id="simon"/>
    </AllowablePointsOfSale>
  </Result>
</Transaction>

Ceny za noc

W tym przykładzie określono dane cenowe za okres od 1 do 7 nocy od 7 czerwca 2023 r.:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-08-24T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>1</Nights>
    <Baserate currency="USD">209.99</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">419.98</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>3</Nights>
    <Baserate currency="USD">614.97</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>4</Nights>
    <Baserate currency="USD">819.96</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>5</Nights>
    <Baserate currency="USD">999.95</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>6</Nights>
    <Baserate currency="USD">1193.94</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>7</Nights>
    <Baserate currency="USD">1259.93</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
</Transaction>


Ceny podstawowe i warunkowe

Poniższy przykład pokazuje komunikat dotyczący transakcji, który zawiera stawkę podstawową i cenę warunkową:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2023-04-10</Checkin>
    <Nights>1</Nights>

    <Baserate currency="USD">200.00</Baserate>
    <Tax currency="USD">20.00</Tax>
    <OtherFees currency="USD">1.00</OtherFees>

    <Rates>
      <!-- The rate_rule_id is required when using conditional rates -->
      <Rate rate_rule_id="mobile">
        <!-- Override base rate and taxes for conditional rates -->
        <Baserate currency="USD">180.00</Baserate>
        <Tax currency="USD">18.00</Tax>
        <!-- NOTE: OtherFees is inherited from the above setting -->
        <Custom1>ratecode123</Custom1>
      </Rate>
    </Rates>

  </Result>
</Transaction>

Usuwanie zasobów reklamowych

Ten przykład usuwa z asortymentu kilka zasobów reklamowych (pobyty na 1 noc w różnych terminach) w przypadku hotelu:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-05-23T16:20:00-04:00" id="42">
  <Result>
    <Property>1123581321</Property>
    <Checkin>2023-05-23</Checkin>
    <Nights>1</Nights>
    <Unavailable>
      <NoVacancy/>
    </Unavailable>
    <Tax currency="USD">0</Tax>
    <OtherFees currency="USD">0</OtherFees>
  </Result>
  <Result>
    <Property>1123581321</Property>
    <Checkin>2023-05-24</Checkin>
    <Nights>1</Nights>
    <Unavailable>
      <NoVacancy/>
    </Unavailable>
    <Tax currency="USD">0</Tax>
    <OtherFees currency="USD">0</OtherFees>
  </Result>
  <!---Sending <Baserate> is optional with <Unavailable> -->
  <Result>
    <Property>1123581321</Property>
    <Checkin>2023-05-25</Checkin>
    <Nights>1</Nights>
    <Baserate currency="USD">-1</Baserate>
    <Unavailable>
      <NoVacancy/>
    </Unavailable>
    <Tax currency="USD">0</Tax>
    <OtherFees currency="USD">0</OtherFees>
  </Result>
</Transaction>

<PropertyDataSet>

Kontener informacji o sali i pakiecie (lub pakiecie Pokoje) w wiadomości <Transaction>. Wartości ustawione w hotelu zastępują wartości ustawione na partnera. Google przechowuje te informacje, więc nie musisz ich definiować za każdym razem, gdy wysyłasz aktualizacje cen.

Element <PropertyDataSet> pojawia się w tym miejscu w hierarchii XML wiadomości dotyczących transakcji:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>  // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

Więcej informacji znajdziesz w artykule na temat metadanych pakietów sal.

Składnia

W elemencie <PropertyDataSet> używana jest taka składnia:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <PropertyDataSet>
    <!-- (Required) ID that matches the Hotel List Feed -->
    <Property>hotel_ID</Property>

    <!-- (Optional) Defines metadata about a room -->
    <RoomData>
      ...
    </RoomData>

    <!-- (Optional) Defines package metadata to be paired with rooms (Room Bundles) -->
    <PackageData>
      ...
    </PackageData>
  </PropertyDataSet>
  ...
</Transaction>

Atrybuty

Element <PropertyDataSet> nie ma atrybutów.

Elementy potomne

Element <PropertyDataSet> zawiera te elementy podrzędne:

Element podrzędny Wymagana? Typ Opis
<PackageData> Optional* <PackageData> Opisuje pakiet pokoi. Te dane są powiązane z partnerem i hotelem, ale nie z planem podróży. Ten element jest podobny do elementu <RoomData>, ale opisuje udogodnienia i warunki, które nie są częścią opisu pokoju fizycznego.

Wskazujesz identyfikator pakietu w aktualizacji cen.

Więcej informacji znajdziesz w opisie metadanych pakietów sal.

<Property> Required string Identyfikator hotelu, którego dotyczą powiązane dane. Wartość tego elementu musi być ciągiem znaków pasującym do wizytówki <id> w pliku danych z listą hoteli.
<RoomData> Optional* <RoomData> Opisuje pomieszczenie. Te dane są powiązane z partnerem i hotelem, ale nie z planem podróży.

Identyfikator pokoju podajesz w informacjach o cenach.

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

Przykłady

Dane dotyczące sal i pakietów

Ten przykład pokazuje dane dotyczące sal i pakietów w usłudze <PropertyDataSet>:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>180054</Property>
    <RoomData>
      <RoomID>060773</RoomID>
      <Name>
        <Text text="Single Bed Room" language="en"/>
        <Text text="Chambre single" language="fr"/>
      </Name>
      <Description>
        <Text text="Non-smoking" language="en"/>
        <Text text="Pas de fumiers" language="fr"/>
      </Description>
      <PhotoURL>
        <Caption>
          <Text text="Living area" language="en"/>
          <Text text="Le chambre" language="fr"/>
        </Caption>
        <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
    </RoomData>
    <PackageData>
      <PackageID>P54321</PackageID>
      <Name>
        <Text text="Breakfast Included" language="en"/>
        <Text text="Avec le petit déjeuner" language="fr"/>
      </Name>
      <Description>
        <Text text="Includes a delightful array of jams and jellies." language="en"/>
        <Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
      </Description>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Gdy wysyłasz informacje o cenach i dostępności tego pokoju i pakietu, w komunikatach o cenach odwołujesz się do identyfikatorów sal i pakietów. W efekcie rozmiar wiadomości jest mniejszy, a liczba błędów, które mogą wystąpić z powodu zduplikowanych danych. Więcej informacji znajdziesz w artykule Metadane pakietu sali (w języku angielskim).

<RoomData>

Określa niezależne od planu metadane dotyczące pokojów, a także pakiety pokoi (pakiety pokoi to pokoje z dodatkowymi udogodnieniami). Aby ograniczyć powtarzanie danych opisowych w pliku danych z cenami, użyj atrybutu <RoomData>.

Element <RoomData> pojawia się w tym miejscu w hierarchii XML wiadomości dotyczących transakcji:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

Elementy <RoomData> zawierają informacje powiązane z partnerem i hotelem, ale nie z planem podróży. Jego przeznaczeniem jest zbieranie wszystkich danych niezwiązanych z planem podróży.

Element <RoomData> jest podobny do elementu <PackageData>, ale opisuje miejsce fizyczne, a nie udogodnienia i warunki pakietu. Aby podać szczegółowe informacje o pakietach pokoi, użyj kombinacji atrybutów <RoomData> i <PackageData>. W przypadku pokoi, które nie są częścią pakietu, użyj tylko <RoomData>.

Możesz zdefiniować elementy <RoomData> i <PackageData> dla tego samego pokoju lub zestawu pokoi. Gdy Google wyświetla w wynikach wyszukiwania ten pokój lub pakiet, będzie zawierał opis z obu tych miejsc, oddzielony łącznikiem.

Więcej informacji znajdziesz w artykule na temat metadanych pakietów sal.

Składnia

W elemencie <RoomData> używana jest taka składnia:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <PropertyDataSet>
    ...
    <RoomData>
      <RoomID>room_ID</RoomID>

      <Name>
        <Text text="room_name" language="language_code"/>
        ...
      </Name>

      <Description>
        <Text text="room_description" language="language_code"/>
        ...
      </Description>

      <Capacity>max_number_of_occupants</Capacity>
      <Occupancy>max_number_of_intended_occupants</Occupancy>
      <OccupancyDetails> <!-- optional info about the types of guests,
      whether adults, children, or seniors --></OccupancyDetails>
      <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>
        ...
      </RoomFeatures>
    </RoomData>
    ...
  </PropertyDataSet>
</Transaction>

Atrybuty

Element <RoomData> nie ma atrybutów.

Elementy potomne

Element <RoomData> zawiera te elementy podrzędne:

Element podrzędny Wymagana? Typ Opis
<Capacity> Optional integer Maksymalna liczba gości, jaką pokój może fizycznie pomieścić. Pojemność sali jest równa liczbie osób lub od niej większa.

Jeśli określisz tę wartość, musi ona być równa lub większa od wartości elementu <Occupancy>, czyli docelowej liczby gości dla danej sali. Na przykład w dużym pakiecie wartość <Capacity> może wynosić 6, a <Occupancy> w jego przypadku to 4.

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

<Description> Optional Object szczegółowy opis pokoju, Ten element powinien zawierać informacje, które nie są opisywane w innych elementach ani w elemencie <Name>. W opisie pokoju nie używaj wielkich liter.

Element <Description> przyjmuje pojedynczy element podrzędny <Text>, który ma te 2 wymagane atrybuty:

  • text: szczegółowy opis pokoju.
  • language: dwuliterowy kod języka, np. fr.

Użyj osobnego elementu <Text> w przypadku każdego języka, w którym może się wyświetlać Twoja reklama lub bezpłatny link do rezerwacji (z różnymi wartościami atrybutów language).

Ten przykład pokazuje francuską i angielską wersję opisu pokoju:

<Description>
  <Text text="Two queen-sized beds" language="en"/>
  <Text text="Deux lits de la reine" language="fr"/>
</Description>
<Name> Required string Nazwa kategorii pokoju. Ta wartość powinna być zgodna z informacjami wyświetlanymi na stronie docelowej hotelu (dawniej punktu sprzedaży). Nie ustawiaj wartości tego elementu samymi wielkimi literami.

Ten element przyjmuje pojedynczy element podrzędny <Text>, który ma te 2 wymagane atrybuty:

  • text: nazwa pokoju.
  • language: dwuliterowy kod języka, np. fr.

Użyj osobnego elementu <Text> w przypadku każdego języka, w którym może się wyświetlać Twoja reklama lub bezpłatny link do rezerwacji (z różnymi wartościami atrybutów language).

Poniższy przykład zawiera francuską i angielską wersję nazwy sali:

<Name>
  <Text text="Standard Double Room" language="en"/>
  <Text text="Le chambre double" language="fr"/>
</Name>
<Occupancy> Optional integer Maksymalna liczba gości, dla której jest przeznaczona sala. Na przykład duży apartament może fizycznie pomieścić do 6 osób (liczba miejsc: 6), ale jest przeznaczony tylko dla 4 osób.

Ta wartość nie może być większa od wartości elementu <Capacity>, czyli liczby osób, które fizycznie mogą pomieścić do sali.

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

<Occupancy> może towarzyszyć obiektowi <OccupancyDetails>, które określa rodzaj gości (dorośli lub dzieci). Informacje o składni i opisach elementów podrzędnych znajdziesz w artykule <OccupancyDetails>.

<OccupancySettings> Optional Object 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 ustawiona wartość to 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.

<PhotoURL> Optional Object 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>. Każdy adres URL zdjęcia musi zawierać własny element <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ół (np. https://). Użyj tylko jednego typu <URL> na <PhotoURL>.
  • <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.

Przykład:

<PhotoURL>
  <URL>https://www.example.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>
<PhotoURL>
  <URL>https://www.foo.com/static/bar/image5678.jpg</URL>
  <Caption>
    <Text text="Or, perhaps you prefer coffee." language="en"/>
    <Text text="Ou peut-être préférez-vous le café." language="fr"/>
  </Caption>
</PhotoURL>
<RoomFeatures> Optional <RoomFeatures> Zawiera informacje o wyposażeniu pokoju.
<RoomID> Required string Unikalny identyfikator sali. Za pomocą tego identyfikatora możesz dopasować dane dotyczące sal do blokad <Result> w aktualizacji cen. Więcej informacji znajdziesz w artykule na temat metadanych pakietów sal. (Możesz też użyć tego identyfikatora, aby odwoływać się do definicji świetlicy w pojedynczej wiadomości dotyczącej transakcji, gdy definiować dane dotyczące pokoju w tekście).

Przykłady

Dane dotyczące pokoju

W podanym niżej przykładzie zdefiniowano dane pokoju:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <RoomData>
      <RoomID>5440OF</RoomID>
      <Name>
        <Text text="Single King Bed Room" language="en"/>
        <Text text="Simple Lit de Roi" language="fr"/>
      </Name>
      <Description>
        <Text text="One king bed with pillowtop mattresses, 300-thread-count linens,
          and down comforters (bedspreads). City view. 300 square feet. Desk with
          rolling chair. Multi-line phone with voice mail. Cable/satellite TV with
          complimentary HBO and pay movies." language="en"/>
        <Text text="Un très grand lit avec matelas à plateau-coussin, ..." language="fr"/>
      </Description>
      <PhotoURL>
        <Caption>
          <Text text="Bathroom View" language="en"/>
          <Text text="La salle de baines" language="fr"/>
        </Caption>
        <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
      <Capacity>4</Capacity>
    </RoomData>
  </PropertyDataSet>
</Transaction>

Metadane pokoju i pakietu

W podanym niżej przykładzie zdefiniowano metadane pokoju i pakietu:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>180054</Property>
    <RoomData>
      <RoomID>060773</RoomID>
      <Name>
        <Text text="Single Bed Room" language="en"/>
        <Text text="Chambre single" language="fr"/>
      </Name>
      <Description>
        <Text text="Non-smoking" language="en"/>
        <Text text="Pas de fumiers" language="fr"/>
      </Description>
      <PhotoURL>
        <Caption>
          <Text text="Living area" language="en"/>
          <Text text="Le chambre" language="fr"/>
        </Caption>
        <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
    </RoomData>
    <PackageData>
      <PackageID>P54321</PackageID>
      <Name>
        <Text text="Breakfast Included" language="en"/>
        <Text text="Avec le petit déjeuner" language="fr"/>
      </Name>
      <Description>
        <Text text="Includes a delightful array of jams and jellies." language="en"/>
        <Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
      </Description>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Pakiety z kilkoma salami

W tym przykładzie zdefiniowano metadane sal i pakietów dotyczące wielu pakietów pomieszczeń:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <!-- A transaction message with room types result. -->
  <PropertyDataSet>
    <Property>12345</Property>
    <RoomData>
      <RoomID>single</RoomID>
      <Name>
        <Text text="Single room" language="en"/>
        <Text text="Chambre simple" language="fr"/>
      </Name>
      <Description>
        <Text text="A single room" language="en"/>
        <Text text="Le chambre simple" language="fr"/>
      </Description>
      <PhotoURL>
        <Caption>
          <Text text="Living area" language="en"/>
          <Text text="Le chambre" language="fr"/>
        </Caption>
        <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
      <PhotoURL>
        <URL>http://www.foo.com/static/bar/image1235.jpg</URL>
      </PhotoURL>
      <Capacity>2</Capacity>
    </RoomData>
    <RoomData>
      <RoomID>double</RoomID>
      <Name>
        <Text text="Double room" language="en"/>
        <Text text="Chambre double" language="fr"/>
      </Name>
      <Occupancy>1</Occupancy>
    </RoomData>
    <PackageData>
      <PackageID>refundbreakfast</PackageID>
      <Name>
        <Text text="Refundable Room with Breakfast" language="en"/>
        <Text text="Chambre remboursable avec le petit déjeuner" language="fr"/>
      </Name>
      <Description>
        <Text text="Continental Breakfast" language="en"/>
        <Text text="Petit déjeuner continental" language="fr"/>
      </Description>
      <ChargeCurrency>hotel</ChargeCurrency>
      <Refundable available="1" refundable_until_days="3"/>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
    <PackageData>
      <PackageID>prepaid</PackageID>
      <Name>
        <Text text="Nonrefundable" language="en"/>
        <Text text="Non remboursable" language="fr"/>
      </Name>
      <Description>
        <Text text="Blah blah blad" language="en"/>
        <Text text="Le blah blah blad" language="fr"/>
      </Description>
      <Occupancy>2</Occupancy>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="0"/>
    </PackageData>
  </PropertyDataSet>
</Transaction>

<RoomFeatures>

Określa funkcje znalezione w pokoju.

Element <RoomFeatures> pojawia się w tym miejscu w hierarchii XML wiadomości dotyczących transakcji:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
            + <RoomFeatures>

Składnia

W elemencie <RoomFeatures> używana jest taka składnia:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <PropertyDataSet ... >
    ...
    <RoomData>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>[western|japanese|japanese_western]</JapaneseHotelRoomStyle>
        <Beds>
           <Bed size="[single|semi_double|double|queen|king]">
             <Width unit="cm" number="width"/>
             <Length unit="cm" number="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>
    ...
  </PropertyDataSet>
</Transactions>

Atrybuty

Element <RoomFeatures> nie ma atrybutów.

Elementy potomne

Element <RoomFeatures> zawiera te elementy podrzędne:

Element podrzędny Wymagana? Typ Opis
<JapaneseHotelRoomStyle> Optional 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.
<Beds> Optional Object Liczba elementów <Bed> w pokoju jest równa liczbie sal. Pamiętaj, że nie uwzględniamy tu japońskich futonów.

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 i 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>
<Suite> Optional empty Podaj ten element, jeśli pokój jest apartamentem.
<Capsule> Optional empty Podaj ten element, gdy ten pokój jest salą kapsułową.
<Roomsharing> Optional enum Czy pokój jest udostępniany innym osobom, takim jak właściciele lub inni goście. Prawidłowe wartości to shared i private.
<Outdoor> Optional empty 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.
<MobilityAccessible> Optional empty Dodaj ten element, gdy sala jest przystosowana dla osób z niepełnosprawnością ruchową.
<Smoking> Optional enum Określa, czy pokój jest przeznaczony dla niepalących czy dla palących. Prawidłowe wartości to non_smoking i smoking.
<BathAndToilet> Optional Object Zawiera informacje o łazienkach i toaletach w pokoju.

Atrybut to:

  • relation (opcjonalny): wskazuje, w jaki sposób wanna i toaleta są umieszczone względem siebie. Prawidłowe wartości to together (łazienka i toaleta są umieszczone w tym samym pomieszczeniu (np. łazienka) tuż obok) oraz separate (wanna i toaleta mają własne miejsce). Tego atrybutu nie należy ustawiać, jeśli w pokoju nie ma zarówno łazienki, jak i 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>
<OpenAirBath> Optional empty Dodaj ten element, jeśli w tym pokoju jest prywatna łazienka na świeżym powietrzu.
<AirConditioning> Optional empty Dodaj ten element, jeśli pokój jest klimatyzowany.
<Balcony> Optional empty Dodaj ten element, jeśli ten pokój ma balkon lub loża.
<Views> Optional 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/>

Przykłady

JapaneseHotelRoomStyle nie ma wartości domyślnej. Pominięcie wartości nie powoduje błędu XML, ale informacje o firmie nie wyświetlają 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 japońskiego 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 western 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 japanese_western pokojach, 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>

<PackageData>

Określa niezależne od planu metadane dotyczące pakietów pokojów danego obiektu. Ten element zawiera informacje powiązane z partnerem i hotelem, ale nie z planem podróży. Jego celem jest jednorazowe zdefiniowanie wszystkich danych niezwiązanych z trasą i odwołanie ich do danych dotyczących planu podróży.

Element <PackageData> pojawia się w tym miejscu w hierarchii XML wiadomości dotyczących transakcji:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

Element <PackageData> jest podobny do elementu <RoomData>, ale opisuje funkcje związane z cenami i hasła, które nie są częścią opisu fizycznego pomieszczenia. Stosując połączenia <RoomData> i <PackageData>, możesz podawać szczegółowe informacje o pakietach sal i funkcjach cen. W przypadku pokoi, które nie są częścią pakietu, użyj tylko <RoomData>.

Możesz zdefiniować elementy <RoomData> i <PackageData> dla tego samego pokoju lub pakietu. Gdy Google wyświetla w wynikach wyszukiwania ten pokój lub pakiet, będzie zawierał opis z obu tych miejsc, oddzielony łącznikiem.

Jeśli aktualizujesz pojedynczy element <PackageData> właściwości, musisz zaktualizować wszystkie jej elementy <PackageData> i <RoomData>. Każdy element <PropertyDataSet> jest traktowany jako wszystkie dane o usłudze i zastępuje wszystkie istniejące dane.

Więcej informacji znajdziesz w artykule na temat metadanych pakietów sal.

Składnia

W elemencie <PackageData> używana jest taka składnia:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <PropertyDataSet ... >
    <PackageData>
      <PackageID>package_ID</PackageID>
      <Name>
        <Text text="package_name" language="language_code"/>
        ...
      </Name>
      <Description>
        <Text text="package_description" language="language_code"/>
        ...
      </Description>
      <Refundable available="[false|true]" refundable_until_days="number_of_days"
        refundable_until_time="time"/>
      <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency>
      <Occupancy>max_number_of_intended_occupants</Occupancy>
      <OccupancyDetails><!-- optional info about the types of guests,
      whether adults or children --></OccupancyDetails>
      <!-- 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>
      <MembershipBenefitsIncluded>
        <ProgramName>
          <Text language="en" text="Special Rewards">
        </ProgramName>
        <ProgramLevel>
          <Text language="en" text="Platinum">
        </ProgramLevel>
      </MembershipBenefitsIncluded>
      <OnPropertyCredit>
        <Amount currency="USD">123.45</Amount>
      </OnPropertyCredit>
    </PackageData>
    <!-- a PackageID with a MilesIncluded rate feature -->
    <PackageData>
      <PackageID>room_with_miles</PackageID>
      <Name>
       <Text text="Room with Bundled Miles" language="en">
      </Name>
      <ChargeCurrency>hotel </ChargeCurrency>
      <MilesIncluded>
        <NumberOfMiles>1000 </NumberOfMiles>
        <Provider>
          <Text language="en" text="United Airlines">
        </Provider>
      </MilesIncluded>
    </PackageData>
    ...
    ...
  </PropertyDataSet>
  ...
</Transaction>

Atrybuty

Element <PackageData> nie ma atrybutów.

Elementy potomne

Element <PackageData> zawiera te elementy podrzędne:

Element podrzędny Wymagana? Typ Opis
<BreakfastIncluded> Optional boolean Określa, czy pakiet obejmuje śniadanie w cenie. Prawidłowe wartości to 0 (lub false) i 1 (lub true).

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

<ChargeCurrency> Optional enum Kiedy i gdzie użytkownik płaci za rezerwację. Ten element używa tej samej składni co <ChargeCurrency> w elemencie <Result>.

Wartością domyślną jest web.

<CheckinTime> Optional Time Najwcześniejsza możliwa godzina zameldowania. Czas musi być krótszy niż 24:00 czasu lokalnego hotelu.
<CheckoutTime> Optional Time Najpóźniejsza możliwa godzina wymeldowania według czasu lokalnego.
<Description> Optional Object Szczegółowy opis pakietu. Ten element powinien zawierać informacje, które nie są opisywane w innych elementach ani w elemencie <Name>. W opisie pokoju nie używaj wielkich liter.

Element <Description> przyjmuje pojedynczy element podrzędny <Text>, który ma 2 wymagane atrybuty: text i language. Atrybut text to opis, a atrybut language określa dwuliterowy kod języka, tak jak w tym przykładzie:

<Description>
  <Text text="Two breakfast buffet certificates for
    each night of stay." language="en"/>
  <Text text="Deux certificats petit-déjeuner buffet
    pour chaque nuit de séjour." language="fr"/>
</Description>
<InternetIncluded> Optional boolean Jeśli pakiet obejmuje bezpłatny dostęp do internetu, podczas gdy inne pakiety nie obejmują tego udogodnienia. Nie ustawiaj tego elementu w przypadku pakietów pokoi 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ścinnych. Prawidłowe wartości to 0 (lub false) i 1 (lub true).
<Meals> Optional 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/kolację w pokoju (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.

<Name> Required string Nazwa pakietu. Ta wartość powinna odpowiadać wartości wyświetlanej na stronie docelowej hotelu. Nie ustawiaj wartości tego elementu samymi wielkimi literami.

Ten element przyjmuje pojedynczy element podrzędny <Text>, który ma 2 atrybuty: text i language. Atrybut text to opis, a atrybut language określa dwuliterowy kod języka, jak pokazano w tym przykładzie:

<Name>
  <Text text="Bed and Breakfast" language="en"/>
  <Text text="Lit et petit déjeuné" language="fr"/>
</Name>
<Occupancy> Optional integer Maksymalna liczba gości, dla których jest przeznaczony pakiet pokoi. Na przykład duży apartament może fizycznie pomieścić do 6 osób, ale jest przeznaczony tylko dla maksymalnie 4 osób.

Ta wartość nie może być większa od wartości elementu <Capacity>, czyli liczby osób, które fizycznie mogą pomieścić do sali.

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

Jeśli określisz ten element zarówno w <RoomBundle>, jak i w <PackageData>, wartość w elemencie <RoomBundle> będzie miała pierwszeństwo.

Uwaga:

<Occupancy> może towarzyszyć obiektowi <OccupancyDetails>,które określa rodzaj gości (dorośli lub dzieci). Informacje o składni i opisach elementów podrzędnych znajdziesz w artykule <OccupancyDetails>.
<PackageID> Required string

Unikalny identyfikator pakietu. Użyj tego identyfikatora, aby dopasować dane pakietu sal do bloków <Result> w aktualizacji cen. Więcej informacji znajdziesz w opisie metadanych pakietów sal.

Możesz też użyć tego identyfikatora, by odwołać się do wspólnej definicji pakietu pokoi w jednej wiadomości dotyczącej transakcji, gdy zdefiniujesz wbudowane dane pakietu pokoju.

<ParkingIncluded> Optional boolean Określa, czy pakiet pokoi obejmuje bezpłatny parking, gdzie w innym przypadku usługa parkingowa w tym hotelu byłaby płatna. 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.

<PhotoURL> Optional Object (Tak samo jak <PhotoURL> w <RoomData>, ale w przypadku opakowania (np. zdjęć posiłków).)
<Refundable> Optional Object Umożliwia podanie ceny jako pełnej zwrotu środków lub jej bezpłatnej anulowania. Jeśli nie zostanie podany, nie wyświetlą się żadne informacje o zwrocie środków. Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result>. Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData>. Ceny podlegające zwrotom można też informować użytkowników za pomocą alternatywnych opcji bez bezpośredniego modyfikowania schematu wiadomości dotyczących transakcji. Dowiedz się więcej o tych opcjach Zasady dotyczące zwrotów środków.

Poniższy przykład pokazuje element <Refundable> ze wszystkimi zestawami atrybutów:

<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>

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. Są to:

  • available: (wymagane) ustaw wartość 1 lub true, aby wskazać, czy stawka umożliwia pełny zwrot środków. W przeciwnym razie ustaw wartość 0 lub false.
  • refundable_until_days: (wymagany, 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.
  • refundable_until_time: (zdecydowanie zalecane, jeśli wartość available to true) określa, do ostatniej godziny (według lokalnego czasu hotelu) 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.

    Wartość tego atrybutu ma format Time.

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.
<MembershipBenefits Included> Optional boolean Cena obejmuje korzyści, jakie zapewniają status elitarne, za czas pobytu. Zawiera te parametry:
  • ProgramName: nazwa programu statusu elitarnego
  • ProgramLevel: poziom programu. Na przykład: „Złoty”.
  • NightlyValue (optional): wartość korzyści za noc.
<CarRentalIncluded> Optional boolean W cenę pobytu wliczone jest bezpłatne wypożyczenie samochodu na czas pobytu.
<MilesIncluded>> Optional boolean Stawka obejmuje mile w programie lojalnościowym linii lotniczej. Dostępne parametry:
  • NumberofMiles: liczba mil na plan podróży.
  • Provider: Zapewniają one loty w milach, które często przelatują.
<OnPropertyCredit> Optional boolean Cena obejmuje środki do wykorzystania w miejscu zakwaterowania (hotel, ośrodek, spa itp.). Parametr:
  • Amount: wartość środków na dany plan podróży w walucie lokalnej.
<AirportTransportationIncluded> Optional Object W cenę wliczony jest transport między hotelem a pobliskim lotniskiem. Opcjonalny atrybut direction określa kierunkowość transportu. Prawidłowe wartości to:
    from: transport z lotniska do obiektu Jest to wartość domyślna, jeśli nie określono kierunku. to: zapewniany jest transport z obiektu na lotnisko. round_trip: zapewniany jest transport zarówno z lotniska, jak i z lotniska.

Przykłady

Pakiet 1 pokoju

Poniższy przykład określa zestaw 1 pokoi dla 2 osób (1 osoba dorosła i 1 dziecko) oraz obejmuje śniadanie:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>1234</Property>
    <PackageData>
      <Occupancy>2</Occupancy>
      <OccupancyDetails>
        <NumAdults>1</NumAdults>
        <Children>
          <Child age="17"/>
        </Children>
      </OccupancyDetails>
      <PackageID>P54321</PackageID>
      <Name>
         <Text text="Breakfast Included" language="en"/>
         <Text text="Avec le petit déjeuner" language="fr"/>
      </Name>
      <Description>
        <Text text="Two certificates for continental
          breakfast will be provided." language="en"/>
        <Text text="Deux certificats pour le petit déjeuner
          continental seront fournis." language="fr"/>
      </Description>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Metadane dotyczące pokoju i pakietu

W podanym niżej przykładzie zdefiniowano metadane pokoju i pakietu:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <PropertyDataSet>
    <Property>180054</Property>
    <RoomData>
      <RoomID>060773</RoomID>
      <Name>
        <Text text="Single Bed Room" language="en"/>
        <Text text="Chambre single" language="fr"/>
      </Name>
      <Description>
        <Text text="Non-smoking" language="en"/>
        <Text text="Pas de fumiers" language="fr"/>
      </Description>
      <PhotoURL>
        <Caption>
          <Text text="Living area" language="en"/>
          <Text text="Le chambre" language="fr"/>
        </Caption>
        <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
    </RoomData>
    <PackageData>
      <PackageID>P54321</PackageID>
      <Name>
        <Text text="Breakfast Included" language="en"/>
        <Text text="Avec le petit déjeuner" language="fr"/>
      </Name>
      <Description>
        <Text text="Includes a delightful array of jams and jellies." language="en"/>
        <Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
      </Description>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>
</Transaction>

Pakiety z kilkoma salami

W tym przykładzie zdefiniowano metadane sal i pakietów dotyczące wielu pakietów pomieszczeń:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <!-- A transaction message with room types result. -->
  <PropertyDataSet>
    <Property>12345</Property>
    <RoomData>
      <RoomID>single</RoomID>
      <Name>
        <Text text="Single room" language="en"/>
        <Text text="Chambre simple" language="fr"/>
      </Name>
      <Description>
        <Text text="A single room" language="en"/>
        <Text text="Le chambre simple" language="fr"/>
      </Description>
      <PhotoURL>
        <Caption>
          <Text text="Living area" language="en"/>
          <Text text="Le chambre" language="fr"/>
        </Caption>
        <URL>http://www.foo.com/static/bar/image1234.jpg</URL>
      </PhotoURL>
      <PhotoURL>
        <URL>http://www.foo.com/static/bar/image1235.jpg</URL>
      </PhotoURL>
      <Capacity>2</Capacity>
    </RoomData>
    <RoomData>
      <RoomID>double</RoomID>
      <Name>
        <Text text="Double room" language="en"/>
        <Text text="Chambre double" language="fr"/>
      </Name>
      <Occupancy>1</Occupancy>
    </RoomData>
    <PackageData>
      <PackageID>refundbreakfast</PackageID>
      <Name>
        <Text text="Refundable Room with Breakfast" language="en"/>
        <Text text="Chambre remboursable avec le petit déjeuner" language="fr"/>
      </Name>
      <Description>
        <Text text="Continental Breakfast" language="en"/>
        <Text text="Petit déjeuner continental" language="fr"/>
      </Description>
      <ChargeCurrency>hotel</ChargeCurrency>
      <Refundable available="1" refundable_until_days="3"/>
      <BreakfastIncluded>1</BreakfastIncluded>
    </PackageData>
    <PackageData>
      <PackageID>prepaid</PackageID>
      <Name>
        <Text text="Nonrefundable" language="en"/>
        <Text text="Non remboursable" language="fr"/>
      </Name>
      <Description>
        <Text text="Blah blah blad" language="en"/>
        <Text text="Le blah blah blad" language="fr"/>
      </Description>
      <Occupancy>2</Occupancy>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="0"/>
    </PackageData>
  </PropertyDataSet>
</Transaction>


Pakiet pokoi z cenami

Ten przykład określa metadane dotyczące pomieszczeń i pakietów w przypadku pakietu sal z funkcjami dotyczącymi cen:

<Transaction timestamp="2010-04-24T20:44:56-04:00" id="TXNID">
  <PropertyDataSet>
    <Property>12345</Property>
    <RoomData>
     ...
    </RoomData>
<!-- definitions of PackageData types including rate features -->
    <PackageData>
      <PackageID>room_with_addl_benefits</PackageID>
      <Name>
        <Text text="Acme Hotels 2017 Promotion Package" language="en"/>
      </Name>
      <ChargeCurrency>hotel</ChargeCurrency>
      <BreakfastIncluded>1</BreakfastIncluded>
      <MembershipBenefitsIncluded>
        <ProgramName>
          <Text language="en" text="Marriott Rewards"/>
        </ProgramName>
        <ProgramLevel>
          <Text language="en" text="Platinum"/>
        </ProgramLevel>
      </MembershipBenefitsIncluded>
      <OnPropertyCredit>
        <Amount currency="USD">123.45</Amount>
      </OnPropertyCredit>
    </PackageData>
    <PackageData>
      <PackageID>room_with_miles</PackageID>
      <Name>
        <Text text="Room with Bundled Miles" language="en"/>
      </Name>
      <ChargeCurrency>hotel</ChargeCurrency>
      <MilesIncluded>
        <NumberOfMiles>1000</NumberOfMiles>
        <Provider>
          <Text language="en" text="United Airlines"/>
        </Provider>
      </MilesIncluded>
      <AirportTransportationIncluded direction="from"/>
    </PackageData>
  </PropertyDataSet>

<!-- The actual list of prices -->
  <Result>
…
  </Result>
</Transaction>

Posiłki i zdjęcia

W tym przykładzie zdefiniowano metadane pokoju i pakietu dotyczące 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>

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

<Result>

Kontener do aktualizacji cen i dostępności w wiadomości <Transaction>.

Element <Result> pojawia się w tym miejscu w hierarchii XML wiadomości dotyczących transakcji:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

Użyj narzędzia <Result>, aby ustawić lub zaktualizować ceny pokoi oraz określić dostępne zasoby reklamowe. Elementy zdefiniowane w tym elemencie zwykle odwołują się do niezależnych metadanych sali lub pakietu (takich jak opis lub zestaw udogodnień) zdefiniowanych w atrybutach <PackageData> i <RoomData>.

Zwykle bardzo często wysyłasz wiadomości z informacjami o aktualizacji cen. Dokładna częstotliwość wykonywania tych czynności i częstotliwość ich wykonywania zależy od wybranego trybu wyświetlania.

Aby usunąć plany podróży, w wiadomości dotyczącej transakcji możesz użyć <Result> zgodnie z opisem w sekcji Usuwanie zasobów reklamowych. Więcej informacji o używaniu komunikatów dotyczących transakcji do aktualizowania cen i dostępności znajdziesz w artykule Dodawanie i aktualizowanie zasobów reklamowych.

Pojedyncza wiadomość dotycząca transakcji może zawierać dowolną liczbę elementów <Result>, ale jej rozmiar nie przekracza 100 MB.

Składnia

W elemencie <Result> używana jest taka składnia:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <Result>
    <!-- Required -->
    <Property>hotel_ID</Property>
    <!-- Required -->
    <Checkin>YYYY-MM-DD</Checkin>
    <!-- Required -->
    <Nights>number_of_nights</Nights>

    <Baserate currency="currency_code">price</Baserate>
    <!-- Only required when <Baserate> contains a real price -->
    <Tax currency="currency_code">tax_amount</Tax>
    <!-- Only required when <Baserate> contains a real price  -->
    <OtherFees currency="currency_code">fee_amount</OtherFees>
    <Refundable available="[false|true]" refundable_until_days="number_of_days"
      refundable_until_time="time"/>

    <RoomID>room_ID</RoomID>
    <PackageID>package_ID</PackageID>
    <ExpirationTime>expiration_time</ExpirationTime>
    <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency>

    <Occupancy>max_number_of_intended_occupants</Occupancy>
    <!-- For Baserate, occupancy value must be greater than or equal to 2.
         If a value is not provided for occupancy, it defaults to 2. -->
    <OccupancyDetails>occupancy_info</OccupancyDetails>

    <Rates>...</Rates>

    <RoomBundle>...</RoomBundle>

    <AllowablePointsOfSale>
      <PointOfSale id="landing_page_identifier"/>
      ...
    </AllowablePointsOfSale>

    <Custom[1-5]>custom_value</Custom[1-5]>
  </Result>
  ...
  </Transaction>

Atrybuty

Element <Result> ma te atrybuty:

Atrybut Wymagana? Typ Opis
mergeable Optional boolean Domyślnie nowe ceny dla określonej pary hotelu i planu podróży zastąpią wszelkie wcześniejsze (aktualne) ceny znajdujące się w pamięci podręcznej Google. Atrybut scalony pozwala przechowywać dodatkowe ceny w pamięci podręcznej Google bez usuwania informacji o poprzednich cenach. Zapytanie o cenę w czasie rzeczywistym z odpowiedziami na pytania kontekstowe zawsze będzie miało ten atrybut ustawiony na true (niezależnie od odpowiedzi na wiadomość dotyczącą transakcji).

Elementy potomne

Element <Result> zawiera te elementy podrzędne:

Element podrzędny Wymagana? Typ Opis
<AllowablePointsOfSale> Optional Object Co najmniej jedna strona docelowa, która kwalifikuje się do umieszczenia w przypadku danego hotelu. Strona docelowa to witryna, która może obsłużyć proces rezerwacji użytkownika. Aby wyraźnie uwzględnić określoną stronę docelową (i wykluczyć inne), dodaj w pliku stron docelowych co najmniej 1 element <AllowablePointsOfSale>, który pasuje do atrybutu id elementu <PointOfSale>.

Jeśli nie użyjesz tego elementu, wszystkie strony docelowe zdefiniowane w pliku stron docelowych zostaną uznane za kwalifikujące się do wykorzystania do rezerwacji pokoju. Więcej informacji znajdziesz w artykule o składni plików stron docelowych.

<Baserate> Optional float

Cena pokoju za pobyt. Wartość tego elementu powinna wyglądać tak:

  • W przypadku pokoju prywatnego ustaw najtańszą dostępną stawkę za 2 osoby.
  • W przypadku pokoju wspólnego pozostaw puste pole i wpisz <RoomBundle>.
  • Całkowita długość pobytu, a nie średnia cena za noc.

Gdy sala jest niedostępna w ramach planu podróży, należy pominąć właściwość <Baserate> lub ustawić wartość -1 oraz podać wartość <Unavailable> wraz ze wszystkimi znanymi przyczynami niedostępności.

Aby usunąć pakiet pokoi, postępuj zgodnie z instrukcjami w artykule Usuwanie pakietu pokoi.

Pole <Baserate> nie może zawierać cyfr grupujących, takich jak przecinek (,) czy kropka (.). Ułamki należy zawsze oddzielać kropką (.) jako znakiem dziesiętnym. Reprezentuj na przykład 1200,40 USD jako:

<Baserate currency="USD">1200.40</Baserate>

Element <Baserate> przyjmuje te atrybuty opcjonalne:

  • all_inclusive: wartość logiczna wskazująca, czy stawka zawiera podatki i opłaty. Ogólnie ustaw tę wartość na false w przypadku użytkowników w USA i Kanadzie oraz wartości atrybutów dla elementów <Tax> i <OtherFees>. Jeśli stosujesz ceny all inclusive, możesz nie kwalifikować się do wyświetlania w informacjach o produktach, jeśli ceny nie zawierają rozróżnienia podatków i opłat dla użytkowników w USA i Kanadzie.

    W przypadku wszystkich pozostałych użytkowników zwykle uwzględniasz podatki i opłaty w stawce podstawowej i ustawiasz wartość atrybutu all_inclusive na true. Więcej informacji znajdziesz w zasadach dotyczących podatków i opłat.

    Wartością domyślną jest false.

  • currency: trzyliterowy kod waluty. Na przykład USD w przypadku złotego.
<ChargeCurrency> Optional enum Kiedy i gdzie użytkownik płaci za rezerwację. Tego elementu można używać w wiadomości o transakcji w elemencie <Result> dotyczącym ceny hotelu lub bloku <PackageData> w przypadku pakietu pokoi.

Prawidłowe wartości to:

  • web: użytkownik jest obciążany online w momencie rezerwacji. jest to wartość domyślna Rzeczywista strona docelowa jest zdefiniowana w pliku strony docelowej, a jej waluta, lokalizacja, język i inne czynniki mogą mieć wpływ na jej skuteczność.
  • hotel: użytkownik jest obciążany opłatą podczas meldowania się w hotelu. Jeśli płatność musi być zawsze dokonywana w walucie hotelu, ustaw wartość <ChargeCurrency> na hotel. Waluta użytkownika nie ma wpływu na rzeczywistą stronę docelową.
  • deposit: użytkownik otrzymuje część opłaty natychmiast, a reszta jest obciążana później, zwykle po wymeldowaniu się z hotelu.
  • installments: użytkownik jest obciążany początkowym ułamkiem łącznej należnej sumy i powinien regularnie płacić ustalone saldo przez określony czas.

Wartością domyślną jest web.

<Checkin> Required Date Data zameldowania w planie podróży podana w formacie Data. Kombinacja elementów <Nights> i <Checkin> tworzy plan podróży.
<Custom[1‑5]> Optional string Określa pole niestandardowe, które może służyć do przekazywania dodatkowych danych powiązanych z hotelem. Możesz przekazać maksymalnie 5 wartości niestandardowych z tymi nazwami elementów:
  • <Custom1>
  • <Custom2>
  • <Custom3>
  • <Custom4>
  • <Custom5>

Elementy <Custom> umożliwiają przekazywanie dowolnych danych. Możesz np. podać w tym polu wartość, która zostanie następnie użyta w pliku stron docelowych do utworzenia niestandardowego adresu URL strony docelowej. Każde pole niestandardowe może zawierać maksymalnie 200 znaków. Więcej informacji znajdziesz w artykule o plikach stron docelowych .

Elementy <Custom> podane w elemencie <Rate> nie są dziedziczone do elementu <RoomBundle>. Atrybut <Custom> musisz zdefiniować oddzielnie w każdym elemencie <RoomBundle>.

<ExpirationTime> Optional DateTime Data i godzina, kiedy cena uznaje się za wygasła (minimum 3 godziny).

Nie zalecamy podawania sygnatur czasowych ważności, jeśli nie są one niezbędne dla struktury cen.

Google nie obsługuje cen, które straciły ważność, a każdy plan podróży, którego cena wygasła, będzie kwalifikować się do zapytania o ceny na żywo.

<Nights> Required integer Liczba nocy w planie podróży. Wartość elementu <Nights> musi być dodatnią liczbą całkowitą. Kombinacja właściwości <Nights> i <Checkin> tworzy plan podróży.
<OtherFees> Optional float Opłaty inne niż stawka podstawowa i podatki, które wpływają na ostateczną cenę pokoju. Element <OtherFees> przyjmuje 1 wymagany atrybut currency, który określa trzyliterowy kod waluty opłat. Na przykład: USD.

Element <OtherFees> jest wymagany, jeśli <Baserate> ma wartość większą niż 0.

<Occupancy> Optional integer Określa maksymalną liczbę osób. Jeśli element <Occupancy> należy do kategorii <Result>, musi zawierać wartość 2 lub większą. Obok <Occupancy> może towarzyszyć atrybut <OccupancyDetails>, który określa rodzaj gości (dorośli lub dzieci). Informacje o składni i opisie elementów podrzędnych znajdziesz w sekcji <OccupancyDetails>. Jeśli nie podano elementu <Occupancy>, zajętość jest domyślnie ustawiona na 2.

Uwaga: skontaktuj się z zespołem pomocy, aby włączyć funkcję przesyłania cen za obłożenie inne niż podwójne.

<PackageID> Optional string Unikalny identyfikator pakietu, który pozwala zmapować go na wstępnie zdefiniowane dane pakietu. Służy też do wypełniania zmiennej strony docelowej PACKAGE-ID. Więcej informacji znajdziesz w opisie metadanych pakietów sal.
<Property> Required string Identyfikator hotelu, na który mają wpływ powiązane dane (cena, plan podróży, pakiet pokoi lub metadane). Wartość tego elementu musi być ciągiem znaków. Wartość tego elementu musi odpowiadać wartości <id> określonej w pliku danych z listą hoteli.
<Rates> Optional <Rates> Kontener na co najmniej 1 blok <Rate>. Każdy obiekt <Rate> w regionie <Rates> określa inną cenę za pokój i plan podróży.

Używaj elementu <Rates> tylko wtedy, gdy podano kilka stawek za tę samą kombinację sali i planu podróży. Możesz na przykład zdefiniować wiele cen cen warunkowych, cen prywatnych lub cen warunkowych w pakietach pokoi.

<Refundable> Optional Object Umożliwia podanie ceny jako pełnej zwrotu środków lub jej bezpłatnej anulowania. Jeśli nie zostanie podany, nie wyświetlą się żadne informacje o zwrocie środków. Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result>. Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData>. Ceny podlegające zwrotom można też informować użytkowników za pomocą alternatywnych opcji bez bezpośredniego modyfikowania schematu wiadomości dotyczących transakcji. Dowiedz się więcej o zasadach dotyczących zwrotów środków.

Poniższy przykład pokazuje element <Refundable> ze wszystkimi zestawami atrybutów:

<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>

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. Są to:

  • available: (wymagana) ustaw wartość 1 (lub true), aby wskazać, czy stawka umożliwia pełny zwrot środków. W przeciwnym razie ustaw wartość 0 (lub false).
  • refundable_until_days: (wymagany, 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.
  • refundable_until_time: (zdecydowanie zalecane, jeśli wartość available to true) określa, do ostatniej godziny (według lokalnego czasu hotelu) 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.

    Wartość tego atrybutu ma format Time.

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.
<RoomBundle> Optional <RoomBundle> Kontener informacji na temat cennych fizycznych opisów pokoju, pakietów udogodnień i niektórych szczegółów dotyczących zasad zakupu dotyczących danego hotelu i planu podróży.

Ogólnie rzecz biorąc, ten element służy do określania cen pokoju podstawowego i różnych typów pokoi w tej samej usłudze. Opisy pakietów pokoi można definiować w tekście, ale informacje te należy definiować w osobnym komunikacie dotyczącym transakcji. Google będzie przechowywać metadane, aby umożliwić Ci odwoływanie się do nich, zamiast powtarzać je przy kolejnych zmianach cen.

<RoomID> Optional string Unikalny identyfikator sali do zmapowania na wstępnie zdefiniowane dane sali. Służy też do wypełniania zmiennej strony docelowej „PARTNER-ROOM-ID”. Więcej informacji znajdziesz w opisie metadanych pakietów sal.
<Tax> Optional float Podatki obliczane dla ostatecznej ceny pokoju. Element <Tax> przyjmuje 1 wymagany atrybut currency, który określa trzyliterowy kod waluty na potrzeby podatków. Na przykład: USD. Element <Tax> jest wymagany, jeśli <Baserate> ma wartość większą niż 0.
<Unavailable> Optional Object wskazuje, że planu podróży nie można zarezerwować. Pełni funkcję kontenera do podawania bardziej szczegółowych powodów, dla których plan podróży był niedostępny. Pod tagiem <Unavailable> może znajdować się co najmniej 1 z tych przyczyn niedostępności:
  • <NoVacancy/>: nie ma już dostępnych pokojów na 1 lub więcej nocy pobytu.
  • <MinNightStay value=N/>: plan podróży był niższy niż minimalna liczba noclegów w okresie pobytu, która wynosi N.
  • <MaxNightStay value=N/>: plan podróży obejmował maksymalną liczbę noclegów (N) w tym terminie.
  • <MinAdvancePurchase value=N/>: plan podróży był niższy niż minimalny okres rezerwacji z wyprzedzeniem wynoszący N w przypadku dat pobytu.
  • <MaxAdvancePurchase value=N/>: plan podróży przypadał powyżej maksymalnego okresu rezerwacji z wyprzedzeniem, który wynosi N w przypadku dat pobytu.
  • <ClosedToArrival/>: obiekt nie umożliwia zameldowania się w dniu rozpoczęcia podróży.
  • <ClosedToDeparture/>: obiekt nie umożliwia wymeldowania w dniu wylotu z planu podróży.
  • <PropertyClosed first_open="YYYY-MM-DD" first_closed="YYYY-MM-DD"/>: obiekt jest zamknięty na cały lub część pobytu. Zalecane atrybuty first_open i first_closed określają pierwsze daty przypadające odpowiednio w przypadku daty przyjazdu, w przypadku których obiekt jest otwarty lub zamknięty. W przypadku obiektu, który zamyka się po dacie przyjazdu, wartość first_open powinna być taka sama jak data przyjazdu, a first_closed to data zamknięcia. W przypadku obiektu, który jest zamknięty w dniu przyjazdu, wartość first_closed powinna być taka sama jak data przyjazdu, a first_opened to kolejna data otwarcia obiektu.
  • <NotFetched/>: cena planu podróży nie została podana przez źródła danych poniżej.
  • <InvalidProperty/>: nie rozpoznano żądanego identyfikatora usługi.
  • <InvalidOccupancy/>: żądana liczba osób nie jest obsługiwana przez usługę.
  • <PriceIssue/>: problem z ceną sprawił, że nie została ona wysłana.
  • <InternalError reason=""/>: wystąpił nieokreślony błąd. Opcjonalny atrybut przyczyny może zgłosić błąd w formie tekstu.
  • <OtherRestriction restriction=""/>: plan podróży był niedostępny ze względu na nieokreślone ograniczenie dotyczące rezerwacji. Opcjonalny atrybut ograniczenia umożliwia zgłoszenie ograniczenia w formie tekstowej.

Przykłady

Przykład z wieloma usługami

W tym przykładzie zdefiniowano 1 plan podróży i jej ceny dla 2 obiektów:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>060773</Property>
    <RoomID>RoomType101</RoomID>
    <PackageID>Package101</PackageID>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">278.33</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
    <AllowablePointsOfSale>
      <PointOfSale id="site1"/>
    </AllowablePointsOfSale>
  </Result>
  <Result>
    <Property>052213</Property>
    <RoomID>RoomType101</RoomID>
    <PackageID>Package101</PackageID>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">299.98</Baserate>
    <Tax currency="USD">26.42</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
    <AllowablePointsOfSale>
      <PointOfSale id="otto"/>
      <PointOfSale id="simon"/>
    </AllowablePointsOfSale>
  </Result>
</Transaction>

W tym przykładzie nie ma informacji o sali, takich jak opis, zdjęcie i podpis, nazwa sali i jej pojemność.

Te informacje możesz zdefiniować raz w osobnej wiadomości o transakcji przechowywanej przez Google. Możesz odwoływać się do niego podczas kolejnych aktualizacji cen i asortymentu. Więcej informacji znajdziesz w artykule na temat metadanych pakietów sal.

Przykład wiele stawek

Poniższy przykład pokazuje 1 plan podróży i jedną właściwość z wieloma stawkami dla różnych miejsc. Elementu <Rates> można używać do określania cen z wieloma stawkami dla określonej usługi. Ten przykład jest też przydatny w przypadku usług kwater wakacyjnych (VR):

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2021-01-13</Checkin>
    <Nights>9</Nights>
    <Baserate currency="USD">3196.1</Baserate>
    <Tax currency="USD">559.49</Tax>
    <OtherFees currency="USD">543.34</OtherFees>
    <Occupancy>2</Occupancy>
    <Rates>
      <Rate>
        <Baserate currency="USD">3196.1</Baserate>
        <Tax currency="USD">559.49</Tax>
        <OtherFees currency="USD">543.34</OtherFees>
        <Occupancy>1</Occupancy>
      </Rate>
      <Rate>
        <Baserate currency="USD">3196.1</Baserate>
        <Tax currency="USD">559.49</Tax>
        <OtherFees currency="USD">543.34</OtherFees>
        <Occupancy>3</Occupancy>
      </Rate>
      <Rate>
        <Baserate currency="USD">3196.1</Baserate>
        <Tax currency="USD">559.49</Tax>
        <OtherFees currency="USD">543.34</OtherFees>
        <Occupancy>4</Occupancy>
      </Rate>
      <Rate>
        <Baserate currency="USD">3196.1</Baserate>
        <Tax currency="USD">559.49</Tax>
        <OtherFees currency="USD">543.34</OtherFees>
        <Occupancy>5</Occupancy>
      </Rate>
      <Rate>
        <Baserate currency="USD">3196.1</Baserate>
        <Tax currency="USD">559.49</Tax>
        <OtherFees currency="USD">543.34</OtherFees>
        <Occupancy>6</Occupancy>
      </Rate>
    </Rates>
  </Result>
</Transaction>

Przykład niedostępny

Poniższy przykład pokazuje jeden plan podróży, którego dostępności nie udało się pobrać z kanałów podrzędnych: drugi jest poniżej minimalnej liczby noclegów i został już zarezerwowany na określone daty, oraz trzeci, którego obiekt jest zamknięty w dniu przyjazdu, ale otwiera się w trakcie pobytu:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>060773</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Unavailable>
      <NotFetched/>
    </Unavailable>
  </Result>
  <Result>
    <Property>073313</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Unavailable>
      <NoVacancy/>
      <MinNightStay value=3/>
    </Unavailable>
  </Result>
  <Result>
    <Property>052213</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>10</Nights>
    <Unavailable>
      <PropertyClosed first_open="2018-06-15" first_closed="2018-06-10"/>
    </Unavailable>
  </Result>
</Transaction>

<Rates>

Kontener na co najmniej 1 blok <Rate>. Każdy obiekt <Rate> w lokalizacji <Rates> określa inną cenę pokoju lub planu podróży.

Używaj elementu <Rates> tylko wtedy, gdy istnieje kilka cen dotyczących tej samej sali lub planu podróży. Możesz na przykład zdefiniować wiele stawek za ceny warunkowe, ceny prywatne lub ceny warunkowe w pakietach pokoi.

Element <Rates> pojawia się w tym miejscu w hierarchii XML wiadomości dotyczących transakcji:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>         // Pricing and availability
        + <Rates>
        + <RoomBundle> (Can also contain <Rates>)
        + ...

Wartości ustawione w elemencie <Rate> zastępują wartości związane z cenami w elemencie nadrzędnym <Result> lub <RoomBundle>. Jeśli nie są ustawione w elemencie <Rate>, dziedziczą wartość z elementu nadrzędnego. Do elementu <RoomBundle> jest dziedziczony tylko element <AllowablePointsofSale>.

Składnia

W elemencie <Rates> używana jest taka składnia:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <Result>
    <Rates>
      <Rate rate_rule_id="rate_rule_id">
        <Baserate currency="currency_code">price</Baserate>
        <Tax currency="currency_code">tax_amount</Tax>
        <OtherFees currency="currency_code">fee_amount</OtherFees>
        <ExpirationTime>expiration_time</ExpirationTime>
        <Refundable available="[false|true]" refundable_until_days="number_of_days"
        refundable_until_time="time"/>
        <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency>
        <AllowablePointsOfSale>
          <PointOfSale id="landing_page_identifier"/>
        </AllowablePointsOfSale>
        <Occupancy>max_number_of_intended_occupants</Occupancy>
        <OccupancyDetails> <!-- optional info about the types of guests,
      whether adults or children --></OccupancyDetails>
          ...
        <Custom[1-5]>custom_value</Custom[1-5]>
      </Rate>
      ...
    </Rates>
  </Result>
  ...
</Transaction>

Atrybuty

Element <Rates> ma te atrybuty:

Atrybut Wymagana? Opis
rate_rule_id Optional W przypadku cen warunkowych ten identyfikator odpowiada stawce określonej w pliku definicji reguły ceny. Limit znaków w tym polu to 40 znaków.

Elementy potomne

Element <Rates> zawiera te elementy podrzędne:

Element podrzędny Wymagana? Typ Opis
<AllowablePointsOfSale> Optional Object Co najmniej jedna strona docelowa, która kwalifikuje się do umieszczenia w przypadku danego hotelu. Ten element używa tej samej składni co <AllowablePointsOfSale> w elemencie <Result>.
<Baserate> Required float Cena pokoju za pobyt. Ten element używa tej samej składni co <Baserate> w elemencie <Result>.

Uwaga: nie można określić elementu podrzędnego <Baserate> w domenie <Rate> jako niedostępnego.

<ChargeCurrency> Optional enum Kiedy i gdzie użytkownik płaci za rezerwację. Ten element używa tej samej składni co <ChargeCurrency> w elemencie <Result>.
<Custom[1‑5]> Optional string Pola niestandardowe, których możesz używać do przekazywania na stronę docelową dodatkowych danych związanych z hotelem. Ten element używa tej samej składni co <Custom[1‑5]> w elemencie <Result>. Obowiązuje limit 200 znaków na każde pole niestandardowe. Więcej informacji znajdziesz w artykule o plikach stron docelowych.

Jeśli w elemencie <Result> znajdują się elementy <Custom>, nie są one dziedziczone w elemencie <RoomBundle> i należy je zdefiniować oddzielnie dla każdego elementu <RoomBundle>. W razie potrzeby można go też umieścić w elemencie <PackageData>.

<ExpirationTime> Optional DateTime Data i godzina, według których stawka została uznana za nieważną. Ten element używa tej samej składni co <ExpirationTime> w elemencie <Result>.
<Occupancy> Optional integer

Określa maksymalną liczbę osób. <Occupancy> może towarzyszyć obiektowi <OccupancyDetails>, które określa rodzaj gości (dorośli lub dzieci). Informacje o składni i opisie elementów podrzędnych znajdziesz w sekcji <OccupancyDetails>.

<OtherFees> Required float Opłaty inne niż stawka podstawowa i podatki, które wpływają na ostateczną cenę pokoju. Ten element używa tej samej składni co <OtherFees> w elemencie <Result>.
<Refundable> Optional Object Umożliwia podanie ceny jako pełnej zwrotu środków lub jej bezpłatnej anulowania. Jeśli nie zostanie podany, nie wyświetlą się żadne informacje o zwrocie środków. Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result>. Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData>. Ceny podlegające zwrotom można też informować użytkowników za pomocą alternatywnych opcji bez bezpośredniego modyfikowania schematu wiadomości dotyczących transakcji. Dowiedz się więcej o tych opcjach Zasady dotyczące zwrotów środków.

Poniższy przykład pokazuje element <Refundable> ze wszystkimi zestawami atrybutów:

<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>

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. Są to:

  • available: (wymagana) ustaw wartość 1 (lub true), aby wskazać, czy stawka umożliwia pełny zwrot środków. W przeciwnym razie ustaw wartość 0 (lub false).
  • refundable_until_days: (wymagany, 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.
  • refundable_until_time: (zdecydowanie zalecane, jeśli wartość available to true) określa, do ostatniej godziny (według lokalnego czasu hotelu) 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.

    Wartość tego atrybutu ma format Time.

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.
<Tax> Required float Podatki obliczane dla ostatecznej ceny pokoju. Ten element używa tej samej składni co <Tax> w <Result>.

Przykłady

Stawka podstawowa i cena warunkowa

Poniższy przykład pokazuje komunikat dotyczący transakcji, który zawiera stawkę podstawową i stawkę warunkową:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2023-04-10</Checkin>
    <Nights>1</Nights>

    <Baserate currency="USD">200.00</Baserate>
    <Tax currency="USD">20.00</Tax>
    <OtherFees currency="USD">1.00</OtherFees>

    <Rates>
      <!-- The rate_rule_id is required when using conditional rates -->
      <Rate rate_rule_id="mobile">
        <!-- Override base rate and taxes for conditional rates -->
        <Baserate currency="USD">180.00</Baserate>
        <Tax currency="USD">18.00</Tax>
        <!-- NOTE: OtherFees is inherited from the above setting -->
        <Custom1>ratecode123</Custom1>
      </Rate>
    </Rates>

  </Result>
</Transaction>

Wiele cen warunkowych

Poniższy przykład określa stawkę podstawową i wiele cen warunkowych w obrębie <RoomBundle>:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2023-04-10</Checkin>
    <Nights>2</Nights>
    <!-- When Google receives new room bundle information for an itinerary, all
    previous room bundle pricing is dropped from Google's cache. Thus, if you
    want to delete a specific room bundle from Google's cache, you may do so
    by simply not providing that specific room bundle in subsequent transaction
    messages. -->
    <RoomBundle>
     ...
      <!-- RoomID is required, PackageID is recommended. -->
      <RoomID>5</RoomID>
      <PackageID>ABC</PackageID>
      <!-- Baserate is required. -->
      <Baserate currency="USD">275.00</Baserate>
      <Tax currency="USD">27.50</Tax>
      <OtherFees currency="USD">2.00</OtherFees>

      <!-- RatePlanID is optional and represents the unique identifier for a
      room and package data combination. We strongly recommend using RatePlanID
      as a variable to build your dynamic landing page (formerly Point of Sale)
      URL. For details, see Using Variables and Conditions. -->
      <RatePlanID>5-ABC</RatePlanID>

      <!-- Occupancy is mandatory for RoomBundle elements. -->
      <!-- Elements below will get inherited to nested rate elements. -->
      <Occupancy>2</Occupancy>
      <OccupancyDetails>
        <NumAdults>2</NumAdults>
      </OccupancyDetails>
      <InternetIncluded>1</InternetIncluded>


      <!-- Rate rule "mobile" overrides chargeCurrency, "us_or_gb" doesn't. -->
      <ChargeCurrency>web</ChargeCurrency>
      <Custom1>ratebasic</Custom1>
      <!-- Neither rate overrides Custom2. -->
      <Custom2>ratebasic</Custom2>

      <Rates>
        <Rate rate_rule_id="mobile">
          <Baserate currency="USD">258.33</Baserate>
          <Tax currency="USD">25.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <!-- The value below overrides ChargeCurrency from roombundle. -->
          <ChargeCurrency>hotel</ChargeCurrency>
          <!-- The value below overrides Custom1 from roombundle. -->
          <Custom1>ratecode321</Custom1>
          <!-- Custom2 is inherited from roombundle. -->
        </Rate>
        <Rate rate_rule_id="us_or_gb">
          <Baserate currency="USD">268.33</Baserate>
          <Tax currency="USD">26.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <!-- The value below overrides Custom1 from roombundle. -->
          <Custom1>ratecode432</Custom1>
          <!-- Custom2 is inherited from roombundle. -->
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>

<RoomBundle>

Określa ceny i dostępność pakietów pokoi jako elementów podrzędnych <Result> w wiadomości <Transaction>. Zdefiniuj osobny element dla każdej kombinacji pakietu lub planu podróży. Aby zdefiniować pakiet i warunki pakietów sal, użyj funkcji <RoomData>.

Element <RoomBundle> pojawia się w tym miejscu w hierarchii XML wiadomości dotyczących transakcji:

+ <Transaction>
    + <PropertyDataSet>  // Room and package metadata
        + <Property>
        + <RoomData>
        + <PackageData>
    + <Result>           // Pricing and availability
        + <Rates>
        + <RoomBundle>
        + ...

Więcej informacji znajdziesz w artykule Korzystanie z pakietów sal.

Składnia

W elemencie <RoomBundle> używana jest taka składnia:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <Result>
    ...
    <RoomBundle>
      <!-- Required unless specified inline under <RoomData> -->
      <RoomID>room_ID</RoomID>
      <!-- Required  <PackageData> -->
      <PackageID>package_ID</PackageID>

      <!-- Required -->
      <Baserate currency="currency_code">price</Baserate>
      <!-- Required -->
      <Tax currency="currency_code">taxes</Tax>
      <!-- Required -->
      <OtherFees currency="currency_code">other_fees</OtherFees>

      <Refundable available="[false|true]" refundable_until_days="number_of_days"
        refundable_until_time="time"/>
      <!-- Required -->
      <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency>
      <Occupancy>max_number_of_intended_occupants</Occupancy>
      <OccupancyDetails> <!-- optional info about the types of guests,
      whether adults or children --></OccupancyDetails>

      <BreakfastIncluded>boolean_value</BreakfastIncluded>
      <InternetIncluded>boolean_value</InternetIncluded>
      <ParkingIncluded>boolean_value</ParkingIncluded>

      <RatePlanID>rate_plan_ID</RatePlanID>

      <Rates>...</Rates>

      <Custom1>custom_value_1</Custom1>
      <Custom2>custom_value_2</Custom2>
      <Custom3>custom_value_3</Custom3>
      <Custom4>custom_value_4</Custom4>
      <Custom5>custom_value_5</Custom5>
    </RoomBundle>
    ...
  </Result>
</Transaction>

Atrybuty

Element <RoomBundle> nie ma atrybutów.

Elementy potomne

Element <RoomBundle> zawiera te elementy podrzędne:

Element podrzędny Wymagana? Typ Opis
<Baserate> Required float Określa cenę pakietu pokoi za pobyt. Ten element używa tej samej składni co <Baserate> w elemencie <Result>, z tym wyjątkiem:
  • Jeśli sala jest niedostępna w przypadku danego planu podróży, usuń element <RoomBundle>, by wskazać, że nie ma już w magazynie. Więcej informacji znajdziesz w artykule o usuwaniu pakietu pokoi.
<BreakfastIncluded> Optional boolean Określa, czy pakiet obejmuje śniadanie w cenie.
<ChargeCurrency> Optional enum Kiedy i gdzie użytkownik płaci za rezerwację. Ten element używa tej samej składni co <ChargeCurrency> w elemencie <Result>.

Wartością domyślną jest web.

<Custom[1‑5]> Optional string Pola niestandardowe do przekazywania dodatkowych danych do stron docelowych pakietu pokoi. Użyj tej samej składni co <Custom[1-5]> w elemencie <Result>. Obowiązuje limit 200 znaków na każde pole niestandardowe. Więcej informacji znajdziesz w artykule o plikach stron docelowych.

Jeśli w elemencie <Result> znajdują się elementy <Custom>, nie są one dziedziczone w elemencie <RoomBundle> i należy je zdefiniować oddzielnie dla każdego elementu <RoomBundle>. W razie potrzeby można go też umieścić w elemencie <PackageData>.

<InternetIncluded> Optional boolean Pakiet pokoi obejmuje bezpłatny dostęp do internetu, a inne pakiety nie obejmują tego udogodnienia. Nie ustawiaj tego elementu w przypadku pakietów pokoi 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ścinnych.
<Occupancy> Required integer Maksymalna liczba gości, dla których przeznaczony jest pakiet pokoi. Na przykład duży apartament może fizycznie pomieścić 6 osób, ale „pakiet poślubny” jest przeznaczony tylko dla 2 osób.

Ta wartość nie może być większa niż <Capacity>, czyli liczba osób, które mogą pomieścić do sali.

Do określania obłożenia w adresie URL strony docelowej użyj zmiennych NUM-ADULTS i NUM-CHILDREN zgodnie z opisem w sekcji Używanie zmiennych i warunków. Wartość domyślna to 2 dorosłych i 0 dzieci.

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

Uwagi:

  • Zdecydowanie zalecany jest atrybut <Occupancy> dla parametru <RoomBundle>, dlatego został oznaczony jako wymagany. Jego pominięcie spowoduje zgłoszenie błędu 1097.
  • <Occupancy> pochodzi z obiektu danych w tej kolejności: <RoomBundle>, <PackageData>, a następnie = <RoomData>. Jeśli żadna z tych opcji nie zawiera żadnej wartości, przyjmuje się wartość domyślną 2.
  • <Occupancy> może towarzyszyć obiektowi <OccupancyDetails>, które określa rodzaj gości (dorośli lub dzieci). Informacje o składni i opisie elementów podrzędnych znajdziesz na stronie <OccupancyDetails>.
  • Jeśli ustawisz <Occupancy> zarówno w <RoomBundle>, jak i <PackageData>, wartość w <RoomBundle> będzie miała pierwszeństwo.
<OtherFees> Required float Opłaty inne niż stawka podstawowa i podatki, które wpływają na ostateczną cenę pokoju. Element <OtherFees> przyjmuje 1 wymagany atrybut currency, który określa trzyliterowy kod waluty opłat. Na przykład USD w przypadku złotego.
<PackageID> Optional (recommended) string Unikalny identyfikator danych pakietu. Za pomocą tego identyfikatora możesz dopasować dane pakietu pokoi do danych wysłanych w <PackageData>. Więcej informacji znajdziesz w opisie metadanych pakietów sal. Możesz też użyć tego identyfikatora, by odwołać się do wspólnej definicji pakietu pokoi w jednej wiadomości dotyczącej transakcji, gdy zdefiniujesz wbudowane dane pakietu pokoju.
<ParkingIncluded> Optional boolean Określa, czy pakiet pokoi obejmuje bezpłatny parking, gdzie w innym przypadku usługa parkingowa w tym hotelu byłaby płatna. 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.

<RatePlanID> Optional string Identyfikator abonamentu to unikalny identyfikator kombinacji pokoju i pakietu. Na przykład jeśli <RoomID> ma wartość 5, a <PackageID> wartość ABC, możesz użyć wartości 5-ABC dla <RatePlanID>. Zdecydowanie zalecamy korzystanie ze zmiennej RatePlanID jako zmiennej przy tworzeniu adresu URL dynamicznej strony docelowej (wcześniej punktu sprzedaży).

Więcej informacji znajdziesz w artykule o używaniu zmiennych i warunków.

<Rates> Optional <Rates> Stawki, które zastępują wartości domyślne w tym pakiecie pokoi. Ten element używa takiej samej składni jak <Rates> w elemencie <Result>.
<Refundable> Optional Object Umożliwia podanie ceny jako pełnej zwrotu środków lub jej bezpłatnej anulowania. Jeśli nie zostanie podany, nie wyświetlą się żadne informacje o zwrocie środków. Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result>. Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData>. Ceny podlegające zwrotom można też informować użytkowników za pomocą alternatywnych opcji bez bezpośredniego modyfikowania schematu wiadomości dotyczących transakcji. Dowiedz się więcej o tych opcjach Zasady dotyczące zwrotów środków.

Poniższy przykład pokazuje element <Refundable> ze wszystkimi zestawami atrybutów:

<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>

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. Są to:

  • available: (wymagana) ustaw wartość 1 (lub true), aby wskazać, czy stawka umożliwia pełny zwrot środków. W przeciwnym razie ustaw wartość 0 (lub false).
  • refundable_until_days: (wymagany, 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.
  • refundable_until_time: (zdecydowanie zalecane, jeśli wartość available to true) określa, do ostatniej godziny (według lokalnego czasu hotelu) 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.

    Wartość tego atrybutu ma format Time.

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.
<RoomID> Required string Unikalny identyfikator danych pokoju. Za pomocą tego identyfikatora możesz dopasować dane pakietu pokoi do danych wysłanych w <RoomData>. Więcej informacji znajdziesz w artykule o metadanych pakietu pokoju. (Tego identyfikatora możesz też użyć, aby odwoływać się do definicji świetlicy w pojedynczej wiadomości dotyczącej transakcji, gdy zdefiniujesz źródło danych pokoju).
<Tax> Required float Podatki obliczane dla ostatecznej ceny pokoju. Element <Tax> przyjmuje 1 wymagany atrybut currency, który określa trzyliterowy kod waluty na potrzeby podatków. Na przykład USD w przypadku złotego.

Przykłady

Pakiet dla 1 osoby

Poniższy przykład zawiera odpowiedź z pojedynczym pakietem zajętości. Gdy użytkownik wybierze w selektorze obłożenia nazwę 1, Google wyświetli najniższą kwalifikującą się cenę niezależnie od liczby osób.

Jeśli cena za 1 osobę nie jest dostępna, Google wyświetli najniższą cenę za 2 osoby. Pamiętaj, że zapytania na żywo za 1 osobę nie są wyświetlane w odpowiedzi na zapytania, jeśli pobyt w przypadku podwójnych lub dodatkowych cen dotyczących planu podróży jest przechowywany w pamięci podręcznej.

W tym przykładzie odwołuje się do wstępnie zdefiniowanych metadanych sal i pakietów za pomocą elementów <RoomID> i <PackageID>. Aby określić te informacje, użyj elementów <RoomData> i <PackageData>.

<!-- Efficient method of defining Room Bundles-->
<!----- Occupancy of 1 example ----->

<Transaction timestamp="2017-07-18T16:20:00-04:00" id="12345678">
  <!-- Part1: Define RoomData and PackageData in PropertyDataSet -->
  <!-- Note:  Once defined it does not have to be repeated for future
              Transaction Messages.
              PropertyDataSets can also be defined and sent in their own
              Transaction Message separately from pricing. Google can be
              configured to pull just PropertyDataSets once per day
              (or on a predefined frequency). -->
  <PropertyDataSet>
    <Property>180054</Property>
    <!-- Can be reused by multiple Room Bundles -->
    <RoomData>
      <RoomID>060773</RoomID>
      <Name>
        <Text text="Single Queen Room - Non-Smoking" language="en"/>
        <Text text="Chambre de la Roi Premium - Pas de Fumeurs" language="fr"/>
      </Name>
      <!-- Room can accommodate up to 4, but package data specifies occupancy
           between 1 to 4 -->
      <Capacity>4</Capacity>
    </RoomData>
    <RoomData>
      <RoomID>436233</RoomID>
      <Name>
        <Text text="Premium King Room - Non-Smoking" language="en"/>
        <Text text="Chambre de le Roi Premium - Pas de Fumeurs" language="fr"/>
      </Name>
      <Capacity>4</Capacity>
    </RoomData>
    <!-- Can be reused by multiple Room Bundles -->
    <PackageData>
      <PackageID>P11111</PackageID>
      <Occupancy>1</Occupancy>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="1" refundable_until_days="7"
           refundable_until_time="18:00:00"/>
      <ParkingIncluded>1</ParkingIncluded>
      <InternetIncluded>1</InternetIncluded>
    </PackageData>
    <PackageData>
      <PackageID>P54321</PackageID>
      <Occupancy>2</Occupancy>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="1" refundable_until_days="7"
           refundable_until_time="18:00:00"/>
      <ParkingIncluded>1</ParkingIncluded>
      <InternetIncluded>1</InternetIncluded>
    </PackageData>
    <PackageData>
      <PackageID>P12345</PackageID>
      <Occupancy>4</Occupancy>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="1" refundable_until_days="1"
           refundable_until_time="18:00:00"/>
      <ParkingIncluded>1</ParkingIncluded>
      <InternetIncluded>1</InternetIncluded>
    </PackageData>
  </PropertyDataSet>

    <!-- Efficient method of defining Room Bundles -->
    <!-- Part 2: Reference RoomData and PackageData through ID -->
  <Result>
    <!-- Single occupancy pricing will be specified in a room bundle below -->
    <Property>180054</Property>
    <Checkin>2017-10-07</Checkin>
    <Nights>2</Nights>
    <!-- Base Room Bundle -->
    <RoomBundle>
      <RoomID>060773</RoomID>
      <PackageID>P54321</PackageID>
      <Baserate currency="USD">199.99</Baserate>
      <Tax currency="USD">25.12</Tax>
      <OtherFees currency="USD">2.00</OtherFees>
      <RatePlanID>060773-P54321</RatePlanID>
    </RoomBundle>
    <RoomBundle>
      <RoomID>060773</RoomID>
      <PackageID>P11111</PackageID>
      <!-- Price for 1 ("occupancy") is the lowest price and will be
           displayed -->
      <Baserate currency="USD">174.99</Baserate>
      <Tax currency="USD">22.08</Tax>
      <OtherFees currency="USD">2.00</OtherFees>
      <RatePlanID>060773-P11111</RatePlanID>
    </RoomBundle>
    <!-- Premium Room Bundle -->
    <RoomBundle>
      <RoomID>436233</RoomID>
      <PackageID>P12345</PackageID>
      <!-- Price for 4 ("occupancy"), any eligible room bundle with 1 or more
           occupancy will be displayed-->
      <Baserate currency="USD">298.88</Baserate>
      <Tax currency="USD">42.12</Tax>
      <OtherFees currency="USD">10.00</OtherFees>
      <RatePlanID>436233-P12345</RatePlanID>
    </RoomBundle>
    <!-- ..Continue providing all available RoomBundle rates under matched
         property for 1 or more occupancies..-->
  </Result>
</Transaction>


Co najmniej 2 osoby

Poniższy przykład definiuje odpowiedź zawierającą co najmniej 2 zajęcia.

W tym przykładzie odwołuje się do wstępnie zdefiniowanych metadanych sal i pakietów za pomocą elementów <RoomID> i <PackageID>. Aby określić te informacje, użyj elementów <RoomData> i <PackageData>.

<!-- Efficient method of defining Room Bundles-->
<!----- Occupancy of 3 example ----->

<Transaction timestamp="2017-07-18T16:20:00-04:00" id="12345678">
  <!-- Efficient method of defining Room Bundles-->
  <!-- Part1: Define RoomData and PackageData in PropertyDataSet -->
  <PropertyDataSet>
    <Property>180054</Property>
    <!-- Can be reused by multiple Room Bundles -->
    <RoomData>
      <RoomID>060773</RoomID>
      <Name>
        <Text text="Single Queen Room - Non-Smoking" language="en"/>
        <Text text="Chambre de la Roi Premium - Pas de Fumeurs" language="fr"/>
      </Name>
      <!-- Room can accommodate up to 4, but package data specifies occupancy
           between 1 to 4 -->
      <Capacity>4</Capacity>
    </RoomData>
    <RoomData>
      <RoomID>436233</RoomID>
      <Name>
        <Text text="Premium King Room - Non-Smoking" language="en"/>
        <Text text="Chambre de le Roi Premium - Pas de Fumeurs" language="fr"/>
      </Name>
      <Capacity>4</Capacity>
    </RoomData>
    <!-- Can be reused by multiple Room Bundles -->
    <PackageData>
      <PackageID>P33333</PackageID>
      <Occupancy>3</Occupancy>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="1" refundable_until_days="7"
           refundable_until_time="18:00:00"/>
      <ParkingIncluded>1</ParkingIncluded>
      <InternetIncluded>1</InternetIncluded>
    </PackageData>
    <PackageData>
      <PackageID>P12345</PackageID>
      <Occupancy>4</Occupancy>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="1" refundable_until_days="1"
           refundable_until_time="18:00:00"/>
      <ParkingIncluded>1</ParkingIncluded>
      <InternetIncluded>1</InternetIncluded>
    </PackageData>
  </PropertyDataSet>

  <Result>
    <Property>180054</Property>
    <Checkin>2017-10-07</Checkin>
    <Nights>2</Nights>
    <!-- Efficient method of defining Room Bundles -->
    <!-- Part 2: Reference RoomData and PackageData through ID -->
    <!-- Base Room Bundle -->
    <RoomBundle>
      <!-- Baserate above and attributes must match atleast one room bundle
           below -->
      <RoomID>060773</RoomID>
      <PackageID>P33333</PackageID>
      <Baserate currency="USD">499.99</Baserate>
      <Tax currency="USD">55.12</Tax>
      <OtherFees currency="USD">22.00</OtherFees>
    </RoomBundle>
    <!-- Premium Room Bundle -->
    <RoomBundle>
      <RoomID>436233</RoomID>
      <PackageID>P12345</PackageID>
      <!-- Lowest price for 3 ("occupancy"), shown below, will be displayed -->
      <Baserate currency="USD">598.88</Baserate>
      <Tax currency="USD">62.12</Tax>
      <OtherFees currency="USD">30.00</OtherFees>
    </RoomBundle>
    <!-- ..Continue providing all available RoomBundle rates under matched
         property for 2 or more occupancies..-->
  </Result>
</Transaction>


Pakiety z kilkoma salami

Poniższy przykład określa liczbę obłożenia w wielu pakietach sal, aby zademonstrować możliwe ceny pokoi w hostelach.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <Result>
    ...
    <!-- Suite Room Bundle -->
    <RoomBundle>
      <RoomID>suite1</RoomID>
      <PackageID>standard</PackageID>
      <Occupancy>2</Occupancy>
      <!-- Price for room -->
      <Baserate currency="USD">80.00</Baserate>
      <Tax currency="USD">5.12</Tax>
      <OtherFees currency="USD">2.00</OtherFees>
      <RoomData>
        <Name>
          <Text text="Suite for 2" language="en"/>
        </Name>
      </RoomData>
    </RoomBundle>

    <!-- Small Dorm Room Bundle -->
    <RoomBundle>
      <RoomID>small_dorm</RoomID>
      <PackageID>economy</PackageID>
      <Occupancy>1</Occupancy>
      <!-- Price per bed -->
      <Baserate currency="USD">35.00</Baserate>
      <Tax currency="USD">3.50</Tax>
      <OtherFees currency="USD">2.00</OtherFees>
      <RoomData>
        <Name>
          <Text text="1 bed in small dorm" language="en"/>
        </Name>
      </RoomData>
    </RoomBundle>

    <!-- Large Dorm Room Bundle -->
    <RoomBundle>
      <RoomID>large_dorm</RoomID>
      <PackageID>economy</PackageID>
      <Occupancy>1</Occupancy>
      <!-- Price per bed -->
      <Baserate currency="USD">20.00</Baserate>
      <Tax currency="USD">2.50</Tax>
      <OtherFees currency="USD">2.00</OtherFees>
      <RoomData>
        <Name>
          <Text text="1 bed in large dorm" language="en"/>
        </Name>
      </RoomData>
    </RoomBundle>
    ...
  </Result>
</Transaction>

Wiele cen warunkowych

Poniższy przykład określa stawkę podstawową i wiele cen warunkowych w obrębie <RoomBundle>:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2023-04-10</Checkin>
    <Nights>2</Nights>
    <!-- When Google receives new room bundle information for an itinerary, all
    previous room bundle pricing is dropped from Google's cache. Thus, if you
    want to delete a specific room bundle from Google's cache, you may do so
    by simply not providing that specific room bundle in subsequent transaction
    messages. -->
    <RoomBundle>
     ...
      <!-- RoomID is required, PackageID is recommended. -->
      <RoomID>5</RoomID>
      <PackageID>ABC</PackageID>
      <!-- Baserate is required. -->
      <Baserate currency="USD">275.00</Baserate>
      <Tax currency="USD">27.50</Tax>
      <OtherFees currency="USD">2.00</OtherFees>

      <!-- RatePlanID is optional and represents the unique identifier for a
      room and package data combination. We strongly recommend using RatePlanID
      as a variable to build your dynamic landing page (formerly Point of Sale)
      URL. For details, see Using Variables and Conditions. -->
      <RatePlanID>5-ABC</RatePlanID>

      <!-- Occupancy is mandatory for RoomBundle elements. -->
      <!-- Elements below will get inherited to nested rate elements. -->
      <Occupancy>2</Occupancy>
      <OccupancyDetails>
        <NumAdults>2</NumAdults>
      </OccupancyDetails>
      <InternetIncluded>1</InternetIncluded>


      <!-- Rate rule "mobile" overrides chargeCurrency, "us_or_gb" doesn't. -->
      <ChargeCurrency>web</ChargeCurrency>
      <Custom1>ratebasic</Custom1>
      <!-- Neither rate overrides Custom2. -->
      <Custom2>ratebasic</Custom2>

      <Rates>
        <Rate rate_rule_id="mobile">
          <Baserate currency="USD">258.33</Baserate>
          <Tax currency="USD">25.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <!-- The value below overrides ChargeCurrency from roombundle. -->
          <ChargeCurrency>hotel</ChargeCurrency>
          <!-- The value below overrides Custom1 from roombundle. -->
          <Custom1>ratecode321</Custom1>
          <!-- Custom2 is inherited from roombundle. -->
        </Rate>
        <Rate rate_rule_id="us_or_gb">
          <Baserate currency="USD">268.33</Baserate>
          <Tax currency="USD">26.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <!-- The value below overrides Custom1 from roombundle. -->
          <Custom1>ratecode432</Custom1>
          <!-- Custom2 is inherited from roombundle. -->
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>

<OccupancyDetails>

<Occupancy> w wiadomości o transakcji określa maksymalną liczbę gości na pokój lub pakiet. <OccupancyDetails> może zawierać dodatkowe informacje, takie jak liczba i rodzaj gości (osoby dorosłe lub dzieci).

Gdy <Occupancy> i <OccupancyDetails> pojawiają się w elemencie <Rates> w elemencie <Result> lub <RoomBundle>, oznacza to, że częstotliwość jest ograniczona przez szczegółowe informacje o obłożeniu.

Składnia

Gdy występuje <OccupancyDetails>, jest zawsze poprzedzony ciągiem <Occupancy>. Zwróć uwagę na tę składnię:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <Result>
  ...
    <Occupancy>max_number_of_intended_occupants</Occupancy>
    <OccupancyDetails>
      <NumAdults>number_of_adults</NumAdults>
      <Children>
        <Child age=age_of_one_child_guest/>
        <Child age=age_of_one_child_guest/>
      </Children>
    </OccupancyDetails>
  </Result>
</Transaction>

Elementy potomne

Element <OccupancyDetails> zawiera te elementy podrzędne:

Element podrzędny Wymagana? Typ Opis
<NumAdults> Required integer Liczba dorosłych gości. min.: 1, maks.:20.
<Children> Optional Object Kontener dla co najmniej jednego elementu <Child>.
<Child age> Optional integer Maksymalny wiek tego konta dziecka – na przykład <Child age="17">.

Przykłady

Poniższe przykłady pokazują, jak element <OccupancyDetails> może wyglądać w obrębie elementu <Results>, <RoomBundle> lub elementu podrzędnego <Rates>.

Odpowiedź dotycząca wyniku

W poniższym przykładzie zdefiniowano jeden plan podróży i ceny dla jednej usługi w odpowiedzi na zapytanie o rzeczywistą cenę, w którym użytkownik podał liczbę i typy gości. Tutaj <OccupancyDetails> – 2 osoby dorosłe i 1 dziecko – są zwracane w ciągu <Result>.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>060773</Property>
    <RoomID>RoomType101</RoomID>
    <PackageID>Package101</PackageID>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">278.33</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
    <AllowablePointsOfSale>
      <PointOfSale id="site1"/>
    </AllowablePointsOfSale>
    <Occupancy>3</Occupancy>
    <OccupancyDetails>
      <NumAdults>2</NumAdults>
      <Children>
        <Child age="17"/>
      </Children>
    </OccupancyDetails>
  </Result>
</Transaction>

Stawki za odpowiedź

Poniższy przykład określa 1 plan podróży i ceny dla 1 osoby dorosłej i 1 dziecka. Tutaj <OccupancyDetails> zwracany jest element <Rates> właściwości <Result>.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Transaction id="Wtdj8QoQIWcAAbaTGlIAAAC4" timestamp="2018-04-18T11:27:45-04:00">
  <Result>
    <Property>8251</Property>
    <Checkin>2018-06-20</Checkin>
    <Nights>1</Nights>
    <Baserate currency="USD">62.18</Baserate>
    <Tax currency="USD">2.45</Tax>
    <OtherFees currency="USD">0.00</OtherFees>
    <Rates>
      <Rate rate_rule_id="rule-951">
        <Occupancy>2</Occupancy>
        <OccupancyDetails>
          <NumAdults>1</NumAdults>
          <Children>
            <Child age="17"/>
          </Children>
        </OccupancyDetails>
        <Baserate currency="USD">42.61</Baserate>
        <Tax currency="USD">5.70</Tax>
        <OtherFees currency="USD">0.00</OtherFees>
        <Custom1>abc4</Custom1>
        <AllowablePointsOfSale>
          <PointOfSale id="yourhotelpartnersite.com"/>
        </AllowablePointsOfSale>
      </Rate>
    </Rates>
  </Result>
</Transaction>

Pakiet pokoi

Poniższy przykład określa liczbę osób 2 dorosłych i 1 dziecko na 2 noce i obowiązuje stawka zwrotu środków. <OccupancyDetails> wewnątrz elementu <RoomBundle>

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
  <Result>
    <Property>6781291</Property>
    <Checkin>2017-08-05</Checkin>
    <Nights>2</Nights>
    ...
    <RoomBundle>
      <RoomID>10291</RoomID>
      <RatePlanID>564739</RatePlanID>
      <PackageID>564739</PackageID>
      <Occupancy>3</Occupancy>
      <OccupancyDetails>
        <NumAdults>2</NumAdults>
        <Children>
          <Child age="17"/>
        </Children>
      </OccupancyDetails>
      <ChargeCurrency>web</ChargeCurrency>
      <Refundable available="true" refundable_until_days="1" refundable_until_time="23:59:00" />
      <Baserate currency="USD">185.34</Baserate>
      <Tax currency="USD">37.06</Tax>
      <OtherFees currency="USD">2.22</OtherFees>
    </RoomBundle>
  </Result>
</Transaction>

Pakiety z kilkoma salami

Poniższy przykład określa kilka stawek <RoomBundle>, które są ograniczone do 2 dorosłych i 2 dzieci. Tutaj <OccupancyDetails> występuje w elemencie <Rates> w elemencie <RoomBundle>.

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">275.00</Baserate>
    <Tax currency="USD">27.50</Tax>
    <OtherFees currency="USD">0</OtherFees>
    <RoomBundle>
      <RoomID>5</RoomID>
      <PackageID>STD</PackageID>
      <Baserate currency="USD">275.00</Baserate>
      <Tax currency="USD">27.50</Tax>
      <OtherFees currency="USD">0</OtherFees>
      <InternetIncluded>1</InternetIncluded>
      <ChargeCurrency>web</ChargeCurrency>
      <Custom1>ratebasic</Custom1>
      <Custom2>ratebasic</Custom2>
      <Occupancy>4</Occupancy>
      <OccupancyDetails>
          <NumAdults>2</NumAdults>
          <Children>
              <Child age="17"/>
              <Child age="17"/>
          </Children>
      </OccupancyDetails>
      <Rates>
        <Rate rate_rule_id="mobile">
          <Baserate currency="USD">258.33</Baserate>
          <Tax currency="USD">25.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <ChargeCurrency>hotel</ChargeCurrency>
          <Custom1>ratecode321</Custom1>
        </Rate>
        <Rate rate_rule_id="us_or_gb">
          <Baserate currency="USD">268.33</Baserate>
          <Tax currency="USD">26.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <Custom1>ratecode432</Custom1>
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>