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

Ta strona zawiera informacje o wiadomościach o transakcjach w formacie XML.

<Transaction>

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

Element <Transaction> występuje w tym miejscu w hierarchii XML wiadomości o transakcji:

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

Wiadomości, które używają elementu głównego <Transaction>, wymagają co najmniej 1 elementu podrzędnego. Wiadomości transakcyjne mogą zawierać dowolną liczbę elementów podrzędnych, o ile łączny rozmiar wiadomości nie przekracza 100 MB.

Składnia

Element <Transaction> ma tę składnię:

<?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 Wymagany? Typ Opis
id Required ciąg Unikalny identyfikator każdej wiadomości transakcji.
partner Optional string Konto partnera, którego dotyczy wiadomość transakcyjna. Zwykle używasz tej opcji, jeśli Twój backend udostępnia pliki danych o cenach dla wielu kont partnerów. Ta 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.

Wiadomości 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 ich otrzymania. Na przykład aktualizacja ceny z sygnaturą czasową 2019-05-03 14:09:00, która zostanie odebrana po wiadomości z sygnaturą czasową 2019-05-03 14:10:00, zostanie przetworzona w kolejności, a cena z wiadomości z sygnaturą czasową 2019-05-03 14:10:00 zostanie użyta.

Elementy potomne

Element <Transaction> ma te elementy podrzędne:

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

Opisuje konkretny pokój i pakiety pokoi. Zwykle używasz tego elementu w osobnej wiadomości o transakcji, aby zdefiniować wspólne wartości dla pakietów pokoi i zmniejszyć rozmiar wiadomości o transakcji.

<Result> Optional* <Result>

Dane o cenach planu podróży dotyczącego pokoju lub elementu <RoomBundle>, który określa pakiety pokoi i dodatkowe typy pokoi w obiekcie. Element <Result> może też służyć do usuwania planów podróży z asortymentu.

* Wymagane jest podanie co najmniej jednej z tych wartości: <PropertyDataSet> lub <Result>.

Przykłady

Dane dotyczące pomieszczenia

Poniższy przykład określa dane pokoju w wiadomości 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>

Dane o cenach

Poniższy przykład definiuje dane o cenach w wiadomości o 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>
    <MilesIncluded>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines"/>
      </Provider>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
    </MilesIncluded>
  </Result>
</Transaction>

Stawki za noc

Poniższy przykład definiuje dane o cenach za pobyt od 1 do 7 nocy, począwszy 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 wiadomość Transaction zawierającą 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>
      </Rate>
    </Rates>

  </Result>
</Transaction>

Usuwanie zasobów reklamowych

W tym przykładzie usuwamy z zasobów reklamowych hotelu kilka rodzajów zasobów reklamowych (noclegi na 1 noc w różnych terminach):

<?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 pokoju i pakiecie (lub pakiecie pokoju) w wiadomości.<Transaction> Wartości ustawione w przypadku hotelu zastępują wartości ustawione w przypadku partnera. Google przechowuje te informacje, aby nie trzeba było ich podawać za każdym razem, gdy wysyłasz aktualizacje cen.

Element <PropertyDataSet> występuje w tym miejscu w hierarchii XML wiadomości o transakcji:

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

Więcej informacji znajdziesz w artykule Metadane pakietu Room Bundle.

Składnia

Element <PropertyDataSet> ma tę składnię:

<?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> ma te elementy podrzędne:

Element podrzędny Wymagany? Typ Opis
<PackageData> Optional* <PackageData> Opisuje pakiet z pokojem. Dane te 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 fizycznego pokoju.

Odwołujesz się do identyfikatora pakietu w aktualizacjach cen.

Więcej informacji znajdziesz w artykule Metadane pakietu Room Bundle.

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

W aktualizacjach cen odwołujesz się do identyfikatora pokoju.

* Wymagane jest podanie co najmniej jednej z tych wartości: <PackageData> lub <RoomData>.

Przykłady

Dane o pokojach i pakietach

Ten przykład pokazuje dane pokoju i pakietu w elemencie <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 ceny i dostępność tego pokoju oraz zestawu pokoi, w wiadomościach dotyczących cen odwołujesz się do identyfikatorów pokoju i pakietu. Dzięki temu znacznie zmniejszysz rozmiar wiadomości, a także liczbę błędów, które mogą wystąpić z powodu zduplikowanych danych. Więcej informacji znajdziesz w artykule Metadane pakietu Room Bundle.

<RoomData>

Określa niezależne od planu podróży metadane dotyczące pokoi, a w konsekwencji pakietów pokoi (ponieważ pakiety pokoi to pokoje z dodatkowymi udogodnieniami). Użyj <RoomData>, aby zmniejszyć powtarzanie danych opisowych w pliku danych o cenach.

Element <RoomData> występuje w tym miejscu w hierarchii XML wiadomości o 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. Jest on przeznaczony do wszystkich danych innych niż dane dotyczące planu podróży.

Element <RoomData> jest podobny do elementu <PackageData>, ale opisuje fizyczne pomieszczenie, a nie udogodnienia i warunki pakietu. Elementów <RoomData> i <PackageData> używasz w połączeniu, aby podać szczegóły dotyczące pakietów pokoi. W przypadku pojedynczych 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 pokoi. Gdy Google wyświetli ten pokój lub pakiet w wynikach wyszukiwania, uwzględni opisy z obu źródeł, oddzielając je łącznikiem.

Więcej informacji znajdziesz w artykule Metadane pakietu Room Bundle.

Składnia

Element <RoomData> ma tę składnię:

<?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> ma te elementy podrzędne:

Element podrzędny Wymagany? Typ Opis
<Capacity> Optional integer Maksymalna liczba gości, których może pomieścić pokój. W przypadku pokoju pojemność jest większa lub równa liczbie osób.

Jeśli została określona, wartość musi być równa lub większa niż wartość elementu <Occupancy>, czyli planowana liczba gości w danym pokoju. Na przykład w przypadku dużego apartamentu wartość <Capacity> może wynosić 6, a wartość <Occupancy> – 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ą opisane przez inne elementy lub element <Name>. Podczas podawania opisu pokoju nie używaj samych wielkich liter.

Element <Description> przyjmuje jeden 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> dla każdego języka, w którym może się wyświetlać reklama lub bezpłatny link do rezerwacji (z różnymi wartościami atrybutów language).

Poniższy przykład pokazuje wersje opisu pokoju w języku francuskim i angielskim:

<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 wartością wyświetlaną na stronie docelowej hotelu (wcześniej: punkt sprzedaży). Nie ustawiaj wartości tego elementu na same wielkie litery.

Ten element przyjmuje jeden 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> dla każdego języka, w którym może się wyświetlać reklama lub bezpłatny link do rezerwacji (z różnymi wartościami atrybutów language).

Poniższy przykład pokazuje nazwy pomieszczeń w wersji francuskiej i angielskiej:

<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órych przeznaczony jest pokój. Na przykład duży apartament może pomieścić 6 osób (pojemność = 6), ale jest przeznaczony tylko dla 4 osób.

Ta wartość musi być mniejsza lub równa wartości elementu <Capacity>, czyli liczby osób, które mogą fizycznie zmieścić się w pokoju.

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

<Occupancy> może być uzupełniony o <OccupancyDetails>, który określa typ gości (osoby dorosłe lub dzieci). Składnię i opis elementów podrzędnych znajdziesz w <OccupancyDetails>.

<OccupancySettings> Optional Object Ustawienia, które mogą ograniczać lub modyfikować wymagania dotyczące zajętości pomieszczenia.

Element <OccupancySettings> zawiera te elementy podrzędne:

  • <MinOccupancy>: minimalna liczba gości, którzy mogą przebywać w pokoju. Jeśli np. ta opcja jest ustawiona na 2, nie można zarezerwować tego pokoju dla 1 osoby.

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

  • <MinAge>: minimalny wiek wszystkich gości przebywających w pokoju. Jeśli na przykład ustawisz tę opcję na 18, ten pokój będzie można zarezerwować tylko dla grup, w których wszyscy goście mają co najmniej 18 lat.

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

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

Nie wszystkie elementy podrzędne muszą być uwzględnione.

<PhotoURL> Optional Object Adres URL i opcjonalny podpis zdjęcia danego pokoju lub pakietu pokoi. Możesz określić więcej niż 1 <PhotoURL> dla pokoju lub pakietu pokoi. Każdy adres URL zdjęcia musi znajdować się w osobnym tagu <PhotoURL>.

