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

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

<Transaction>

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

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

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

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

Składnia

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

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

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

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

</Transaction>

Atrybuty

Element <Transaction> ma te atrybuty:

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

Moment wysłania wiadomości o transakcji.

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

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

Elementy potomne

Element <Transaction> ma te elementy podrzędne:

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

Opisuje konkretne sale i pakiety pokoi. Tego elementu zwykle używa się w osobnej wiadomości dotyczącej transakcji, aby zdefiniować wspólne wartości dla pakietów pokoi i zmniejszyć rozmiar wiadomości o transakcjach.

<Result> Optional* <Result>

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

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

Przykłady

Dane dotyczące pomieszczenia

Ten przykład pokazuje zdefiniowanie danych pokoju w prostej wiadomości o 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 dotyczące cen

Poniższy przykład pokazuje dane o cenach w prostej wiadomości transakcji:

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

Ceny za noc

W tym przykładzie zdefiniowano dane o cenach za okres od 1 do 7 nocy od 7 czerwca 2023 r.:

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


Ceny podstawowe i warunkowe

Poniższy przykład pokazuje komunikat o transakcji zawierający stawkę podstawową i stawkę warunkową:

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

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

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

  </Result>
</Transaction>

Usuwanie zasobów reklamowych

W tym przykładzie usunięto z asortymentu kilka zasobów reklamowych (pobyty na 1 noc w różnych dniach):

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

<PropertyDataSet>

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

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

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

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

Składnia

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

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

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

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

Atrybuty

Element <PropertyDataSet> nie ma atrybutów.

Elementy potomne

Element <PropertyDataSet> ma te elementy podrzędne:

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

Podajesz identyfikator pakietu w aktualizacji cen.

Więcej informacji znajdziesz w artykule o metadanych pakietu sal.

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

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

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

Przykłady

Dane dotyczące sal i pakietów

Ten przykład pokazuje dane dotyczące sal i pakietów w pliku <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>

Przesyłając ceny i dostępność tego pokoju lub pakietu, w komunikatach o cenach podajesz identyfikatory pokoi i pakietów. W efekcie znacznie zmniejszasz rozmiar wiadomości i zmniejszasz liczbę błędów, które mogą wystąpić z powodu duplikowania danych. Więcej informacji znajdziesz w artykule o metadanych pakietów sal.

<RoomData>

Definiuje niezależne od planu podróży metadane dotyczące pokojów, a przede wszystkim grupy pokoi (bo pakiety pokoi to pokoje z dodatkowymi udogodnieniami). Aby ograniczyć powtarzanie danych opisowych w pliku danych z cenami, użyj atrybutu <RoomData>.

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

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

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

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

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

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

Składnia

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

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

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

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

      <Capacity>max_number_of_occupants</Capacity>
      <Occupancy>max_number_of_intended_occupants</Occupancy>
      <OccupancyDetails> <!-- optional info about the types of guests,
      whether adults, children, or seniors --></OccupancyDetails>
      <OccupancySettings>
        <MinOccupancy>min_number_of_occupants</MinOccupancy>
        <MinAge>min_age_of_occupants</MinAge>
      </OccupancySettings>

      <PhotoURL>
        <Caption>
          <Text text="photo_description" language="language_code"/>
          ...
        </Caption>
        <URL>photo_location</URL>
      </PhotoURL>
      <RoomFeatures>
        ...
      </RoomFeatures>
    </RoomData>
    ...
  </PropertyDataSet>
</Transaction>

Atrybuty

Element <RoomData> nie ma atrybutów.

Elementy potomne

Element <RoomData> ma te elementy podrzędne:

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

Jeśli została określona, musi być równa wartości elementu <Occupancy>, czyli planowanej liczby gości danej sali, lub od niej większa. Na przykład w dużym pakiecie <Capacity> może mieć wartość 6, ale <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 w innych elementach ani w elemencie <Name>. Opis pokoju nie powinien zawierać samych wielkich liter.

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

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

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

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

<Description>
  <Text text="Two queen-sized beds" language="en"/>
  <Text text="Deux lits de la reine" language="fr"/>
</Description>
<Name> Required string Nazwa kategorii pokoju. Ta wartość powinna odpowiadać wartości wyświetlanej na stronie docelowej hotelu (dawniej punktu sprzedaży). Nie ustawiaj wartości tego elementu wyłącznie na wielkie litery.

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

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

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

Ten przykład pokazuje francuską i angielską wersję nazwy sali:

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

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

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

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

<OccupancySettings> Optional Object Ustawienia, które mogą ograniczać lub modyfikować wymagania dotyczące obłożenia sali.

Element <OccupancySettings> przyjmuje te elementy podrzędne:

  • <MinOccupancy>: minimalna liczba gości, którzy mogą przebywać w pokoju. Jeśli np. ustawiona jest wartość 2, tej sali nie można zarezerwować dla jednego gościa.

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

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

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

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

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

<PhotoURL> Optional Object Adres URL i opcjonalny podpis zdjęcia danego pokoju lub zestawu pokoi. Dla pokoju lub pakietu pokoi możesz określić więcej niż 1 element <PhotoURL>. Każdy adres URL zdjęcia musi mieć własny element <PhotoURL>.

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

  • <URL>: określa lokalizację zdjęcia. Lokalizacja powinna być publiczna (nie za zaporą sieciową) i powinna zawierać protokół (np. https://). Użyj tylko jednego <URL> na <PhotoURL>.
  • <Caption>: definiuje podpis zdjęcia. Ten element przyjmuje pojedynczy element podrzędny <Text>, który ma 2 wymagane atrybuty: text i language. Atrybut text to podpis, a atrybut language określa dwuliterowy kod języka, np. en.

Przykład:

<PhotoURL>
  <URL>https://www.example.com/static/bar/image1234.jpg</URL>
  <Caption>
    <Text text="A bright and breezy way to enjoy your mornin'
      cuppa tea." language="en"/>
    <Text text="Une façon lumineuse et aérée pour profiter
      de votre journée tasse de thé." language="fr"/>
  </Caption>
</PhotoURL>
<PhotoURL>
  <URL>https://www.foo.com/static/bar/image5678.jpg</URL>
  <Caption>
    <Text text="Or, perhaps you prefer coffee." language="en"/>
    <Text text="Ou peut-être préférez-vous le café." language="fr"/>
  </Caption>
</PhotoURL>
<RoomFeatures> Optional <RoomFeatures> Zawiera informacje o wyposażeniu pokoju.
<RoomID> Required string Unikalny identyfikator sali. Użyj tego identyfikatora, aby dopasować dane sal do bloków <Result> w aktualizacji cen. Więcej informacji znajdziesz w sekcji Metadane pakietu sal. Możesz też użyć tego identyfikatora, aby odwołać się do definicji świetlicy w pojedynczej wiadomości dotyczącej transakcji, gdy zdefiniujesz wbudowane dane pokoju.

Przykłady

Dane dotyczące pomieszczenia

W tym przykładzie zdefiniowano dane dotyczące sal:

<?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 dotyczące sali i pakietu

Poniższy przykład zawiera metadane dotyczące sali i pakietu:

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

Pakiety z kilkoma pokojami

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

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

<RoomFeatures>

Określa cechy znalezione w pokoju.

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

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

Składnia

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

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <PropertyDataSet ... >
    ...
    <RoomData>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>[western|japanese|japanese_western]</JapaneseHotelRoomStyle>
        <Beds>
           <Bed size="[single|semi_double|double|queen|king]">
             <Width unit="cm" number="width"/>
             <Length unit="cm" number="length"/>
           </Bed>
           <!-- Include with any additional beds. -->
        </Beds>
        <Suite/>
        <Capsule/>
        <Roomsharing>[shared|private]</Roomsharing>
        <Outdoor/>
        <MobilityAccessible/>
        <Smoking>[smoking|non_smoking]</Smoking>
        <BathAndToilet relation="[together|separate]">
          <Bath bathtub="[false|true]" shower="[false|true]"/>
          <Toilet electronic_bidet="[false|true]" mobility_accessible="[false|true]"/>
        </BathAndToilet>
        <OpenAirBath/>
        <AirConditioning/>
        <Balcony/>
        <Views>
          <!-- (Optional) Defines the type of views from the room. -->
          <!-- Example: <OceanView/> -->
        </Views>

      </RoomFeatures>
      ...
    </RoomData>
    ...
  </PropertyDataSet>
</Transactions>

Atrybuty

Element <RoomFeatures> nie ma atrybutów.

Elementy potomne

Element <RoomFeatures> ma te elementy podrzędne:

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

Wskazuje styl japońskiego pokoju hotelowego.

Prawidłowe wartości to:

  • western: urządzony w zachodnim stylu pokój z łóżkami.
  • japanese: pokój w stylu japońskim z łóżkami z futonem.
  • japanese_western: pokój w stylu japońskim w stylu zachodnim z łóżkami w stylu zachodnim i futonami w japońskim stylu.
<Beds> Optional Object Liczba pokoi w pokoju <Bed> jest równa liczbie dostępnej w pokoju. Pamiętaj, że nie uwzględniamy tutaj japońskich futonów.

Każdy element <Bed> ma te atrybuty:

  • size (opcjonalny): prawidłowe wartości to single, semi_double, double, queen i king.
Każdy element <Bed> zawiera te elementy podrzędne:
  • <Width> (opcjonalny): określa szerokość łóżka. Musi mieć atrybut unit o wartości cm oraz atrybut number zawierający szerokość łóżka w centymetrach całkowitych.
  • <Length> (opcjonalny): określa długość łóżka. Musi mieć atrybut unit o wartości cm oraz atrybut number zawierający długość łóżka w centymetrach całkowitych.
Przykład:
<Beds>
  <Bed size="double">
    <Width unit="cm" number="140"/>
    <Length unit="cm" number="195"/>
  </Bed>
  <Bed/> <!-- Size unknown -->
</Beds>
<Suite> Optional empty Dodaj ten element, jeśli pokój jest apartamentem.
<Capsule> Optional empty Dodaj ten element, jeśli pokój jest kapsułą.
<Roomsharing> Optional enum Określa, czy sala jest udostępniana innym osobom, np. właścicielom lub innym gościom. Prawidłowe wartości to shared i private.
<Outdoor> Optional empty Użyj tego elementu, jeśli pokój to hotel na zewnątrz, który nie ma stałych ścian, hydrauliki ani klimatyzacji. Na przykład pokoje hotelowe nie są zakwaterowaniem na świeżym powietrzu, a kempingi, w których goście przebywają w namiotach, i parkingi dla kamperów, do których przyjeżdżają własne kamery, – miejsca zakwaterowania na świeżym powietrzu.
<MobilityAccessible> Optional empty Dodaj ten element, gdy sala jest przystosowana do urządzeń mobilnych.
<Smoking> Optional enum Czy jest to pokój dla niepalących, czy też pokój dla palących. Prawidłowe wartości to non_smoking i smoking.
<BathAndToilet> Optional Object zawiera informacje na temat wanny i toalety w pokoju.

Atrybut to:

  • relation (opcjonalny): wskazuje, w jaki sposób wanna i toaleta są umieszczone względem siebie. Prawidłowe wartości to together (łaźnia i toaleta znajdują się razem w tym samym pomieszczeniu (np. w łazience) obok siebie) i separate (łaźnia i toaleta mają przypisane miejsca). Nie należy ustawiać tego atrybutu, jeśli w pomieszczeniu nie ma ani łaźni, ani toalety.

Element opcjonalnie pobiera te elementy podrzędne:

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

    Atrybuty to:

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

    Atrybuty to:

    • electronic_bidet (opcjonalny): wskazuje, że toaleta jest wyposażona w elektroniczny bidet. Prawidłowe wartości to 0 (lub false) i 1 (lub true).
    • mobility_accessible (opcjonalny): wskazuje, że toaleta jest przystosowana dla osób z niepełnosprawnoś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 Dodaj ten element, jeśli w pokoju znajduje się prywatna łazienka na świeżym powietrzu.
<AirConditioning> Optional empty Dodaj ten element, jeśli pokój jest klimatyzowany.
<Balcony> Optional empty Dodaj ten element, jeśli pokój ma balkon lub werandę.
<Views> Optional Object Możliwe opcje:

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

Przykłady

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

2 łóżka pojedyncze

Ten przykład pokazuje, jak użyć atrybutu <RoomFeatures>:

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

2 łóżka podwójne

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

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


Japoński bez łóżka

Poniżej znajdziesz przykład pokoju bez łóżka w japońskim stylu. Informacje o łóżku 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>
      <RoomFeatures>
        <JapaneseHotelRoomStyle>japanese</JapaneseHotelRoomStyle>
      </RoomFeatures>
    </RoomData>
  </PropertyDataSet>
</Transaction>

Japoński western z łóżkiem

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

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

Jeśli partner nie ma informacji o liczbie łóżek w japanese_western pokojach, skorzystaj z tego przykładu:

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

<PackageData>

Definiuje niezależne od planu podróży metadane dotyczące pakietów pokojów obiektu. Zawiera on informacje powiązane z partnerem i hotelem, ale nie z planem podróży. Jego celem jest jednorazowe zdefiniowanie wszystkich danych niebędących podróżami i odwołanie się do nich w danych planu podróży.

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

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

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

W przypadku tego samego pokoju lub zestawu pokoi możesz zdefiniować elementy <RoomData> i <PackageData>. Gdy Google wyświetla w wynikach wyszukiwania tę salę lub pakiet, będzie zawierać opis obu pokoi oddzielony łącznikiem.

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

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

Składnia

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

<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
  <PropertyDataSet ... >
    <PackageData>
      <PackageID>package_ID</PackageID>
      <Name>
        <Text text="package_name" language="language_code"/>
        ...
      </Name>
      <Description>
        <Text text="package_description" language="language_code"/>
        ...
      </Description>
      <Refundable available="[false|true]" refundable_until_days="number_of_days"
        refundable_until_time="time"/>
      <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency>
      <Occupancy>max_number_of_intended_occupants</Occupancy>
      <OccupancyDetails><!-- optional info about the types of guests,
      whether adults or children --></OccupancyDetails>
      <!-- For these next 3 elements, boolean_value can be 0/1 or true/false -->
      <BreakfastIncluded>boolean_value</BreakfastIncluded>
      <InternetIncluded>boolean_value</InternetIncluded>
      <ParkingIncluded>boolean_value</ParkingIncluded>
      <PhotoURL>
        <Caption>
          <Text text="photo_description" language="language_code"/>
          ...
        </Caption>
        <URL>photo_location</URL>
      </PhotoURL>
      ...
      <Meals>
        <Breakfast
          included="[true|false]" buffet="[true|false]"
          in_room="[true|false]" in_private_space="[true|false]"/>
        <Dinner
          included="[true|false]" buffet="[true|false]"
          in_room="[true|false]" in_private_space="[true|false]"/>
      </Meals>
      <CheckinTime>checkin_time</CheckinTime>
      <CheckoutTime>checkout_time</CheckoutTime>
      <MembershipBenefitsIncluded>
        <ProgramName>
          <Text language="en" text="Special Rewards">
        </ProgramName>
        <ProgramLevel>
          <Text language="en" text="Platinum">
        </ProgramLevel>
      </MembershipBenefitsIncluded>
      <OnPropertyCredit>
        <Amount currency="USD">123.45</Amount>
      </OnPropertyCredit>
    </PackageData>
    <!-- a PackageID with a MilesIncluded rate feature -->
    <PackageData>
      <PackageID>room_with_miles</PackageID>
      <Name>
       <Text text="Room with Bundled Miles" language="en">
      </Name>
      <ChargeCurrency>hotel </ChargeCurrency>
      <MilesIncluded>
        <NumberOfMiles>1000 </NumberOfMiles>
        <Provider>
          <Text language="en" text="United Airlines">
        </Provider>
      </MilesIncluded>
    </PackageData>
    ...
    ...
  </PropertyDataSet>
  ...
</Transaction>

Atrybuty

Element <PackageData> nie ma atrybutów.

Elementy potomne

Element <PackageData> ma te elementy podrzędne:

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

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

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

Wartością domyślną jest web.

<CheckinTime> Optional Time Najwcześniejsza możliwa godzina zameldowania. Godzina nie może być późniejsza niż 24:00 czasu lokalnego.
<CheckoutTime> Optional Time Najpóźniejsze możliwe wymeldowanie według czasu lokalnego.
<Description> Optional Object Szczegółowy opis pakietu. Ten element powinien zawierać informacje, które nie są opisane w innych elementach ani w elemencie <Name>. Opis pokoju nie powinien zawierać samych wielkich liter.

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

<Description>
  <Text text="Two breakfast buffet certificates for
    each night of stay." language="en"/>
  <Text text="Deux certificats petit-déjeuner buffet
    pour chaque nuit de séjour." language="fr"/>
</Description>
<InternetIncluded> Optional boolean Pakiet obejmuje bezpłatny dostęp do internetu, podczas gdy inne pakiety nie obejmują tego udogodnienia. Nie ustawiaj tego elementu dla pakietów pokoi w hotelu, który ma bezpłatny dostęp do internetu we wszystkich pokojach. Nie dotyczy on internetu przewodowego ani bezprzewodowego w pokoju, który nie jest dostępny w pokojach gościnnych. Prawidłowe wartości to 0 (lub false) i 1 (lub true).
<Meals> Optional Object Zawiera informacje o posiłkach w tym opakowaniu.

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

  • included (wymagany): ustaw na 1 (lub true), jeśli cena obejmuje śniadanie/kolację; w przeciwnym razie ustaw wartość 0 lub false.
  • in_room (opcjonalny): ustaw na 1 (lub true), jeśli goście mogą zjeść śniadanie/kolację w pokoju, w którym się przebywają; w innym przypadku ustaw wartość 0 (lub false).
  • in_private_space (opcjonalny): ustaw na 1 (lub true), jeśli goście mają możliwość zjedzenia śniadania/kolacji w pomieszczeniu (z wyjątkiem pokoju, w którym zatrzymują się), gdzie mogą uniknąć kontaktu z innymi gośćmi. W przeciwnym razie ustaw wartość 0 (lub false).
  • buffet (opcjonalny): ustaw na 1 (lub true), jeśli śniadanie/kolacja jest podawane w formie bufetu. W przeciwnym razie ustaw wartość 0 (lub false).

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

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

<Name> Required string Nazwa pakietu. Ta wartość powinna odpowiadać wartości wyświetlanej na stronie docelowej hotelu. Nie ustawiaj wartości tego elementu wyłącznie na wielkie litery.

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

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

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

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

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

Uwaga:

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

<PackageID> Required string Unikalny identyfikator pakietu. Użyj tego identyfikatora, aby dopasować dane pakietu sal do bloków <Result> w aktualizacjach cen. Więcej informacji znajdziesz w artykule o metadanych pakietu sal.

Możesz też użyć tego identyfikatora, aby odwołać się do definicji wspólnego pakietu pokoi w pojedynczej wiadomości z transakcją podczas definiowania wbudowanych danych pakietu pokoi.

<ParkingIncluded> Optional boolean Określa, czy pakiet pokoi obejmuje bezpłatny parking, gdzie parking w tym hotelu byłby płatny. Nie podawaj wartości tego elementu w przypadku hotelu z bezpłatnym parkingiem.

Prawidłowe wartości to 0 (lub false) i 1 (lub true). Wartość domyślna to false.

<PhotoURL> Optional Object (tak samo jak <PhotoURL> w <RoomData>, ale w przypadku opakowania (np. zdjęć posiłków)
<Refundable> Optional Object Umożliwia podanie ceny jako pełnej zwrotu środków lub jej bezpłatne anulowanie. Jeśli nie zostanie podany, informacje o zwrocie środków nie zostaną wyświetlone. Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result>. Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData>. Ceny podlegające zwrotom można też wyróżnić za pomocą alternatywnych opcji, bez konieczności bezpośredniego modyfikowania schematu wiadomości o transakcji. Więcej informacji o tych opcjach znajdziesz tutaj.

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

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

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

Jeśli nie ustawisz żadnych atrybutów, stawka 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: (wymagany, jeśli available to true) określa, na ile dni przed datą zameldowania można poprosić o pełny zwrot środków. Wartość refundable_until_days musi być liczbą całkowitą z zakresu od 0 do 330 włącznie.
  • refundable_until_time (Zdecydowanie zalecana, jeśli available to true) Określa, do której ostatniej godziny (według lokalnego czasu hotelu) prośba o pełny zwrot środków zostanie uwzględniona. Można go połączyć z refundable_until_days, aby na przykład określić, że „zwroty środków są dostępne do 16:00 na 2 dni przed datą zameldowania”. Jeśli zasada refundable_until_time nie jest skonfigurowana, domyślną wartością jest północ.

    Wartość tego atrybutu ma format Time.

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

  • Jeśli wartość available lub refundable_until_days nie jest ustawiona, stawka nie będzie wyświetlana jako podlegająca zwrotowi.
  • Jeśli available to 0 lub false, pozostałe atrybuty są ignorowane. Stawka nie jest wyświetlana jako podlegająca zwrotowi, nawet jeśli ustawiono co najmniej jeden z pozostałych atrybutów.
<MembershipBenefits Included> Optional boolean Cena obejmuje korzyści ze statusu elitarnego użytkownika za czas pobytu. Zawiera te parametry:
  • ProgramName: nazwa programu statusu elitarnego
  • ProgramLevel: poziom programu, np. „Złoto”.
  • NightlyValue (optional): wartość korzyści za noc.
<CarRentalIncluded> Optional boolean W cenę pobytu wliczone jest wypożyczenie samochodu na czas pobytu.
<MilesIncluded>> Optional boolean Stawka obejmuje loty w kilometrach na przeloty. Dostępne parametry:
  • NumberofMiles: liczba mil na plan podróży.
  • Provider: zapewniają mile w programie lojalnościowym linii lotniczej.
<OnPropertyCredit> Optional boolean Cena obejmuje środki do wykorzystania w hotelu (F&B, ośrodek wypoczynkowy, spa itp.). Parametr:
  • Amount: wartość środków na dany plan podróży w walucie lokalnej.
<AirportTransportationIncluded> Optional Object Cena obejmuje bezpłatny transport między hotelem a pobliskim lotniskiem. Opcjonalny atrybut direction określa kierunek działania transportu. Prawidłowe wartości to:
    from: transport z lotniska do obiektu Jeśli nie określono kierunku, jest to wartość domyślna. to: transport z obiektu na lotnisko jest zapewniany. round_trip: zapewniamy transport zarówno na lotnisko, jak i z lotniska.

Przykłady

Pakiet 1-pokojowy

Ten przykład określa pakiet 1 pokojów dla 2 osób (1 dorosły i 1 dziecko) ze ś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 dotyczące sali i pakietu

Poniższy przykład zawiera metadane dotyczące sali i pakietu:

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

Pakiety z kilkoma pokojami

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

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


Pakiet pokoi ze stawkami

W tym przykładzie zdefiniowano metadane pokoju i pakietu dotyczące pakietu sal z funkcjami dotyczącymi cen:

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

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

Posiłki i zdjęcia

Ten przykład zawiera metadane dotyczące 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>
      <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>
      <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 wiadomości <Transaction>.

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

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

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

Zazwyczaj bardzo często wysyłasz wiadomości dotyczące transakcji z aktualizacjami cen. Dokładna szybkość i częstotliwość wykonywania tych czynności zależą od trybu wyświetlania.

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

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

Składnia

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

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

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

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

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

    <Rates>...</Rates>

    <RoomBundle>...</RoomBundle>

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

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

Atrybuty

Element <Result> ma te atrybuty:

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

Elementy potomne

Element <Result> ma te elementy podrzędne:

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

Jeśli go nie dodasz, wszystkie strony docelowe zdefiniowane w pliku stron docelowych zostaną uznane za odpowiednie do rezerwacji sali. Więcej informacji znajdziesz w artykule o składni pliku stron docelowych.

<Baserate> Optional float Cena pokoju za pobyt. Wartość tego elementu powinna wyglądać tak:

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

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

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

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

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

Element <Baserate> przyjmuje te atrybuty opcjonalne:

  • all_inclusive: wartość logiczna wskazująca, czy cena zawiera podatki i opłaty. Ogólnie należy ustawić tę wartość na false w przypadku użytkowników w Stanach Zjednoczonych i Kanadzie oraz wartości dostawców dla elementów <Tax> i <OtherFees>. Jeśli używasz cen all inclusive, Twoja reklama może się nie wyświetlać w informacjach o produkcie, jeśli ceny nie obejmują podatków i opłat dla użytkowników w Stanach Zjednoczonych i Kanadzie.

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

    Wartością domyślną jest false.

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

Prawidłowe wartości to:

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

Wartością domyślną jest web.

<Checkin> Required Date Data zameldowania w planie podróży podana w formacie Data. Kombinacja elementów <Nights> i <Checkin> tworzy plan podróży.
<Custom[1‑5]> Optional string Definiuje pole niestandardowe, za pomocą którego można przekazywać dodatkowe dane powiązane z hotelem. Możesz przekazać maksymalnie 5 wartości niestandardowych o tych nazwach elementów:
  • <Custom1>
  • <Custom2>
  • <Custom3>
  • <Custom4>
  • <Custom5>

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

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

<ExpirationTime> Optional DateTime Data i godzina, w przypadku których cena została uznana za nieważną (minimum 3 godziny).

Nie zalecamy podawania sygnatur czasowych ważności, jeśli nie mają one znaczenia dla Twojej struktury cen.

Google nie będzie wyświetlać cen, które straciły ważność, a wszystkie plany podróży, których cena wygasła, będą kwalifikować się do zapytań o cenę w czasie rzeczywistym.

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

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

<Occupancy> Optional integer Określa maksymalną liczbę osób. Jeśli atrybut <Occupancy> należy do kategorii <Result>, musi zawierać parametr 2 lub więcej. <Occupancy> może towarzyszyć parametrowi <OccupancyDetails> określającemu typ gości (dorośli lub dzieci). Informacje o składni i opisie elementów podrzędnych znajdziesz na stronie <OccupancyDetails>. Jeśli element <Occupancy> nie zostanie określony, obłożenie jest domyślnie ustawiane na 2.

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

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

Używaj elementu <Rates> tylko wtedy, gdy dla tej samej kombinacji sali i planu podróży obowiązuje kilka stawek. Możesz na przykład zdefiniować wiele cen cen warunkowych, cen prywatnych lub cen warunkowych w pakietach pokoi.

<Refundable> Optional Object Umożliwia podanie ceny jako pełnej zwrotu środków lub jej bezpłatne anulowanie. Jeśli nie zostanie podany, informacje o zwrocie środków nie zostaną wyświetlone. Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result>. Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData>. Ceny podlegające zwrotom można też wyróżnić za pomocą alternatywnych opcji, bez konieczności bezpośredniego modyfikowania schematu wiadomości o transakcji. Więcej informacji o tych opcjach znajdziesz tutaj.

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

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

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

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

  • available: (wymagany) ustaw wartość 1 (lub true), by wskazać, czy stawka umożliwia pełny zwrot środków. W przeciwnym razie ustaw wartość 0 (lub false).
  • refundable_until_days: (wymagany, jeśli available to true) określa, na ile dni przed datą zameldowania można poprosić o pełny zwrot środków. Wartość refundable_until_days musi być liczbą całkowitą z zakresu od 0 do 330 włącznie.
  • refundable_until_time (Zdecydowanie zalecana, jeśli available to true) Określa, do której ostatniej godziny (według lokalnego czasu hotelu) prośba o pełny zwrot środków zostanie uwzględniona. Można go połączyć z refundable_until_days, aby na przykład określić, że „zwroty środków są dostępne do 16:00 na 2 dni przed datą zameldowania”. Jeśli zasada refundable_until_time nie jest skonfigurowana, domyślną wartością jest północ.

    Wartość tego atrybutu ma format Time.

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

  • Jeśli wartość available lub refundable_until_days nie jest ustawiona, stawka nie będzie wyświetlana jako podlegająca zwrotowi.
  • Jeśli available ma wartość 0 (lub false), pozostałe atrybuty są ignorowane. Stawka nie jest wyświetlana jako podlegająca zwrotowi, nawet jeśli ustawiono co najmniej jeden z pozostałych atrybutów.
<RoomBundle> Optional <RoomBundle> Kontener informacji o cenach fizycznych opisów pokoi, opakowaniach udogodnień oraz niektórych zasadach zakupu dotyczących danego hotelu i planu podróży.

Ogólnie rzecz biorąc, ten element służy do określania cen pokoju podstawowego i różnych typów pokoi w tej samej usłudze. Chociaż można zdefiniować wbudowane opisy pakietów pokoi, użyj osobnego komunikatu dotyczącego transakcji, aby zdefiniować te informacje. Google będzie przechowywać metadane, aby można było się do nich odwoływać, zamiast powtarzać je przy każdej aktualizacji cen.

<RoomID> Optional string Unikalny identyfikator sali potrzebny do zmapowania na wstępnie zdefiniowane dane pokoju. Służy też do wypełniania zmiennej strony docelowej „PARTNER-ROOM-ID”. Więcej informacji znajdziesz w artykule o metadanych pakietu sal.
<Tax> Optional float Podatki obliczane na podstawie ostatecznej ceny pokoju. Element <Tax> przyjmuje pojedynczy wymagany atrybut currency, który określa trzyliterowy kod waluty na potrzeby podatków. Na przykład: USD. Element <Tax> jest wymagany, jeśli <Baserate> ma wartość większą niż 0.
<Unavailable> Optional Object wskazuje, że plan podróży nie jest dostępny do zarezerwowania. Pełni funkcję kontenera do bardziej szczegółowych powodów, dla których plan podróży jest niedostępny. Pod tagiem <Unavailable> może znajdować się co najmniej jedna z tych przyczyn niedostępności:
  • <NoVacancy/>: nie ma już dostępnych pokoi na 1 lub więcej nocy.
  • <MinNightStay value=N/>: w planie podróży była niższa minimalna liczba noclegów wynosząca N w przypadku wybranych dat.
  • <MaxNightStay value=N/>: w planie podróży została osiągnięta maksymalna liczba noclegów, która wynosi N w przypadku wybranych dat.
  • <MinAdvancePurchase value=N/>: plan podróży był niższy niż minimalny okres rezerwacji z wyprzedzeniem wynoszącym N w przypadku dat pobytu.
  • <MaxAdvancePurchase value=N/>: plan podróży przypadał powyżej maksymalnego okresu rezerwacji z wyprzedzeniem, który wynosi N.
  • <ClosedToArrival/>: obiekt nie zezwala na zameldowanie się w dniu przyjazdu do planu podróży.
  • <ClosedToDeparture/>: obiekt nie umożliwia wymeldowania w dniu wylotu z planu podróży.
  • <PropertyClosed first_open="YYYY-MM-DD" first_closed="YYYY-MM-DD"/>: obiekt jest zamknięty na cały pobyt lub jego część. Zalecane atrybuty first_open i first_closed określają pierwsze daty przypadające odpowiednio na datę przyjazdu, w przypadku której obiekt jest otwarty lub zamknięty. W przypadku nieruchomości, która zostaje zamknięta po dacie przyjazdu, wartość first_open powinna być taka sama jak data przyjazdu, a first_closed to data zamknięcia. W przypadku obiektu zamkniętego w dniu przyjazdu wartość first_closed powinna być taka sama jak data przyjazdu, a first_opened to data następnego otwarcia obiektu.
  • <NotFetched/>: cena planu podróży nie została podana przez kolejne źródła danych.
  • <InvalidProperty/>: żądany identyfikator usługi nie został rozpoznany.
  • <InvalidOccupancy/>: żądana liczba osób nie jest obsługiwana przez usługę.
  • <PriceIssue/>: problem z ceną spowodował, że nie została ona wysłana.
  • <InternalError reason=""/>: wystąpił nieokreślony błąd. Opcjonalny atrybut przyczyny może zgłosić błąd w formie tekstowej.
  • <OtherRestriction restriction=""/>: plan podróży był niedostępny z powodu nieokreślonego ograniczenia rezerwacji. Opcjonalny atrybut ograniczenia umożliwia zgłoszenie ograniczenia w formie tekstu.

Przykłady

Przykład witryny z wieloma usługami

W przykładzie poniżej zdefiniowano jeden plan podróży i ceny dla 2 obiektów:

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

W tym przykładzie nie widać szczegółów sali, w tym jej opisu, zdjęcia i podpisu, nazwy oraz pojemności.

Informacje te możesz zdefiniować raz w osobnej wiadomości o transakcji przechowywanej przez Google. Możesz się o niego odwoływać przy wszystkich kolejnych aktualizacjach cen i asortymentu. Więcej informacji znajdziesz w artykule na temat metadanych pakietów sal.

Przykład reklamy z wieloma stawkami

Poniższy przykład pokazuje 1 plan podróży i obiekt z wieloma stawkami przy różnym obłożeniu. Elementu <Rates> można używać do podawania cen z wieloma stawkami w przypadku konkretnej usługi. Przykład poniżej jest przydatny również w przypadku usług wynajmu kwater wakacyjnych (VR).

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

Przykład niedostępny

Poniższy przykład określa jeden plan podróży, którego dostępność nie jest dostępna w kanałach odbierających dane, drugi jest poniżej minimalnej liczby noclegów i został już zarezerwowany na określone daty oraz drugi, którego miejsce jest zamknięte 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 <Rate> w <Rates> ma inną cenę za pokój i plan podróży.

Używaj elementu <Rates> tylko wtedy, gdy dla tej samej kombinacji sali i planu podróży obowiązuje kilka stawek. Możesz na przykład zdefiniować wiele stawek cen warunkowych, cen prywatnych lub cen warunkowych w pakietach pokoi.

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

+ <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 nadrzędnym elemencie <Result> lub <RoomBundle>. Jeśli nie są one ustawione w elemencie <Rate>, dziedziczą one wartość z elementu nadrzędnego. Do elementu <RoomBundle> dziedziczy tylko wartość <AllowablePointsofSale>.

Składnia

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

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

Atrybuty

Element <Rates> ma te atrybuty:

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

Elementy potomne

Element <Rates> ma te elementy podrzędne:

Element podrzędny Wymagana? Typ Opis
<AllowablePointsOfSale> Optional Object Co najmniej jedna strona docelowa, która kwalifikuje się do tego hotelu. Ten element używa tej samej składni co właściwość <AllowablePointsOfSale> w systemie <Result>.
<Baserate> Required float Cena pokoju za pobyt. Ten element korzysta z tej samej składni co element <Baserate> w witrynie <Result>.

Uwaga: nie można określić elementu podrzędnego <Baserate> w atrybucie <Rate>, który jest niedostępny.

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

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

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

Określa maksymalną liczbę osób. <Occupancy> może towarzyszyć obiektowi <OccupancyDetails>, które określają rodzaj gości (osoby dorosłe lub dzieci). Informacje o składni i opisie elementów podrzędnych znajdziesz na stronie <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 właściwość <OtherFees> w elemencie <Result>.
<Refundable> Optional Object Umożliwia podanie ceny jako pełnej zwrotu środków lub jej bezpłatne anulowanie. Jeśli nie zostanie podany, informacje o zwrocie środków nie zostaną wyświetlone. Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result>. Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData>. Ceny podlegające zwrotom można też wyróżnić za pomocą alternatywnych opcji, bez konieczności bezpośredniego modyfikowania schematu wiadomości o transakcji. Więcej informacji o tych opcjach znajdziesz tutaj.

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

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

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

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

  • available: (wymagany) ustaw wartość 1 (lub true), by wskazać, czy stawka umożliwia pełny zwrot środków. W przeciwnym razie ustaw wartość 0 (lub false).
  • refundable_until_days: (wymagany, jeśli available to true) określa, na ile dni przed datą zameldowania można poprosić o pełny zwrot środków. Wartość refundable_until_days musi być liczbą całkowitą z zakresu od 0 do 330 włącznie.
  • refundable_until_time (Zdecydowanie zalecana, jeśli available to true) Określa, do której ostatniej godziny (według lokalnego czasu hotelu) prośba o pełny zwrot środków zostanie uwzględniona. Można go połączyć z refundable_until_days, aby na przykład określić, że „zwroty środków są dostępne do 16:00 na 2 dni przed datą zameldowania”. Jeśli zasada refundable_until_time nie jest skonfigurowana, domyślną wartością jest północ.

    Wartość tego atrybutu ma format Time.

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

  • Jeśli wartość available lub refundable_until_days nie jest ustawiona, stawka nie będzie wyświetlana jako podlegająca zwrotowi.
  • Jeśli available ma wartość 0 (lub false), pozostałe atrybuty są ignorowane. Stawka nie jest wyświetlana jako podlegająca zwrotowi, nawet jeśli ustawiono co najmniej jeden z pozostałych atrybutów.
<Tax> Required float Podatki obliczane na podstawie ostatecznej ceny pokoju. Ten element korzysta z tej samej składni co <Tax> w elemencie <Result>.

Przykłady

Stawka podstawowa i warunkowa

Poniższy przykład pokazuje komunikat o transakcji zawierający stawkę podstawową i stawkę warunkową:

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

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

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

  </Result>
</Transaction>

Wiele cen warunkowych

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

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

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

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


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

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

<RoomBundle>

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

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

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

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

Składnia

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

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

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

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

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

      <RatePlanID>rate_plan_ID</RatePlanID>

      <Rates>...</Rates>

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

Atrybuty

Element <RoomBundle> nie ma atrybutów.

Elementy potomne

Element <RoomBundle> ma te elementy podrzędne:

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

Wartością domyślną jest web.

<Custom[1‑5]> Optional string Pola niestandardowe do przekazywania dodatkowych danych do stron docelowych pakietu pokoi. Użyta składnia tych elementów jest taka sama jak w przypadku elementu <Custom[1-5]> w elemencie <Result>. Każde pole niestandardowe może zawierać maksymalnie 200 znaków. Więcej informacji znajdziesz w sekcji Pliki stron docelowych.

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

<InternetIncluded> Optional boolean Jeśli pakiet obejmuje bezpłatny dostęp do internetu, a inne pakiety nie obejmują tego udogodnienia. Nie ustawiaj tego elementu dla pakietów pokoi w hotelu, który ma bezpłatny dostęp do internetu we wszystkich pokojach. Nie dotyczy on internetu przewodowego ani bezprzewodowego w pokoju, który nie jest dostępny w pokojach gościnnych.
<Occupancy> Required integer Maksymalna liczba gości, dla których przeznaczony jest pakiet pokoi. Duży apartament może na przykład pomieścić 6 osób, ale „Pakiet „Podróż poślubna” jest przeznaczony tylko dla 2 osób.

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

Podczas określania obłożenia w adresie URL strony docelowej używaj zmiennych NUM-ADULTS i NUM-CHILDREN zgodnie z opisem w sekcji Używanie zmiennych i warunków. Wartością domyślną jest 2 dorosłych i 0 dzieci.

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

Uwagi:

  • Parametr <Occupancy> dla <RoomBundle> jest zdecydowanie zalecany, więc został oznaczony jako wymagany. Jego pominięcie spowoduje zgłoszenie błędu 1097.
  • <Occupancy> pochodzi z obiektu danych w tej kolejności: <RoomBundle>, <PackageData>, a następnie <RoomData>. Jeśli w którymś z tych elementów nie ma żadnej wartości, przyjmuje się wartość domyślną, czyli 2.
  • <Occupancy> może towarzyszyć obiektowi <OccupancyDetails>, które określają rodzaj gości (osoby dorosłe lub dzieci). Informacje o składni i opisie elementów podrzędnych znajdziesz na stronie <OccupancyDetails>.
  • Jeśli ustawisz <Occupancy> zarówno w <RoomBundle>, jak i <PackageData>, wartość z <RoomBundle> ma pierwszeństwo.
<OtherFees> Required float Opłaty inne niż stawka podstawowa i podatki, które wpływają na ostateczną cenę pokoju. Element <OtherFees> przyjmuje pojedynczy wymagany atrybut currency, który określa trzyliterowy kod waluty opłat. Na przykład wpisz USD w przypadku złotego.
<PackageID> Optional (recommended) string Unikalny identyfikator danych pakietu. Użyj tego identyfikatora, aby dopasować dane pakietu sal do tego, co zostało wysłane w zadaniu <PackageData>. Więcej informacji znajdziesz w artykule o metadanych pakietu sal. Możesz też użyć tego identyfikatora, aby odwołać się do definicji wspólnego pakietu pokoi w pojedynczej wiadomości z transakcją podczas definiowania wbudowanych danych pakietu pokoju.
<ParkingIncluded> Optional boolean Określa, czy pakiet pokoi obejmuje bezpłatny parking, gdzie parking w tym hotelu byłby płatny. Nie podawaj wartości tego elementu w przypadku hotelu z bezpłatnym parkingiem.

Prawidłowe wartości to 0 (lub false) i 1 (lub true). Wartość domyślna to false.

<RatePlanID> Optional string Identyfikator abonamentu to unikalny identyfikator sali i pakietu. Na przykład jeśli <RoomID> ma wartość 5, a <PackageID> wartość ABC, możesz użyć wartości 5-ABC dla parametru <RatePlanID>. Podczas tworzenia dynamicznego adresu URL strony docelowej (dawniej punktu sprzedaży) zdecydowanie zalecamy stosowanie zmiennej RatePlanID jako zmiennej.

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

<Rates> Optional <Rates> Stawki, które zastępują wartości domyślne w przypadku tego pakietu pokoi. Ten element używa tej samej składni co element <Rates> w elemencie <Result>.
<Refundable> Optional Object Umożliwia podanie ceny jako pełnej zwrotu środków lub jej bezpłatne anulowanie. Jeśli nie zostanie podany, informacje o zwrocie środków nie zostaną wyświetlone. Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result>. Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData>. Ceny podlegające zwrotom można też wyróżnić za pomocą alternatywnych opcji, bez konieczności bezpośredniego modyfikowania schematu wiadomości o transakcji. Więcej informacji o tych opcjach znajdziesz tutaj.

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

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

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

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

  • available: (wymagany) ustaw wartość 1 (lub true), by wskazać, czy stawka umożliwia pełny zwrot środków. W przeciwnym razie ustaw wartość 0 (lub false).
  • refundable_until_days: (wymagany, jeśli available to true) określa, na ile dni przed datą zameldowania można poprosić o pełny zwrot środków. Wartość refundable_until_days musi być liczbą całkowitą z zakresu od 0 do 330 włącznie.
  • refundable_until_time (Zdecydowanie zalecana, jeśli available to true) Określa, do której ostatniej godziny (według lokalnego czasu hotelu) prośba o pełny zwrot środków zostanie uwzględniona. Można go połączyć z refundable_until_days, aby na przykład określić, że „zwroty środków są dostępne do 16:00 na 2 dni przed datą zameldowania”. Jeśli zasada refundable_until_time nie jest skonfigurowana, domyślną wartością jest północ.

    Wartość tego atrybutu ma format Time.

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

  • Jeśli wartość available lub refundable_until_days nie jest ustawiona, stawka nie będzie wyświetlana jako podlegająca zwrotowi.
  • Jeśli available ma wartość 0 (lub false), pozostałe atrybuty są ignorowane. Stawka nie jest wyświetlana jako podlegająca zwrotowi, nawet jeśli ustawiono co najmniej jeden z pozostałych atrybutów.
<RoomID> Required string Unikalny identyfikator danych pokoju. Użyj tego identyfikatora, aby dopasować dane pakietu sal do tego, co wysłałeś w zadaniu <RoomData>. Więcej informacji znajdziesz w artykule o metadanych pakietu sal. Możesz też użyć tego identyfikatora, aby odwołać się do definicji świetlicy w wiadomości dotyczącej transakcji, gdy zdefiniujesz wbudowane dane pokoju.
<Tax> Required float Podatki obliczane na podstawie ostatecznej ceny pokoju. Element <Tax> przyjmuje pojedynczy wymagany atrybut currency, który określa trzyliterowy kod waluty na potrzeby podatków. Na przykład wpisz USD w przypadku złotego.

Przykłady

Pakiet dla 1 osoby

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

Jeśli cena za 1 osobę nie jest dostępna, Google wyświetli najniższą cenę za 2 osoby. Pamiętaj, że zapytania dotyczące ceny za 1 osobę nie są wyświetlane, jeśli dla planu podróży są przechowywane w pamięci podręcznej ceny za 2 lub więcej osób.

W tym przykładzie 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> i <PackageData>.

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

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

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


Co najmniej 2 osoby

Poniższy przykład zawiera zdefiniowaną odpowiedź zawierającą co najmniej 2 objęcia.

W tym przykładzie 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> i <PackageData>.

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

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

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


Pakiety z kilkoma pokojami

Poniższy przykład pokazuje liczbę osób w pakiecie z wieloma salami, aby zademonstrować możliwe ceny pokoi w hostelach.

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

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

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

Wiele cen warunkowych

Z przykładu poniżej zdefiniowano stawkę podstawową i wiele cen warunkowych w obrębie <RoomBundle>:

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

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

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


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

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

<OccupancyDetails>

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

Gdy <Occupancy> i <OccupancyDetails> pojawiają się w elemencie <Rates> wartości <Result> lub <RoomBundle>, oznacza to, że cena jest ograniczona przez szczegóły obłożenia.

Składnia

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

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

Elementy potomne

Element <OccupancyDetails> ma te elementy podrzędne:

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

Przykłady

Poniższe przykłady pokazują, jak element <OccupancyDetails> może wyglądać w elemencie <Results>, <RoomBundle> lub <Rates>.

Odpowiedź wyniku

W tym przykładzie zdefiniowano jeden plan podróży i ceny dla jednej usługi w odpowiedzi na zapytanie o cenę na żywo, w ramach którego użytkownik podał liczbę i typy gości. Tutaj <OccupancyDetails> – 2 osoby dorosłe i 1 podrzędny – są zwracane w polu <Result>.

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

Oceń odpowiedź

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

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

Pakiet pokoi

Poniższy przykład określa liczbę osób dla 2 dorosłych i 1 dziecka na 2 noce, w przypadku których obowiązuje stawka zwrotu. Tutaj <OccupancyDetails> wewnątrz elementu <RoomBundle>

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

Pakiety z kilkoma pokojami

W tym przykładzie określono wiele cen <RoomBundle>, które są ograniczone do liczby osób dorosłych i 2 dzieci. Tutaj <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>
      <Custom1>ratebasic</Custom1>
      <Custom2>ratebasic</Custom2>
      <Occupancy>4</Occupancy>
      <OccupancyDetails>
          <NumAdults>2</NumAdults>
          <Children>
              <Child age="17"/>
              <Child age="17"/>
          </Children>
      </OccupancyDetails>
      <Rates>
        <Rate rate_rule_id="mobile">
          <Baserate currency="USD">258.33</Baserate>
          <Tax currency="USD">25.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <ChargeCurrency>hotel</ChargeCurrency>
          <Custom1>ratecode321</Custom1>
        </Rate>
        <Rate rate_rule_id="us_or_gb">
          <Baserate currency="USD">268.33</Baserate>
          <Tax currency="USD">26.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <Custom1>ratecode432</Custom1>
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>