Ten element przyjmuje te elementy podrzędne:

  • <URL>: określa lokalizację zdjęcia. Lokalizacja powinna być publiczna (nie może znajdować się za zaporą sieciową) i musi zawierać protokół (np. https://). Używaj tylko jednego elementu <URL> na <PhotoURL>.
  • <Caption>: definiuje podpis zdjęcia. Ten element przyjmuje pojedynczy element podrzędny <Text>, który ma 2 wymagane atrybuty: textlanguage. 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 funkcjach pokoju.
<RoomID> Required string Unikalny identyfikator pokoju. Użyj tego identyfikatora, aby dopasować dane pokoju do bloków <Result> w aktualizacjach cen. Więcej informacji znajdziesz w artykule Metadane pakietu sal. (Możesz też użyć tego identyfikatora, aby odwołać się do wspólnej definicji pokoju w jednej wiadomości o transakcji podczas definiowania danych pokoju w tekście).

Przykłady

Dane dotyczące pomieszczenia

Poniższy przykład definiuje 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 tym 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 wieloma pokojami

W przykładzie poniżej zdefiniowano metadane pokoju i pakietu dla wielu pakietów RoomBundle:

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

Definiuje funkcje znalezione w pomieszczeniu.

Element <RoomFeatures> występuje w tym miejscu w hierarchii XML wiadomości o transakcji:

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

Składnia

Element <RoomFeatures> ma tę składnię:

<?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> ma te elementy podrzędne:

Element podrzędny Wymagany? Typ Opis
<JapaneseHotelRoomStyle> Optional enum

Określa styl japońskiego pokoju hotelowego.

Prawidłowe wartości to:

  • western: Pokój w stylu zachodnim z łóżkami.
  • japanese: Pokój w stylu japońskim z futonami.
  • japanese_western: Pokój w stylu japońskim i zachodnim z łóżkami w stylu zachodnim i futonami w stylu japońskim.
<Beds> Optional Object Zawiera tyle symboli <Bed>, ile jest pokoi. Pamiętaj, że japońskie futony nie powinny być tu uwzględniane.

Każdy element <Bed> ma te atrybuty:

  • size (opcjonalnie): prawidłowe wartości to single, semi_double, double, queenking.
Każdy element <Bed> ma te elementy podrzędne:
  • <Width> (opcjonalny): określa szerokość łóżka. Musi mieć atrybut unit o wartości cm i atrybut number z szerokością łóżka w centymetrach (liczba całkowita).
  • <Length> (opcjonalny): określa długość łóżka. Musi mieć atrybut unit o wartości cm oraz atrybut number z długością łóżka w centymetrach (liczba całkowita).
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, jeśli pokój jest kapsułowy.
<Roomsharing> Optional enum Czy ten pokój jest współdzielony z innymi osobami, np. właścicielami lub innymi gośćmi. Prawidłowe wartości to sharedprivate.
<Outdoor> Optional empty Podaj ten element, jeśli pokój jest miejscem noclegowym na świeżym powietrzu, które nie ma stałych ścian, instalacji wodno-kanalizacyjnej ani klimatyzacji. Na przykład pokoje hotelowe nie są obiektami noclegowymi na świeżym powietrzu, natomiast pola namiotowe, na których goście nocują w namiotach, i kempingi, na których goście przyjeżdżają własnymi kamperami, są obiektami noclegowymi na świeżym powietrzu.
<MobilityAccessible> Optional empty Podaj ten element, jeśli pokój jest przystosowany do potrzeb osób z ograniczoną mobilnością.
<Smoking> Optional enum Czy ten pokój jest dla niepalących czy dla palących. Prawidłowe wartości to non_smokingsmoking.
<BathAndToilet> Optional Object Zawiera informacje o wannie i toalecie w pokoju.

Atrybut:

  • relation (opcjonalny): wskazuje, jak są rozmieszczone względem siebie wanna i toaleta. Prawidłowe wartości to together (zarówno wanna, jak i toaleta znajdują się w tym samym pomieszczeniu, np. w łazience, tuż obok siebie) i separate (wanna i toaleta znajdują się w osobnych pomieszczeniach). Ten atrybut nie może być ustawiony, jeśli w pomieszczeniu nie ma zarówno wanny, jak i toalety.

Element może opcjonalnie zawierać te elementy podrzędne:

  • <Bath> (opcjonalnie): obecność tego elementu oznacza, że w pokoju jest wanna.

    Atrybuty to:

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

    Atrybuty to:

    • electronic_bidet (opcjonalnie): oznacza, że toaleta ma bidet elektroniczny. Prawidłowe wartości to 0 (lub false) i 1 (lub true).
    • mobility_accessible (opcjonalny): wskazuje, że toaleta jest przystosowana do potrzeb osób z ograniczoną mobilnością. Prawidłowe wartości to 0 (lub false) i 1 (lub true).

Przykład:

<BathAndToilet relation="separate">
  <Bath bathtub="1" shower="1"/>
  <Toilet
    electronic_bidet="1"
    mobility_accessible="1"/>
</BathAndToilet>
<OpenAirBath> Optional empty Podaj ten element, jeśli w pokoju znajduje się prywatna łaźnia na świeżym powietrzu.
<AirConditioning> Optional empty Podaj ten element, jeśli pokój jest klimatyzowany.
<Balcony> Optional empty Podaj ten element, jeśli pokój ma balkon lub werandę.
<Views> Optional Object Prawidłowe 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 Twoja oferta nie będzie wyświetlana w wynikach wyszukiwania, gdy użytkownik będzie filtrować według stylu pokoju lub liczby łóżek.

2 łóżka pojedyncze

Poniższy przykład pokazuje, jak używać funkcji <RoomFeatures>:

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

2 łóżka podwójne

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

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


Pokój w stylu japońskim bez łóżka

Poniżej znajdziesz przykład pokoju w stylu japońskim bez łóżka. Informacje o łóżkach nie są wymagane w przypadku pokoju w stylu japanese.

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

Pokój japoński w stylu zachodnim z łóżkiem

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

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

Jeśli partner nie ma informacji o liczbie łóżek w sekcji japanese_westernrooms, postępuj zgodnie z tym przykładem:

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

<PackageData>

Określa niezależne od planu podróży metadane dotyczące pakietów pokoi w przypadku obiektu. Ten element zawiera informacje powiązane z partnerem i hotelem, ale nie z planem podróży. Jego celem jest jednokrotne zdefiniowanie wszystkich danych innych niż dane dotyczące planu podróży i odwoływanie się do nich z danych dotyczących planu podróży.

Element <PackageData> występuje w tym miejscu w hierarchii XML wiadomości o 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 i warunki cenowe, które nie są częścią opisu pokoju. Używasz <RoomData><PackageData> w połączeniu, aby podać szczegółowe informacje o pakietach pokoi i funkcjach cen. W przypadku pojedynczych pokoi, które nie są częścią pakietu, użyj tylko symbolu <RoomData>.

Możesz zdefiniować elementy <RoomData> i <PackageData> dla tego samego pokoju lub zestawu pokoi. Gdy Google wyświetli ten pokój lub pakiet w wynikach wyszukiwania, uwzględni opisy z obu źródeł, oddzielając je łącznikiem.

Jeśli zaktualizujesz pojedynczy element <PackageData> w przypadku usługi, musisz zaktualizować wszystkie elementy <PackageData><RoomData> w przypadku tej usługi. Każdy <PropertyDataSet> jest traktowany jako wszystkie dane o usłudze i zastępuje wszystkie dotychczasowe dane.

Więcej informacji znajdziesz w artykule Metadane pakietu Room Bundle.

Składnia

Element <PackageData> ma tę składnię:

<?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>integer</NumberOfMiles>
        <Provider>
          <Text language="en" text="provider-name">
        </Provider>
        <!-- Add Loyalty point information -->
        <LoyaltyCampaignID>campaign_ID</LoyaltyCampaignID>
      </MilesIncluded>
    </PackageData>
    ...
    ...
  </PropertyDataSet>
  ...
</Transaction>

Atrybuty

Element <PackageData> nie ma atrybutów.

Elementy potomne

Element <PackageData> ma te elementy podrzędne:

Element podrzędny Wymagany? Typ Opis
<BreakfastIncluded> Optional boolean Określa, czy śniadanie jest wliczone w cenę pakietu. Prawidłowe wartości to 0 (lub false) i 1 (lub true).

Zamiast atrybutu <BreakfastIncluded> zalecamy używanie atrybutu <Meals>.

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

Wartością domyślną jest web.

<CheckinTime> Optional Time Najwcześniejsza możliwa godzina zameldowania. Godzina musi być wcześniejsza niż 24:00 czasu lokalnego hotelu.
<CheckoutTime> Optional Time Najpóźniejsza możliwa godzina wymeldowania w lokalnej strefie czasowej hotelu.
<Description> Optional Object Szczegółowy opis pakietu. Ten element powinien zawierać informacje, które nie są opisane przez inne elementy lub element <Name>. Podczas podawania opisu pokoju nie używaj samych wielkich liter.

Element <Description> przyjmuje jeden element podrzędny <Text>, który ma 2 wymagane atrybuty: textlanguage. Atrybut text to opis, a atrybut language określa dwuliterowy kod języka, jak pokazano 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 internet we wszystkich pokojach. Ten element nie dotyczy przewodowego internetu w pokojach ani bezprzewodowego internetu, który nie jest dostępny w pokojach gości. Prawidłowe wartości to 0 (lub false) i 1 (lub true).
<Meals> Optional Object Zawiera informacje o posiłkach w tym pakiecie.

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

  • included (wymagany): ustaw wartość 1 (lub true), jeśli cena obejmuje śniadanie lub kolację; w przeciwnym razie ustaw wartość 0 lub false.
  • in_room (opcjonalnie): ustaw wartość 1 (lub true), jeśli goście mają możliwość zjedzenia śniadania lub kolacji w pokoju, w którym się zatrzymali; w przeciwnym razie ustaw wartość 0 (lub false).
  • in_private_space (opcjonalnie): ustaw wartość 1 (lub true), jeśli goście mają możliwość zjedzenia śniadania lub kolacji w przestrzeni (innej niż pokój, w którym przebywają), w której mogą uniknąć kontaktu z innymi gośćmi; w przeciwnym razie ustaw wartość 0 (lub false).
  • buffet (opcjonalnie): ustaw wartość 1 (lub true), jeśli śniadanie lub kolacja są serwowane w formie bufetu; w przeciwnym razie ustaw wartość 0 (lub false).

Atrybuty opcjonalne są używane tylko wtedy, gdy wartość included to „true”.

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

<Name> Required string Nazwa pakietu. Ta wartość powinna być zgodna z wartością wyświetlaną na stronie docelowej hotelu. Nie ustawiaj wartości tego elementu na same wielkie litery.

Ten element przyjmuje jeden element podrzędny <Text>, który ma 2 atrybuty: textlanguage. 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 przeznaczony jest pakiet pokoi. Na przykład duży apartament może pomieścić 6 osób, ale jest przeznaczony tylko dla 4 osób.

Ta wartość musi być mniejsza lub równa wartości elementu <Capacity>, czyli liczbie osób, które mogą fizycznie zmieścić się w pokoju.

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>, pierwszeństwo ma wartość w <RoomBundle>.

Uwaga:

<Occupancy> może być uzupełniony o <OccupancyDetails>,który określa typ gości (osoby dorosłe lub dzieci). Składnię i opis elementów podrzędnych znajdziesz w <OccupancyDetails>.
<PackageID> Required string

Unikalny identyfikator pakietu. Użyj tego identyfikatora, aby dopasować dane pakietu pokoi do bloków <Result> w aktualizacjach cen. Więcej informacji znajdziesz w artykule Metadane pakietu Room.

(Możesz też użyć tego identyfikatora, aby odwołać się do wspólnej definicji pakietu pokoi używanej w jednej wiadomości o transakcji podczas definiowania danych pakietu pokoi w treści wiadomości).

<ParkingIncluded> Optional boolean Określa, czy pakiet pokoju obejmuje bezpłatny parking, w przypadku gdy w tym hotelu parking jest usługą płatną. Nie podawaj wartości tego elementu w przypadku hotelu, który oferuje bezpłatny parking.

Prawidłowe wartości to 0 (lub false) i 1 (lub true). Wartością domyślną jest false.

<PhotoURL> Optional Object (Tak samo jak <PhotoURL><RoomData>, ale w przypadku pakietu, np. zdjęć posiłków).
<Refundable> Optional Object Umożliwia wyświetlanie informacji o tym, że stawka podlega pełnemu zwrotowi lub że można bezpłatnie anulować rezerwację. Jeśli nie podasz tych informacji, nie będą wyświetlane ż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> mają wyższy priorytet niż zasady zwrotów na poziomie <PackageData>. Ceny z możliwością zwrotu środków można też wyróżnić przed użytkownikami za pomocą alternatywnych opcji bez bezpośredniego modyfikowania schematu wiadomości o transakcji. Dowiedz się więcej o tych opcjach: zasady dotyczące stawek podlegających zwrotowi.

Poniższy przykład pokazuje element <Refundable> z ustawionymi wszystkimi atrybutami:

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

Uwaga: zalecamy ustawienie wszystkich atrybutów. Komunikat ostrzegawczy o stanie pliku danych jest generowany, gdy co najmniej 1 atrybut nie jest ustawiony.

Jeśli nie ustawisz żadnych atrybutów, cena nie będzie wyświetlana jako podlegająca zwrotowi. Atrybuty to:

  • available: (Wymagany) 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: (Wymagane, jeśli available ma wartość true) Określa liczbę dni przed datą zameldowania, w przypadku których 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: (Wysoce zalecane, jeśli available to true) Określa najpóźniejszą godzinę w ciągu dnia (według lokalnego czasu hotelu), do której uwzględniana jest prośba o pełny zwrot środków. Można go połączyć z parametrem refundable_until_days, aby określić na przykład, że „zwrot środków jest możliwy do godziny 16:00 na 2 dni przed zameldowaniem”. Jeśli nie ustawisz wartości refundable_until_time, domyślnie zostanie przyjęta północ.

    Wartość tego atrybutu jest podana w formacie Time.

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

  • Jeśli zasada available lub refundable_until_days nie jest ustawiona, cena nie będzie wyświetlana jako podlegająca zwrotowi.
  • Jeśli wartość atrybutu available to 0 lub false, pozostałe atrybuty są ignorowane. Stawka nie jest wyświetlana jako podlegająca zwrotowi, nawet jeśli ustawiony jest jeden lub oba pozostałe atrybuty.
<MembershipBenefits Included> Optional boolean Cena obejmuje korzyści związane ze statusem Elite przez cały okres pobytu. Obejmuje te parametry:
  • ProgramName: Nazwa programu statusu elite
  • ProgramLevel: poziom programu. Na przykład: „Złoty”.
  • NightlyValue (optional): wartość korzyści za noc.
<CarRentalIncluded> Optional boolean Cena obejmuje bezpłatne wypożyczenie samochodu na czas pobytu.
<MilesIncluded> Optional boolean Cena obejmuje mile w programie lojalnościowym. Parametry obejmują:
  • NumberOfMiles: liczba mil w przypadku każdej trasy.
  • Provider: dostawca mil w programie lojalnościowym linii lotniczej.
  • LoyaltyCampaignID: unikalny identyfikator, który określa konkretną kampanię lojalnościową skonfigurowaną i zaktualizowaną w Google. Dodaje punkty lojalnościowe do ceny hotelu.

    Aby uwzględnić element <MilesIncluded>, identyfikator kampanii należy skonfigurować w konfiguracji kampanii lojalnościowej. Szczegółowe informacje o tym, jak Google wykorzystuje punkty lojalnościowe w wynikach, zależą od konfiguracji kampanii lojalnościowej.

    Element <MilesIncluded> ma element podrzędny <NumberOfMiles>, który oblicza liczbę zdobytych punktów. Jeśli zasada <NumberOfMiles> nie jest skonfigurowana, zdobyte punkty są określane przez konfigurację kampanii lojalnościowej.

    <MilesIncluded>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines">
      </Provider>
    </MilesIncluded>
  • Uwaga: <NumberOfMiles> i <Provider> są opcjonalne.

<OnPropertyCredit> Optional boolean Cena obejmuje środki do wykorzystania w obiekcie (na jedzenie i napoje, w ośrodku wypoczynkowym, spa itp.). Parametr:
  • Amount: wartość środków w walucie lokalnej na każdy plan podróży.
<AirportTransportationIncluded> Optional Object Cena obejmuje bezpłatny transport na pobliskie lotnisko i z niego. Opcjonalny atrybut direction określa kierunek transportu. Prawidłowe wartości to:
    from: transport z lotniska do obiektu jest zapewniony. Jest to wartość domyślna, jeśli nie określono kierunku. to: transport z obiektu na lotnisko jest zapewniony. round_trip: transport jest zapewniony zarówno na lotnisko, jak i z lotniska.

Przykłady

Pakiet z pokojem jednoosobowym

W tym przykładzie zdefiniowano 1 pakiet pokoi z zakwaterowaniem dla 2 osób (1 dorosły i 1 dziecko) oraz śniadaniem:

<?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 pokoju i pakietu

W tym 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 wieloma pokojami

W przykładzie poniżej zdefiniowano metadane pokoju i pakietu dla wielu pakietów RoomBundle:

<?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 z pokojem i cenami

W tym przykładzie zdefiniowano metadane pokoju i pakietu dla pakietu Room z funkcjami cenowymi:

<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>
        <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      </MilesIncluded>
      <AirportTransportationIncluded direction="from"/>
    </PackageData>
  </PropertyDataSet>

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

Posiłki i zdjęcia

W przykładzie poniżej 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 aktualizacji cen i dostępności w <Transaction>wiadomości.

.

Element <Result> występuje w tym miejscu w hierarchii XML wiadomości o transakcji:

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

Użyj <Result>, aby ustawić lub zaktualizować ceny pokoi i określić dostępne zasoby. Elementy zdefiniowane w tym elemencie zwykle odwołują się do niezależnych od planu podróży metadanych dotyczących pokoju lub pakietu (takich jak opis lub zestaw udogodnień) zdefiniowanych w elementach <PackageData><RoomData>.

Zazwyczaj bardzo często wysyłasz wiadomości o transakcjach z aktualizacjami cen. Dokładny sposób i częstotliwość tego działania zależą od trybu dostawy.

W wiadomościach o transakcjach możesz używać symbolu <Result>, aby usuwać plany podróży, zgodnie z opisem w sekcji Usuwanie zasobów. Więcej informacji o używaniu wiadomości transakcyjnych do aktualizowania cen i dostępności znajdziesz w artykule Dodawanie i aktualizowanie asortymentu.

Pojedyncza wiadomość transakcyjna może zawierać dowolną liczbę elementów <Result>, o ile jej rozmiar nie przekracza 100 MB.

Składnia

Element <Result> ma tę składnię:

<?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. -->
    <!-- Child occupancy rates should only be sent through Live pricing
         with context and not through Pull or Changed pricing -->
    <OccupancyDetails>occupancy_info</OccupancyDetails>

    <Rates>...</Rates>

    <RoomBundle>...</RoomBundle>

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

    <MilesIncluded>
      <NumberOfMiles>integer</NumberOfMiles>
      <Provider>
        <Text language="en" text="provider-name">
      </Provider>
      <!-- Add Loyalty point information -->
      <LoyaltyCampaignID>campaign_ID</LoyaltyCampaignID>
    </MilesIncluded>
  </Result>
  ...
  </Transaction>

Atrybuty

Element <Result> ma te atrybuty:

Atrybut Wymagany? Typ Opis
mergeable Optional boolean Domyślnie nowe ceny dla konkretnego hotelu i planu podróży zastępują wszystkie poprzednie (nieprzeterminowane) ceny znajdujące się w pamięci podręcznej Google. Atrybut mergeable umożliwia przechowywanie dodatkowych cen w pamięci podręcznej Google bez usuwania poprzednich informacji o cenach. Odpowiedzi na zapytanie o ceny na żywo z kontekstem będą zawsze miały ten atrybut ustawiony na true (niezależnie od odpowiedzi na wiadomość o transakcji).

Elementy potomne

Element <Result> ma te elementy podrzędne:

Element podrzędny Wymagany? Typ Opis
<AllowablePointsOfSale> Optional Object Co najmniej 1 strona docelowa, która kwalifikuje się do wyświetlania reklam hotelu. Strona docelowa to witryna, która może obsługiwać proces rezerwacji dla użytkownika końcowego. Aby wyraźnie uwzględnić niektóre strony docelowe (i wykluczyć inne), dodaj co najmniej 1 element <AllowablePointsOfSale>, który pasuje do atrybutu id elementu <PointOfSale> w pliku stron docelowych.

Jeśli nie uwzględnisz tego elementu, wszystkie strony docelowe zdefiniowane w pliku stron docelowych będą uznawane za kwalifikujące się do rezerwacji pokoju. Więcej informacji znajdziesz w artykule Składnia pliku stron docelowych.

<Baserate> Optional float

Cena pokoju za pobyt. Wartość tego elementu powinna odzwierciedlać:

  • W przypadku pokoju prywatnego ustaw najniższą cenę za pokój dwuosobowy, jaką oferujesz. Wyższe obłożenie jest tu dozwolone, jeśli nie masz stawki za pokój dwuosobowy, a na Twoim koncie są włączone stawki za pokój jednoosobowy. Aby włączyć ceny za obłożenie inne niż podwójne, skontaktuj się z nami. Ceny za pobyt 1 osoby są tu niedozwolone – muszą być ustawione w sekcji <Rates>.
  • W przypadku pokoju współdzielonego pozostaw to pole puste i użyj <RoomBundle>.
  • Ta wartość powinna być łączną ceną podstawową za wszystkie noce, a nie średnią stawką za noc.

Jeśli pokój jest niedostępny w przypadku planu podróży, element <Baserate> należy pominąć lub ustawić na -1, a element <Unavailable> należy określić wraz z wszelkimi znanymi przyczynami niedostępności.

Aby usunąć pakiet Room Bundle, postępuj zgodnie z instrukcjami w sekcji Usuwanie pakietu Room Bundle.

Wartość <Baserate> nie może zawierać symboli grupowania cyfr, takich jak przecinek (,) lub kropka (.). Ułamki zawsze oddzielaj kropką (.) jako znakiem dziesiętnym. Na przykład: kwotę 1200,40 PLN przedstaw w ten sposób:

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

Element <Baserate> ma te opcjonalne atrybuty:

  • all_inclusive: wartość logiczna wskazująca, czy cena zawiera podatki i opłaty. Ogólnie ustaw tę wartość na false w przypadku użytkowników w Stanach Zjednoczonych i Kanadzie oraz podaj wartości elementów <Tax><OtherFees>. Jeśli używasz cen zawierających wszystkie opłaty, możesz nie kwalifikować się do wyświetlania w informacjach, jeśli Twoje ceny nie uwzględniają podatków i opłat dla użytkowników z Kanady.

    Użytkownicy w Stanach Zjednoczonych widzą teraz ceny all inclusive.

    W przypadku wszystkich innych użytkowników zwykle uwzględniasz podatki i opłaty w cenie 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 dolarów amerykańskich.
<ChargeCurrency> Optional enum Kiedy i gdzie użytkownik płaci za rezerwację. Ten element może być używany w komunikacie o transakcji w elemencie <Result> w przypadku ceny hotelu lub w bloku <PackageData> w przypadku pakietu pokoju.

Prawidłowe wartości to:

  • web: użytkownik płaci online w momencie rezerwacji. Jest to wartość domyślna. Rzeczywista strona docelowa jest określana przez plik strony docelowej i może zależeć od waluty, lokalizacji, języka użytkownika lub innych czynników.
  • hotel: opłata jest pobierana od użytkownika podczas zameldowania 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żytkownikowi od razu naliczana jest część opłaty, a pozostała kwota jest pobierana w późniejszym terminie, zwykle w momencie wymeldowania z hotelu.
  • installments: od użytkownika pobierana jest początkowa część całej należnej kwoty, a następnie oczekuje się, że będzie on regularnie płacić ustaloną kwotę w określonym czasie.

Wartością domyślną jest web.

<Checkin> Required Date Data zameldowania w przypadku planu podróży w formacie Date. Połączenie elementu <Nights> i elementu <Checkin> tworzy plan podróży.
Optional string Wycofany: określa pole niestandardowe, którego możesz użyć do przekazywania dodatkowych danych powiązanych z hotelem. Możesz przekazywać maksymalnie 5 wartości niestandardowych z tymi nazwami elementów:
  • <Custom1>
  • <Custom2>
  • <Custom3>
  • <Custom4>
  • <Custom5>

Elementy <Custom> umożliwiają przekazywanie dowolnych danych. Możesz na przykład podać w tym polu wartość, która będzie następnie używana przez plik stron docelowych do tworzenia niestandardowego adresu URL strony docelowej. Każde pole niestandardowe może zawierać maksymalnie 200 znaków. Więcej informacji znajdziesz w sekcji Pliki strony docelowej . Elementy <Custom> podane w elemencie <Rate> nie są dziedziczone przez element <RoomBundle>. Atrybut <Custom> należy zdefiniować osobno w każdym <RoomBundle>.

Ważne: jeśli chcesz używać zmiennych CUSTOM, skontaktuj się z technicznym menedżerem konta.

<ExpirationTime> Optional DateTime Data i godzina, o której cena jest uznawana za nieaktualną (minimum 3 godziny).

Jeśli nie jest to kluczowe dla Twojej struktury cenowej, nie podawaj sygnatur czasowych wygaśnięcia.

Google nie wyświetla żadnych wygasłych cen, a każdy plan podróży z wygasłą ceną będzie kwalifikował się do zapytań o ceny rzeczywiste.

<MilesIncluded> Optional boolean Cena obejmuje mile w programie lojalnościowym. Parametry obejmują:
  • NumberOfMiles: liczba mil w przypadku każdej trasy.
  • Provider: dostawca mil w programie lojalnościowym linii lotniczej.
  • LoyaltyCampaignID: unikalny identyfikator, który określa konkretną kampanię lojalnościową skonfigurowaną i zaktualizowaną w Google. Dodaje punkty lojalnościowe do ceny hotelu.

    Aby uwzględnić element <MilesIncluded>, identyfikator kampanii należy skonfigurować w konfiguracji kampanii lojalnościowej. Szczegółowe informacje o tym, jak Google wykorzystuje punkty lojalnościowe w wynikach, zależą od konfiguracji kampanii lojalnościowej.

    Element <MilesIncluded> ma element podrzędny <NumberOfMiles>, który oblicza liczbę zdobytych punktów. Jeśli zasada <NumberOfMiles> nie jest skonfigurowana, zdobyte punkty są określane przez konfigurację kampanii lojalnościowej.

    <MilesIncluded>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines">
      </Provider>
    </MilesIncluded>
  • Uwaga: <NumberOfMiles> i <Provider> są opcjonalne.

<Nights> Required integer Liczba nocy w planie podróży. Wartość elementu <Nights> musi być dodatnią liczbą całkowitą. Kombinacja <Nights><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 jeden wymagany atrybut currency, który określa trzyliterowy kod waluty opłat. Na przykład: USD.

Element <OtherFees> jest wymagany, jeśli wartość <Baserate> jest większa niż zero.

<Occupancy> Optional integer Określa maksymalną liczbę osób, które mogą przebywać w obiekcie w przypadku tej ceny. Gdy element <Occupancy> występuje bezpośrednio pod elementem <Result>, musi określać co najmniej 2. <Occupancy> może być uzupełniony o parametr <OccupancyDetails>, który określa typ gości (osoby dorosłe lub dzieci). Jeśli typy gości nie są określone, przyjmuje się, że są to osoby dorosłe. Składnię i opis elementów podrzędnych znajdziesz w <OccupancyDetails>. Jeśli element <Occupancy> nie jest podany, domyślna wartość zajętości to 2.

Ważne: stawki za pobyt dzieci powinny być przesyłane tylko w przypadku aktualizacji cen w czasie rzeczywistym w odpowiedzi na wyszukiwania użytkowników, a nie w przypadku pobierania danych lub zmiany cen.

Uwaga: aby włączyć funkcję wysyłania cen za pokoje jednoosobowe, skontaktuj się z zespołem pomocy.

<PackageID> Optional string Unikalny identyfikator pakietu, który umożliwia powiązanie go z wstępnie zdefiniowanymi danymi pakietu. Używana też do wypełniania zmiennej strony docelowej PACKAGE-ID. Więcej informacji znajdziesz w artykule Metadane pakietu pokoju.

W elemencie <Result> musisz uwzględnić <RoomBundle>, aby zdefiniować <PackageID><RoomID>. Zalecamy jednak, aby identyfikatory pakietu i pokoju były podawane tylko w elemencie <RoomBundle>, a nie w elemencie <Result>.

<Property> Required string Identyfikator hotelu, którego dotyczą powiązane dane (cena, plan podróży, pakiet pokoi lub metadane). Wartość tego elementu musi być ciągiem znaków. Wartość tego elementu musi być zgodna z ofertą<id> zdefiniowaną w pliku danych z listą hoteli.
<Rates> Optional <Rates> Kontener dla co najmniej 1 bloku <Rate>. Każdy symbol <Rate><Rates> określa inną cenę kombinacji pokoju i planu podróży.

Użyj elementu <Rates>, gdy dla tej samej kombinacji pokoju/planu podróży jest kilka stawek lub gdy stawki nie można określić na poziomie <Result>. Możesz na przykład zdefiniować wiele stawek dla cen warunkowych, cen prywatnych, cen warunkowych w pakietach pokoi lub różnych obłożeń.

Uwaga: w ramach elementu <Result> stawki za pokój jednoosobowy można określić tylko w ramach elementu <Rates>. Skontaktuj się z nami, aby zezwolić na ceny za obłożenie inne niż podwójne.

<Refundable> Optional Object Umożliwia wyświetlanie informacji o tym, że stawka podlega pełnemu zwrotowi lub że można bezpłatnie anulować rezerwację. Jeśli nie podasz tych informacji, nie będą wyświetlane ż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> mają wyższy priorytet niż zasady zwrotów na poziomie <PackageData>. Ceny z możliwością zwrotu środków można też wyróżnić przed użytkownikami za pomocą alternatywnych opcji bez bezpośredniego modyfikowania schematu wiadomości o transakcji. Dowiedz się więcej o zasadach dotyczących cen z możliwością zwrotu środków.

Poniższy przykład pokazuje element <Refundable> z ustawionymi wszystkimi atrybutami:

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

Uwaga: zalecamy ustawienie wszystkich atrybutów. Komunikat ostrzegawczy o stanie pliku danych jest generowany, gdy co najmniej 1 atrybut nie jest ustawiony.

Jeśli nie ustawisz żadnych atrybutów, cena nie będzie wyświetlana jako podlegająca zwrotowi. Atrybuty to:

  • available: (Wymagany) 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: (Wymagane, jeśli available ma wartość true) Określa liczbę dni przed datą zameldowania, w przypadku których 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: (Wysoce zalecane, jeśli available to true) Określa najpóźniejszą godzinę w ciągu dnia (według lokalnego czasu hotelu), do której uwzględniana jest prośba o pełny zwrot środków. Można go połączyć z parametrem refundable_until_days, aby określić na przykład, że „zwrot środków jest możliwy do godziny 16:00 na 2 dni przed zameldowaniem”. Jeśli nie ustawisz wartości refundable_until_time, domyślnie zostanie przyjęta północ.

    Wartość tego atrybutu jest podana w formacie Time.

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

  • Jeśli zasada available lub refundable_until_days nie jest ustawiona, cena nie będzie wyświetlana jako podlegająca zwrotowi.
  • Jeśli wartość atrybutu available to 0 (lub false), inne atrybuty są ignorowane. Stawka nie jest wyświetlana jako podlegająca zwrotowi, nawet jeśli ustawiony jest jeden lub oba pozostałe atrybuty.
<RoomBundle> Optional <RoomBundle> Kontener z informacjami o wycenionych opisach fizycznych pokoju, wszelkich pakietach udogodnień i niektórych szczegółach zasad zakupu w danym hotelu i planie podróży.

Ogólnie rzecz biorąc, używaj tego elementu do określania cen pokoju podstawowego i różnych typów pokoi w tym samym obiekcie. Opisy pakietów pokoi można zdefiniować w treści wiadomości, ale zalecamy użycie osobnej wiadomości o transakcji. Google będzie przechowywać metadane, aby można było się do nich odwoływać, zamiast powtarzać je we wszystkich przyszłych aktualizacjach cen.

<RoomID> Optional string Unikalny identyfikator pokoju, który umożliwia mapowanie go na wstępnie zdefiniowane dane pokoju. Używany też do wypełniania zmiennej strony docelowej PARTNER-ROOM-ID. Więcej informacji znajdziesz w artykule Metadane pakietu pokoju.

W elemencie <Result> musisz uwzględnić <RoomBundle>, aby zdefiniować <PackageID><RoomID>. Zalecamy jednak, aby identyfikatory pakietu i pokoju były podawane tylko w elemencie <RoomBundle>, a nie w elemencie <Result>.

<Tax> Optional float Podatki obliczone dla ceny końcowej pokoju. Element <Tax> przyjmuje jeden wymagany atrybut currency, który określa trzyliterowy kod waluty podatków. Na przykład: USD. Element <Tax> jest wymagany, jeśli wartość <Baserate> jest większa niż zero.

Jeśli atrybut „all_inclusive” elementu <Baserate> jest wyraźnie ustawiony na wartość „true”, ustawienie tej wartości jest opcjonalne.

<Unavailable> Optional Object Wskazuje, że plan podróży jest niedostępny do rezerwacji. Służy jako kontener bardziej szczegółowych przyczyn niedostępności planu podróży. Pod tagiem <Unavailable> może być zagnieżdżony co najmniej jeden z tych powodów niedostępności:
  • <NoVacancy/>: brak dostępnych pokoi na sprzedaż na co najmniej jedną noc pobytu.
  • <MinNightStay value=N/>: plan podróży był krótszy niż minimalna liczba noclegów wynosząca N w przypadku dat pobytu.
  • <MaxNightStay value=N/>: plan podróży przekraczał maksymalną liczbę noclegów wynoszącą N w przypadku dat pobytu.
  • <MinAdvancePurchase value=N/>: plan podróży był poniżej minimalnego okresu rezerwacji z wyprzedzeniem wynoszącego N w przypadku dat pobytu.
  • <MaxAdvancePurchase value=N/>: Plan podróży wykraczał poza maksymalny okres rezerwacji z wyprzedzeniem wynoszący N dni w przypadku dat pobytu.
  • <ClosedToArrival/>: w obiekcie nie można się zameldować w dniu przyjazdu podanym w planie podróży.
  • <ClosedToDeparture/>: obiekt nie zezwala na wymeldowanie w dniu wyjazdu.
  • <PropertyClosed first_open="YYYY-MM-DD" first_closed="YYYY-MM-DD"/>: obiekt jest zamknięty przez część lub cały okres pobytu. Zalecane atrybuty first_open i first_closed określają pierwsze daty większe lub równe dacie przyjazdu, w których obiekt jest odpowiednio otwarty lub zamknięty. W przypadku obiektu, który jest zamykany po dacie przyjazdu, wartość first_open powinna być równa dacie przyjazdu, a wartość first_closed powinna być datą zamknięcia obiektu. W przypadku obiektu, który jest zamknięty w dniu przyjazdu, wartość first_closed powinna być równa dacie przyjazdu, a wartość first_opened powinna być następną datą, w której obiekt jest otwarty.
  • <NotFetched/>: cena planu podróży nie została podana przez źródła danych niższego rzędu.
  • <InvalidProperty/>: żądany identyfikator usługi nie został rozpoznany.
  • <InvalidOccupancy/>: Żądana liczba osób nie jest obsługiwana przez obiekt.
  • <PriceIssue/>: Wystąpił problem z ceną, dlatego nie została ona wysłana.
  • <InternalError reason=""/>: Wystąpił nieokreślony błąd. Opcjonalny atrybut reason może zgłaszać błąd w formie tekstu.
  • <OtherRestriction restriction=""/>: plan podróży był niedostępny z powodu nieokreślonego ograniczenia rezerwacji. Opcjonalny atrybut restriction umożliwia zgłaszanie ograniczenia w formie tekstu.

Przykłady

Przykład z wieloma usługami

W tym przykładzie zdefiniowano 1 plan podróży i jego 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>
    <MilesIncluded>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines"/>
      </Provider>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
    </MilesIncluded>
  </Result>
</Transaction>

W tym przykładzie nie ma informacji o pomieszczeniu, takich jak opis, zdjęcie z podpisem, nazwa pomieszczenia i jego pojemność.

Możesz zdefiniować te informacje raz w osobnym komunikacie Transaction, który Google przechowuje. Możesz się do niego odwoływać we wszystkich kolejnych aktualizacjach cen i asortymentu. Więcej informacji znajdziesz w artykule Metadane pakietu Room Bundle.

Przykład z wieloma stawkami

W tym przykładzie zdefiniowano pojedynczy plan podróży i obiekt z wieloma stawkami dla różnych liczb osób. Element <Rates> może służyć do podawania cen wielostawkowych dla konkretnego obiektu. Poniższy przykład jest również przydatny w przypadku kwater wakacyjnych:

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

W tym przykładzie zdefiniowano 1 plan podróży, którego dostępności nie można było pobrać z kanałów podrzędnych, 2 plan podróży, który jest krótszy niż minimalna długość pobytu i jest już zarezerwowany na podane daty, oraz 3 plan podróży, w którym 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 dla co najmniej 1 bloku <Rate>. Każdy symbol <Rate><Rates> określa inną cenę pokoju lub kombinacji planu podróży.

Elementu <Rates> używaj tylko wtedy, gdy dla tej samej kombinacji pokoju lub planu podróży jest dostępnych kilka stawek. Możesz na przykład zdefiniować wiele cen dla cen warunkowych, cen prywatnych lub cen warunkowych w pakietach pokoi.

Element <Rates> występuje w tym miejscu w hierarchii XML wiadomości o 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ą one ustawione w <Rate>, dziedziczą wartość z elementu nadrzędnego. Tylko element <AllowablePointsofSale> jest dziedziczony do elementu <RoomBundle>.

Składnia

Element <Rates> ma tę składnię:

<?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>
          ...
        <MilesIncluded>
          <NumberOfMiles>integer</NumberOfMiles>
          <Provider>
            <Text language="en" text="provider-name">
          </Provider>
          <LoyaltyCampaignID>campaign_ID</LoyaltyCampaignID>
        </MilesIncluded>
          ...
      </Rate>
      ...
    </Rates>
  </Result>
  ...
</Transaction>

Atrybuty

Element <Rates> ma te atrybuty:

Atrybut Wymagany? Opis
rate_rule_id Optional W przypadku cen warunkowych ten identyfikator dopasowuje cenę do definicji w pliku definicji reguł dotyczących cen. Limit znaków w tym polu wynosi 40.

Elementy potomne

Element <Rates> ma te elementy podrzędne:

Element podrzędny Wymagany? Typ Opis
<AllowablePointsOfSale> Optional Object Co najmniej 1 strona docelowa, która kwalifikuje się do wyświetlania reklam hotelu. Ten element używa tej samej składni co element <AllowablePointsOfSale> na stronie <Result>.
<Baserate> Required float Cena pokoju za pobyt. Ten element używa tej samej składni co element <Baserate> na stronie <Result>.

Uwaga: element podrzędny <Baserate> w elemencie <Rate> nie może być zdefiniowany jako niedostępny.

<ChargeCurrency> Optional enum Kiedy i gdzie użytkownik płaci za rezerwację. Ten element używa tej samej składni co element <ChargeCurrency><Result>.
Optional string Wycofane: pola niestandardowe, których możesz używać do przekazywania dodatkowych danych powiązanych z hotelem na stronę docelową. Ten element używa tej samej składni co <Custom[1‑5]><Result>. Każde pole niestandardowe może zawierać maksymalnie 200 znaków. Więcej informacji znajdziesz w sekcji pliki strony docelowej. Jeśli elementy <Custom> są podane w elemencie <Result>, nie są dziedziczone w elemencie <RoomBundle> i powinny być zdefiniowane oddzielnie dla każdego elementu <RoomBundle>. W razie potrzeby można je też uwzględnić w elemencie <PackageData>.

Ważne: jeśli chcesz używać zmiennych CUSTOM, skontaktuj się z technicznym menedżerem konta.

<ExpirationTime> Optional DateTime Data i godzina, po których stawka jest uznawana za nieaktualną. Ten element używa tej samej składni co element <ExpirationTime><Result>.
<MilesIncluded> Optional boolean Cena obejmuje mile w programie lojalnościowym. Parametry obejmują:
  • NumberOfMiles: liczba mil w przypadku każdej trasy.
  • Provider: dostawca mil w programie lojalnościowym linii lotniczej.
  • LoyaltyCampaignID: unikalny identyfikator, który określa konkretną kampanię lojalnościową skonfigurowaną i zaktualizowaną w Google. Dodaje punkty lojalnościowe do ceny hotelu.

    Aby uwzględnić element <MilesIncluded>, identyfikator kampanii należy skonfigurować w konfiguracji kampanii lojalnościowej. Szczegółowe informacje o tym, jak Google wykorzystuje punkty lojalnościowe w wynikach, zależą od konfiguracji kampanii lojalnościowej.

    Element <MilesIncluded> ma element podrzędny <NumberOfMiles>, który oblicza liczbę zdobytych punktów. Jeśli zasada <NumberOfMiles> nie jest skonfigurowana, zdobyte punkty są określane przez konfigurację kampanii lojalnościowej.

    <MilesIncluded>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines">
      </Provider>
    </MilesIncluded>
  • Uwaga: <NumberOfMiles> i <Provider> są opcjonalne.

<Occupancy> Optional integer

Określa maksymalną liczbę osób, które mogą przebywać w obiekcie w przypadku tej ceny. Jeśli nie zostanie określona, przyjmuje się, że jest taka sama jak stawka nadrzędna. <Occupancy> może być uzupełniony o <OccupancyDetails>, który określa typ gości (osoby dorosłe lub dzieci). Składnię i opis 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><Result>.

Jeśli atrybut „all_inclusive” elementu <Baserate> jest wyraźnie ustawiony na wartość „true”, ustawienie tej wartości jest opcjonalne.

<Refundable> Optional Object Umożliwia wyświetlanie informacji o tym, że stawka podlega pełnemu zwrotowi lub że można bezpłatnie anulować rezerwację. Jeśli nie podasz tych informacji, nie będą wyświetlane ż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> mają wyższy priorytet niż zasady zwrotów na poziomie <PackageData>. Ceny z możliwością zwrotu środków można też wyróżnić przed użytkownikami za pomocą alternatywnych opcji bez bezpośredniego modyfikowania schematu wiadomości o transakcji. Dowiedz się więcej o tych opcjach: zasady dotyczące stawek podlegających zwrotowi.

Poniższy przykład pokazuje element <Refundable> z ustawionymi wszystkimi atrybutami:

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

Uwaga: zalecamy ustawienie wszystkich atrybutów. Komunikat ostrzegawczy o stanie pliku danych jest generowany, gdy co najmniej 1 atrybut nie jest ustawiony.

Jeśli nie ustawisz żadnych atrybutów, cena nie będzie wyświetlana jako podlegająca zwrotowi. Atrybuty to:

  • available: (Wymagany) 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: (Wymagane, jeśli available ma wartość true) Określa liczbę dni przed datą zameldowania, w przypadku których 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: (Wysoce zalecane, jeśli available to true) Określa najpóźniejszą godzinę w ciągu dnia (według lokalnego czasu hotelu), do której uwzględniana jest prośba o pełny zwrot środków. Można go połączyć z parametrem refundable_until_days, aby określić na przykład, że „zwrot środków jest możliwy do godziny 16:00 na 2 dni przed zameldowaniem”. Jeśli nie ustawisz wartości refundable_until_time, domyślnie zostanie przyjęta północ.

    Wartość tego atrybutu jest podana w formacie Time.

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

  • Jeśli zasada available lub refundable_until_days nie jest ustawiona, cena nie będzie wyświetlana jako podlegająca zwrotowi.
  • Jeśli wartość atrybutu available to 0 (lub false), inne atrybuty są ignorowane. Stawka nie jest wyświetlana jako podlegająca zwrotowi, nawet jeśli ustawiony jest jeden lub oba pozostałe atrybuty.
<Tax> Required float Podatki obliczone dla ceny końcowej pokoju. Element używa tej samej składni co element <Tax><Result>.

Przykłady

Cena podstawowa i cena warunkowa

Poniższy przykład pokazuje wiadomość o transakcji, która 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>
      </Rate>
    </Rates>

  </Result>
</Transaction>

Wiele cen warunkowych

Poniższy przykład definiuje stawkę podstawową i wiele stawek warunkowych w ramach elementu <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>

      <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>
        </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>
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>

<RoomBundle>

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

Element <RoomBundle> występuje w tym miejscu w hierarchii XML wiadomości o transakcji:

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

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

Składnia

Element <RoomBundle> ma tę składnię:

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

      <!-- Add Loyalty point information -->
      <MilesIncluded>
        <NumberOfMiles>integer</NumberOfMiles>
        <Provider>
          <Text language="en" text="provider-name">
        </Provider>
        <LoyaltyCampaignID>campaign_ID</LoyaltyCampaignID>>
      </MilesIncluded>

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

    </RoomBundle>
    ...
  </Result>
</Transaction>

Atrybuty

Element <RoomBundle> nie ma atrybutów.

Elementy potomne

Element <RoomBundle> ma te elementy podrzędne:

Element podrzędny Wymagany? Typ Opis
<Baserate> Required float Określa cenę pakietu pokoju za pobyt. Ten element używa tej samej składni co <Baserate> w <Result>, z tym wyjątkiem:
  • Jeśli pokój jest niedostępny w przypadku danego planu podróży, usuń element <RoomBundle>, aby wskazać, że pokój nie jest już dostępny. Więcej informacji znajdziesz w artykule Usuwanie pakietu sali.
<BreakfastIncluded> Optional boolean Określa, czy ten pakiet pokoju 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><Result>.

Wartością domyślną jest web.

Optional string Wycofane: pola niestandardowe do przekazywania dodatkowych danych na strony docelowe pakietu pokoi. Te elementy używają tej samej składni co <Custom[1-5]><Result>. Każde pole niestandardowe może zawierać maksymalnie 200 znaków. Więcej informacji znajdziesz w sekcji Pliki strony docelowej. Zmienne niestandardowe są wymienione tylko wtedy, gdy wysyłasz ceny w wiadomości o transakcji. Jeśli elementy <Custom> są podane w elemencie <Result>, nie są dziedziczone w elemencie <RoomBundle> i powinny być zdefiniowane oddzielnie dla każdego elementu <RoomBundle>. W razie potrzeby można je też uwzględnić w elemencie <PackageData>.

Ważne: jeśli chcesz używać zmiennych CUSTOM, skontaktuj się z technicznym menedżerem konta.

<InternetIncluded> Optional boolean Jeśli pakiet pokoju 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 internet we wszystkich pokojach. Ten element nie dotyczy przewodowego internetu w pokojach ani bezprzewodowego internetu, który nie jest dostępny w pokojach gości.
<MilesIncluded> Optional boolean Cena obejmuje mile w programie lojalnościowym. Parametry obejmują:
  • NumberOfMiles: liczba mil w przypadku każdej trasy.
  • Provider: dostawca mil w programie lojalnościowym linii lotniczej.
  • LoyaltyCampaignID: unikalny identyfikator, który określa konkretną kampanię lojalnościową skonfigurowaną i zaktualizowaną w Google. Dodaje punkty lojalnościowe do ceny hotelu.

    Aby uwzględnić identyfikator kampanii <MilesIncluded>, należy go skonfigurować w konfiguracji kampanii lojalnościowej. Szczegółowe informacje o tym, jak Google wykorzystuje punkty lojalnościowe w wynikach, zależą od konfiguracji kampanii lojalnościowej.

    Element <MilesIncluded> ma element podrzędny <NumberOfMiles>, który oblicza liczbę zdobytych punktów. Jeśli zasada <NumberOfMiles> nie jest skonfigurowana, zdobyte punkty są określane przez konfigurację kampanii lojalnościowej.

    <MilesIncluded>
      <LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
      <NumberOfMiles>1200</NumberOfMiles>
      <Provider>
        <Text language="en" text="United Airlines">
      </Provider>
    </MilesIncluded>
  • Uwaga: <NumberOfMiles> i <Provider> są opcjonalne.

<Occupancy> Required integer Określa maksymalną liczbę osób, które mogą przebywać w obiekcie w przypadku tej ceny. Na przykład duży apartament może pomieścić 6 osób, ale „Pakiet dla nowożeńców” jest przeznaczony tylko dla 2 osób.

Ta wartość musi być mniejsza lub równa <Capacity>, czyli liczbie osób, które mogą fizycznie zmieścić się w pomieszczeniu.

Podczas określania liczby osób w adresie URL strony docelowej używaj zmiennych NUM-ADULTSNUM-CHILDREN, jak opisano w artykule Używanie zmiennych i warunków. Wartość domyślna to 2 dorośli i 0 dzieci.

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

Uwagi:

  • <Occupancy> w przypadku <RoomBundle> jest zdecydowanie zalecane, dlatego jest oznaczone jako wymagane i w przypadku pominięcia spowoduje błąd 1097.
  • Wartość <Occupancy> pochodzi z obiektu danych w tej kolejności: <RoomBundle>, <PackageData>, a następnie = <RoomData>. Jeśli w żadnym z tych pól nie ma wartości, domyślnie używana jest wartość 2.
  • <Occupancy> może być uzupełniony o <OccupancyDetails>, który określa typ gości (osoby dorosłe lub dzieci). Jeśli typy gości nie są określone, przyjmuje się, że są to osoby dorosłe. Składnię i opis elementów podrzędnych znajdziesz w dokumencie <OccupancyDetails>.
  • Jeśli ustawisz parametr <Occupancy> zarówno w <RoomBundle>, jak i w <PackageData>, pierwszeństwo ma wartość w <RoomBundle>.
<OtherFees> Required float Opłaty inne niż stawka podstawowa i podatki, które wpływają na ostateczną cenę pokoju. Element <OtherFees> przyjmuje jeden wymagany atrybut currency, który określa trzyliterowy kod waluty opłat. Na przykład w przypadku dolarów amerykańskich użyj symbolu USD.
<PackageID> Optional (recommended) string Unikalny identyfikator danych pakietu. Użyj tego identyfikatora, aby dopasować dane pakietu pomieszczeń do danych wysłanych w <PackageData>. Więcej informacji znajdziesz w artykule Metadane pakietu sal. (Możesz też użyć tego identyfikatora, aby odwołać się do wspólnej definicji pakietu pokoi używanej w jednej wiadomości o transakcji podczas definiowania danych pakietu pokoi w treści wiadomości).
<ParkingIncluded> Optional boolean Określa, czy pakiet pokoju obejmuje bezpłatny parking, w przypadku gdy w tym hotelu parking jest usługą płatną. Nie podawaj wartości tego elementu w przypadku hotelu, który oferuje bezpłatny parking.

Prawidłowe wartości to 0 (lub false) i 1 (lub true). Wartością domyślną jest false.

<RatePlanID> Optional string Identyfikator planu cenowego to unikalny identyfikator kombinacji pokoju i pakietu. Jeśli na przykład wartość <RoomID> wynosi 5, a wartość <PackageID> to ABC, możesz użyć wartości 5-ABC dla <RatePlanID>. Zdecydowanie zalecamy używanie zmiennej RatePlanID do tworzenia dynamicznego adresu URL strony docelowej (wcześniej: punkt sprzedaży).

Więcej informacji znajdziesz w artykule Używanie zmiennych i warunków.

<Rates> Optional <Rates> Stawki, które zastępują domyślne stawki dla tego pakietu pokoi. Ten element używa tej samej składni co <Rates> w <Result>.
<Refundable> Optional Object Umożliwia wyświetlanie informacji o tym, że stawka podlega pełnemu zwrotowi lub że można bezpłatnie anulować rezerwację. Jeśli nie podasz tych informacji, nie będą wyświetlane ż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> mają wyższy priorytet niż zasady zwrotów na poziomie <PackageData>. Ceny z możliwością zwrotu środków można też wyróżnić przed użytkownikami za pomocą alternatywnych opcji bez bezpośredniego modyfikowania schematu wiadomości o transakcji. Dowiedz się więcej o tych opcjach: zasady dotyczące stawek podlegających zwrotowi.

Poniższy przykład pokazuje element <Refundable> z ustawionymi wszystkimi atrybutami:

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

Uwaga: zalecamy ustawienie wszystkich atrybutów. Komunikat ostrzegawczy o stanie pliku danych jest generowany, gdy co najmniej 1 atrybut nie jest ustawiony.

Jeśli nie ustawisz żadnych atrybutów, cena nie będzie wyświetlana jako podlegająca zwrotowi. Atrybuty to:

  • available: (Wymagany) 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: (Wymagane, jeśli available ma wartość true) Określa liczbę dni przed datą zameldowania, w przypadku których 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: (Wysoce zalecane, jeśli available to true) Określa najpóźniejszą godzinę w ciągu dnia (według lokalnego czasu hotelu), do której uwzględniana jest prośba o pełny zwrot środków. Można go połączyć z parametrem refundable_until_days, aby określić na przykład, że „zwrot środków jest możliwy do godziny 16:00 na 2 dni przed zameldowaniem”. Jeśli nie ustawisz wartości refundable_until_time, domyślnie zostanie przyjęta północ.

    Wartość tego atrybutu jest podana w formacie Time.

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

  • Jeśli zasada available lub refundable_until_days nie jest ustawiona, stawka nie będzie wyświetlana jako podlegająca zwrotowi.
  • Jeśli wartość atrybutu available to 0 (lub false), inne atrybuty są ignorowane. Stawka nie jest wyświetlana jako podlegająca zwrotowi, nawet jeśli ustawiony jest jeden lub oba pozostałe atrybuty.
<RoomID> Required string Unikalny identyfikator danych pokoju. Użyj tego identyfikatora, aby dopasować dane pakietu pokoi do danych przesłanych w <RoomData>. Więcej informacji znajdziesz w sekcji Metadane pakietu sal. (Możesz też użyć tego identyfikatora, aby odwołać się do wspólnej definicji pokoju w jednej wiadomości o transakcji podczas definiowania danych pokoju w formie wbudowanej).
<Tax> Required float Podatki obliczone dla ceny końcowej pokoju. Element <Tax> przyjmuje jeden wymagany atrybut currency, który określa trzyliterowy kod waluty podatków. Na przykład w przypadku dolarów amerykańskich użyj USD.

Przykłady

Pakiet dla 1 osoby

Poniższy przykład przedstawia odpowiedź z jednym pakietem dla 1 osoby. Gdy użytkownik wybierze 1 w selektorze liczby osób, Google wyświetli najniższą kwalifikującą się cenę niezależnie od liczby osób.

Jeśli cena za pobyt 1 osoby nie jest dostępna, Google wyświetli najniższą cenę za pobyt 2 osób. Pamiętaj, że ceny za pobyt 1 osoby nie są sprawdzane na bieżąco, jeśli w przypadku danej trasy są zapisane w pamięci podręcznej ceny za pobyt 2 lub więcej osób.

Ten przykład odwołuje się do wstępnie zdefiniowanych metadanych pokoju i pakietu za pomocą elementów <RoomID> i <PackageID>. Aby zdefiniować te informacje, użyj elementów <RoomData><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 rodzaje użytkowania

Poniższy przykład definiuje odpowiedź zawierającą co najmniej 2 okresy zajętości.

Ten przykład odwołuje się do wstępnie zdefiniowanych metadanych pokoju i pakietu za pomocą elementów <RoomID> i <PackageID>. Aby zdefiniować te informacje, użyj elementów <RoomData><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 wieloma pokojami

Poniższy przykład ustawia wartość Occupancy w kilku pakietach Room, aby zademonstrować możliwe ceny pokoi w hostelu.

<?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 definiuje stawkę podstawową i wiele stawek warunkowych w ramach elementu <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>

      <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>
        </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>
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>

<OccupancyDetails>

<Occupancy> w wiadomości transakcyjnej określa maksymalną liczbę gości w pokoju lub pakiecie. <OccupancyDetails> może zawierać dodatkowe informacje, takie jak liczba i rodzaj gości (osoby dorosłe lub dzieci).

Jeśli w elemencie <Rates><Result> lub <RoomBundle> pojawią się znaczniki <Occupancy><OccupancyDetails>, oznacza to, że stawka jest ograniczona przez szczegóły dotyczące obłożenia.

Jeśli w elemencie <RoomBundle> umieścisz element <OccupancyDetails> wraz z zagnieżdżonym elementem <Rate>, nie możesz wysłać podstawowego elementu <Occupancy> w elemencie <Rate>. Zamiast tego zalecamy jedną z tych opcji:

  • Pomiń liczbę osób w przypadku <Rate>: w tym przypadku <Rate> dziedziczy <OccupancyDetails> bezpośrednio z <RoomBundle>.

lub

  • Zduplikowany element <OccupancyDetails>: w tym przypadku wyślij dodatkowy identyczny element <OccupancyDetails> zarówno w elemencie <RoomBundle>, jak i w zagnieżdżonym elemencie <Rate>.

Składnia

Gdy pojawia się znak <OccupancyDetails>, zawsze poprzedza go znak <Occupancy>. Pamiętaj o tej 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> ma te elementy podrzędne:

Element podrzędny Wymagany? Typ Opis
<NumAdults> Required integer Liczba dorosłych gości. Min.: 1, maks.: 20.
<Children> Optional Object Kontener dla co najmniej 1 elementu <Child>.
<Child age> Optional integer Maksymalny wiek dziecka, np. <Child age="17">.

Przykłady

Poniższe przykłady pokazują, jak element <OccupancyDetails> może występować w elementach <Results>, <RoomBundle> lub w elemencie podrzędnym <Rates>.

Odpowiedź z wynikami

Poniższy przykład przedstawia 1 plan podróży i jego cenę w przypadku 1 obiektu w odpowiedzi na zapytanie o ceny w czasie rzeczywistym, w którym użytkownik określił liczbę i rodzaje gości. W tym przypadku w <Result> zwracana jest wartość <OccupancyDetails> – 2 osoby dorosłe i 1 dziecko.

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

Odpowiedź dotycząca stawek

Poniższy przykład pokazuje, jak zdefiniować 1 plan podróży i jego cenę dla 1 osoby dorosłej i 1 dziecka. W tym przypadku <OccupancyDetails> są zwracane w elemencie <Rates>.<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>
        <AllowablePointsOfSale>
          <PointOfSale id="yourhotelpartnersite.com"/>
        </AllowablePointsOfSale>
      </Rate>
    </Rates>
  </Result>
</Transaction>

Pakiet z pokojem

Poniższy przykład określa obłożenie na 2 osoby dorosłe i 1 dziecko na 2 noce z możliwością zwrotu środków. W tym przypadku <OccupancyDetails> pojawiają się w <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 wieloma pokojami

Poniższy przykład definiuje kilka cen <RoomBundle>, które są ograniczone do 2 osób dorosłych i 2 dzieci. W tym przypadku element <OccupancyDetails> występuje w elemencie <Rates> elementu <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>
      <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>
        </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>
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>