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

Ta strona zawiera odniesienie do opartych na formacie XML komunikatów o transakcjach.

<Transaction>

Głównym elementem komunikatu dotyczącego transakcji jest <Transaction>. To kontener na opisowe informacje o pokojach i pakietach oraz o cenach i dostępności pokoi i pakietów.

Element <Transaction> występuje w hierarchii XML komunikatu transakcji w tym miejscu:

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

Wiadomości, których głównym elementem jest <Transaction>, wymagają co najmniej 1 elementu podrzędnego. Wiadomości dotyczące transakcji mogą mieć dowolną liczbę elementów podrzędnych, pod warunkiem że łączny rozmiar wiadomości nie przekracza 100 MB.

Składnia

Element <Transaction> ma taką składnię:

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

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

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

</Transaction>

Atrybuty

Element <Transaction> ma te atrybuty:

Atrybut 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 jest on używany, jeśli Twój backend dostarcza pliki danych z cenami dla wielu kont partnerów. Ta wartość ciągu znaków to wartość „Klucz partnera” podana na stronie Ustawienia konta w Hotel Center.
timestamp Required DateTime

Moment wysłania wiadomości dotyczącej transakcji.

Wszystkie wiadomości z sygnaturą czasową w ciągu ostatnich 24 godzin zostaną przetworzone, a te, które nie zostały odrzucone, zostaną odrzucone.

Wiadomości są przetwarzane w kolejności timestamp, a nie w kolejności ich odbierania. Na przykład aktualizacja ceny o sygnaturze czasowej 2019-05-03 14:09:00 otrzymana po wiadomości z sygnaturą czasową 2019-05-03 14:10:00 będzie nadal przetwarzana w kolejności i zostanie użyta cena z wiadomości z sygnaturą czasową 2019-05-03 14:10:00.

Elementy potomne

Element <Transaction> ma te elementy podrzędne:

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

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

<Result> Optional* <Result>

Dane o cenach w planie podróży pokoju lub element <RoomBundle> definiujący pakiety pokoi i dodatkowe typy pomieszczeń w danym obiekcie. Elementu <Result> można też używać do usuwania planów podróży z zasobów reklamowych.

* Trzeba określić co najmniej jedną z tych właściwości: <PropertyDataSet> lub <Result>.

Przykłady

Dane o pokojach

Ten przykład definiuje dane pokoju w wiadomości transakcji:

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

Dane dotyczące cen

Ten przykład definiuje dane o cenach w komunikacie transakcji:

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

Ceny za noc

Ten przykład przedstawia ceny za pobyt 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 transakcji, który zawiera stawkę podstawową i stawkę warunkową:

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

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

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

  </Result>
</Transaction>

Usuń asortyment

Ten przykład pokazuje usunięcie z zasobów reklamowych kilku rodzajów zasobów reklamowych (pobyt 1 noclegu w kilku 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 na informacje o pomieszczeniu i pakiecie (lub pakiecie sal) w wiadomości <Transaction>. Wartości ustawione na poziomie partnera zastępują wartości hoteli. Google przechowuje te informacje, dzięki czemu nie musisz ich określać za każdym razem, gdy wysyłasz aktualizacje cen.

Element <PropertyDataSet> występuje w hierarchii XML komunikatu 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 Metadane pakietu sal.

Składnia

Element <PropertyDataSet> ma taką składnię:

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

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

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

Atrybuty

Element <PropertyDataSet> nie ma atrybutów.

Elementy potomne

Element <PropertyDataSet> ma te elementy podrzędne:

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

Identyfikator pakietu odnosi się do 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 odpowiadającym atrybutowi <id> w pliku danych z listą hoteli.
<RoomData> Optional* <RoomData> Opisuje pomieszczenie. Te dane są powiązane z partnerem i hotelem, ale nie z planem podróży.

Identyfikator pokoju podany jest w aktualizacjach cen.

* Trzeba określić co najmniej jedną z tych właściwości: <PackageData> lub <RoomData>.

Przykłady

Dane dotyczące pomieszczeń i pakietów

Ten przykład pokazuje dane dotyczące zarówno pomieszczenia, jak i pakietu w <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>

Wysyłając informacje o cenach i dostępności danego pokoju i pakietu pokojów, w wiadomościach o cenach odwołujesz się do identyfikatorów pokoju i pakietu. W efekcie znacznie zmniejszasz rozmiar wiadomości i zmniejszasz liczbę błędów, które mogą wystąpić w wyniku zduplikowania danych. Więcej informacji znajdziesz w artykule Metadane pakietu sal.

<RoomData>

Określa niezależne od planu podróży metadane dotyczące pokojów, a także pakiety sal (ponieważ pakiety pokoi to pokoje z dodatkowymi udogodnieniami). Używaj właściwości <RoomData>, aby ograniczyć powtarzanie danych opisowych w pliku danych z cenami.

Element <RoomData> występuje w hierarchii XML komunikatu 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. Przeznaczone jest ono tylko dla wszystkich danych nieplanowanych.

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

Zarówno elementy <RoomData>, jak i <PackageData> możesz zdefiniować dla tego samego pokoju lub zestawu pokoi. Gdy Google wyświetli ten pokój lub pakiet w wynikach wyszukiwania, będzie zawierać opisy obu tych obiektów rozdzielone łącznikiem.

Więcej informacji znajdziesz w artykule Metadane pakietu sal.

Składnia

Element <RoomData> ma taką składnię:

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

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

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

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

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

Atrybuty

Element <RoomData> nie ma atrybutów.

Elementy potomne

Element <RoomData> ma te elementy podrzędne:

Element podrzędny Wymagana? Typ Opis
<Capacity> Optional integer Maksymalna liczba gości, która może fizycznie pomieścić w sali. W przypadku sali pojemność pojemność jest co najmniej taka sama jak liczba osób.

Jeśli podasz tę wartość, musi ona być równa lub większa od wartości elementu <Occupancy>, czyli docelowej liczby gości na konkretną salę. Na przykład <Capacity> w dużym pakiecie może mieć wartość 6, a <Occupancy> to 4.

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

<Description> Optional Object Szczegółowy opis pokoju. Ten element powinien zawierać informacje, które nie zostały opisane przez inne elementy ani element <Name>. W opisie pokoju nie używaj samych wielkich liter.

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

  • text: szczegółowy opis pokoju.
  • language: dwuliterowy kod języka, na przykład 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 przedstawia francuską i angielską wersję opisu pokoju:

<Description>
  <Text text="Two queen-sized beds" language="en"/>
  <Text text="Deux lits de la reine" language="fr"/>
</Description>
<Name> Required string Nazwa kategorii pokoju. Ta wartość powinna być zgodna z informacjami wyświetlanymi na stronie docelowej hotelu (dawniej – w punkcie sprzedaży). Nie ustawiaj wartości tego elementu 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, na przykład 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 pokoju:

<Name>
  <Text text="Standard Double Room" language="en"/>
  <Text text="Le chambre double" language="fr"/>
</Name>
<Occupancy> Optional integer Maksymalna liczba gości, dla których przeznaczony jest pokój. Na przykład duży apartament może pomieścić do 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ć w sali.

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

<Occupancy> może towarzyszyć atrybut <OccupancyDetails>, który określa rodzaj gości (dorośli lub dzieci). Składnia i opis elementów podrzędnych znajdziesz <OccupancyDetails>.

<OccupancySettings> Optional Object Ustawienia, które mogą ograniczać lub modyfikować wymagania dotyczące liczby osób w sali.

Element <OccupancySettings> przyjmuje te elementy podrzędne:

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

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

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

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

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

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

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

Ten element przyjmuje te elementy podrzędne:

  • <URL>: określa lokalizację zdjęcia. Lokalizacja powinna być publiczna (nie za zaporą sieciową) i powinna zawierać protokół (na przykład https://). Używaj tylko jednego tagu <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 oznacza podpis, a atrybut language określa dwuliterowy kod języka, np. en.

Przykład:

<PhotoURL>
  <URL>https://www.example.com/static/bar/image1234.jpg</URL>
  <Caption>
    <Text text="A bright and breezy way to enjoy your mornin'
      cuppa tea." language="en"/>
    <Text text="Une façon lumineuse et aérée pour profiter
      de votre journée tasse de thé." language="fr"/>
  </Caption>
</PhotoURL>
<PhotoURL>
  <URL>https://www.foo.com/static/bar/image5678.jpg</URL>
  <Caption>
    <Text text="Or, perhaps you prefer coffee." language="en"/>
    <Text text="Ou peut-être préférez-vous le café." language="fr"/>
  </Caption>
</PhotoURL>
<RoomFeatures> Optional <RoomFeatures> Zawiera informacje o funkcjach pokoju.
<RoomID> Required string Unikalny identyfikator pokoju. Użyj tego identyfikatora, aby dopasować dane sal do blokad <Result> w aktualizacjach cen. Więcej informacji znajdziesz w artykule Metadane pakietu sal. Korzystając z tego identyfikatora, możesz też odwoływać się do definicji pokoju wspólnego w pojedynczej wiadomości transakcji podczas definiowania wbudowanych danych pokojów.

Przykłady

Dane o pokojach

Ten przykład definiuje dane pokoju:

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

Metadane pokoju i pakietu

Ten przykład określa metadane pokoju i pakietu:

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

Pakiety pokojów

Ten przykład określa metadane pokoju i pakietu w przypadku wielu pakietów pomieszczeń:

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

<RoomFeatures>

Określa elementy znalezione w pokoju.

Element <RoomFeatures> występuje w hierarchii XML komunikatu transakcji w tym miejscu:

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

Składnia

Element <RoomFeatures> ma taką składnię:

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

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

Atrybuty

Element <RoomFeatures> nie ma atrybutów.

Elementy potomne

Element <RoomFeatures> ma te elementy podrzędne:

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

Wskazuje styl japońskiego pokoju hotelowego.

Prawidłowe wartości to:

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

Każdy element <Bed> ma te atrybuty:

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

Ten atrybut to:

  • relation (opcjonalnie): wskazuje, jak łazienka i toaleta są ustawione względem siebie. Prawidłowe wartości to together (łazienka i toaleta znajdują się w tym samym pomieszczeniu (np. łazienka) tuż obok siebie) i separate (łazienka i toaleta mają osobne przestrzenie). Tego atrybutu nie można ustawiać, jeśli w pomieszczeniu nie są jednocześnie łazienki i toalety.

Element opcjonalnie przyjmuje te elementy podrzędne:

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

    Te atrybuty:

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

    Te atrybuty:

    • electronic_bidet (opcjonalnie): wskazuje, że toaleta jest wyposażona w elektroniczny bidet. Prawidłowe wartości to 0 (lub false) i 1 (lub true).
    • mobility_accessible (opcjonalny): oznacza, że toaleta jest przystosowana do potrzeb osób poruszających się. Prawidłowe wartości to 0 (lub false) i 1 (lub true).

Przykład:

<BathAndToilet relation="separate">
  <Bath bathtub="1" shower="1"/>
  <Toilet
    electronic_bidet="1"
    mobility_accessible="1"/>
</BathAndToilet>
<OpenAirBath> Optional empty Użyj tego elementu, jeśli pokój ma prywatną łaźnię na świeżym powietrzu.
<AirConditioning> Optional empty Użyj tego elementu, jeśli pokój jest klimatyzowany.
<Balcony> Optional empty Użyj tego elementu, jeśli pokój ma balkon lub werandę.
<Views> Optional Object Możliwe opcje to:

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

Przykłady

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

2 łóżka pojedyncze

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

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

2 łóżka podwójne

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

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


Japoński styl bez łóżka

Poniżej znajdziesz przykład pokoju w stylu japońskim bez łóżka. W pokoju typu japanese nie są wymagane informacje o łóżku.

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

Japoński western z łóżkiem

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

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

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

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

<PackageData>

Definiuje niezależne od planu podróży metadane dotyczące pakietów pokojów w obiekcie. Ten element zawiera informacje powiązane z partnerem i hotelem, ale nie z planem podróży. Celem jest jednorazowe zdefiniowanie wszystkich danych nieplanowanych i odwoływanie się do nich w danych planu podróży.

Element <PackageData> występuje w hierarchii XML komunikatu 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 właściwości ceny i warunki, które nie są częścią opisu fizycznego pokoju. Użycie kombinacji atrybutów <RoomData> i <PackageData> pozwala podać szczegółowe informacje o pakietach pokojów i funkcjach związanych z cenami. W przypadku pokoi, które nie są częścią pakietu, wpisz tylko <RoomData>.

Elementy <RoomData> i <PackageData> możesz zdefiniować dla tego samego pokoju lub zestawu pokoi. Gdy Google wyświetli ten pokój lub pakiet w wynikach wyszukiwania, będzie zawierać opisy obu tych obiektów rozdzielone łącznikiem.

Jeśli zaktualizujesz pojedynczy element <PackageData> danej usługi, musisz też zaktualizować wszystkie jej elementy <PackageData> i <RoomData>. Każdy symbol <PropertyDataSet> będzie uznawany za wszystkie dane o usłudze i zastępuje wszystkie dotychczasowe dane.

Więcej informacji znajdziesz w artykule Metadane pakietu sal.

Składnia

Element <PackageData> ma taką składnię:

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

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

<ChargeCurrency> Optional enum Kiedy i gdzie użytkownik płaci za rezerwację. Ten element ma tę samą składnię co <ChargeCurrency> w <Result>.

Wartością domyślną jest web.

<CheckinTime> Optional Time Najwcześniejsza godzina zameldowania. Godzina musi być mniejsza niż 24:00 według czasu lokalnego w hotelu.
<CheckoutTime> Optional Time Najpóźniejszy możliwy czas wymeldowania według lokalnego czasu hotelu.
<Description> Optional Object Szczegółowy opis pakietu. Ten element powinien zawierać informacje, które nie zostały opisane przez inne elementy ani element <Name>. W opisie pokoju nie używaj 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 widać w tym przykładzie:

<Description>
  <Text text="Two breakfast buffet certificates for
    each night of stay." language="en"/>
  <Text text="Deux certificats petit-déjeuner buffet
    pour chaque nuit de séjour." language="fr"/>
</Description>
<InternetIncluded> Optional boolean Jeśli pakiet obejmuje bezpłatny dostęp do internetu, w pozostałych pakietach nie obejmuje tego udogodnień. Nie ustawiaj tego elementu w przypadku pakietów pokojowych w hotelach, w których wszystkie pokoje mają bezpłatny dostęp do internetu. Ten element nie dotyczy przewodowego i bezprzewodowego internetu w pokoju, które nie są dostępne w pokojach dla gości. Prawidłowe wartości to 0 (lub false) i 1 (lub true).
<Meals> Optional Object Zawiera informacje o posiłkach w tej paczce.

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

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

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

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

<Name> Required string Nazwa pakietu. Ta wartość powinna być zgodna z informacjami wyświetlanymi na stronie docelowej hotelu. Nie ustawiaj wartości tego elementu 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 przeznaczony jest pakiet pokoi. Na przykład duży apartament może pomieścić do 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ć w sali.

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

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

Uwaga:

<Occupancy> może towarzyszyć atrybut <OccupancyDetails>,który określa rodzaj gości (dorośli lub dzieci). Składnia i opis elementów podrzędnych znajdziesz <OccupancyDetails>.
<PackageID> Required string

Unikalny identyfikator pakietu. Użyj tego identyfikatora, aby dopasować dane pakietu pokoi do blokad <Result> w aktualizacjach cen. Więcej informacji znajdziesz w metadanych pakietu sal.

Korzystając z tego identyfikatora, możesz też odwoływać się do wspólnej definicji pakietu pokoi używanej w pojedynczej wiadomości transakcji podczas definiowania wbudowanych danych pakietu pokoi.

<ParkingIncluded> Optional boolean Określa, czy pakiet pokoi obejmuje wliczony w cenę parking, jeśli parking w innym przypadku byłby płatną usługą w tym hotelu. Nie określaj 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 wyświetlanie informacji o cenie jako objętej pełnym zwrotem lub bezpłatne anulowanie. Jeśli jej nie podasz, nie pojawią się żadne informacje o zwrocie środków. Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result>. Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData>. Ceny podlegające zwrotom mogą być też wyróżnione za pomocą alternatywnych opcji bez konieczności bezpośredniego modyfikowania schematu wiadomości transakcji. Dowiedz się więcej o tych zasadach dotyczących zwrotów.

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

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

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

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

  • available: (wymagane) ustaw wartość 1 lub true, aby wskazać, czy stawka umożliwia pełny zwrot środków. W przeciwnym razie ustaw 0 lub false.
  • refundable_until_days: (wymagany, jeśli available ma wartość true) określa, na ile dni przed zameldowaniem można poprosić o pełny zwrot środków. Wartość refundable_until_days musi być liczbą całkowitą z zakresu od 0 do 330 włącznie.
  • refundable_until_time: (zdecydowanie zalecany, jeśli available ma wartość true) określa ostatnią godzinę (według lokalnego czasu hotelu), aby uwzględnić prośbę o pełny zwrot środków. Możesz go połączyć z właściwością refundable_until_days, aby na przykład określić, że „Zwroty środków są dostępne do 16:00 2 dni przed datą zameldowania”. Jeśli refundable_until_time nie jest ustawiony, domyślną wartością jest północ.

    Wartość tego atrybutu ma format Time.

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

  • Jeśli nie ustawiono wartości available lub refundable_until_days, stawka nie jest wyświetlana jako podlegająca zwrotowi.
  • Jeśli available ma wartość 0 lub false, pozostałe atrybuty są ignorowane. Stawka nie jest wyświetlana jako podlegająca zwrotowi, nawet jeśli ustawiono co najmniej jeden z pozostałych atrybutów.
<MembershipBenefits Included> Optional boolean Cena uwzględnia korzyści ze statusu Elite za pobyt. Zawiera te parametry:
  • ProgramName: nazwa programu statusu elit
  • ProgramLevel: poziom programu. Przykład: „Złoty”.
  • NightlyValue (optional): wartość korzyści za noc.
<CarRentalIncluded> Optional boolean Cena obejmuje bezpłatne wypożyczenie samochodu na czas pobytu.
<MilesIncluded>> Optional boolean Cena obejmuje mile w ramach programu lojalnościowego linii lotniczej. Dostępne parametry:
  • NumberofMiles: liczba mil na plan podróży.
  • Provider: podaj mile w ramach programu lojalnościowego linii lotniczej.
<OnPropertyCredit> Optional boolean W cenę wliczone są środki do wykorzystania na terenie obiektu (żywność i wyżywienie, 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 z pobliskiego lotniska i z powrotem. Opcjonalny atrybut direction określa kierunek transportu. Prawidłowe wartości to:
    from – transport z lotniska do miejsca zakwaterowania zapewniany. Jest to wartość domyślna, jeśli nie określono kierunku. to: zapewnia transport na lotnisko. round_trip: zapewniany jest transport z lotniska i na lotnisko.

Przykłady

Pakiet z pokojem jednoosobowym

Poniższy przykład definiuje pakiet z pokojem dla 2 osób (1 dorosły i 1 dziecko) obejmujący śniadanie:

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

Metadane pokoju i pakietu

Ten przykład określa metadane pokoju i pakietu:

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

Pakiety pokojów

Ten przykład określa metadane pokoju i pakietu w przypadku wielu pakietów pomieszczeń:

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


Pakiet pokojów i ceny

Ten przykład określa metadane pokoju i pakietu w przypadku pakietu pokoi z funkcjami dotyczącymi ceny:

<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

Poniższy przykład zawiera metadane dotyczące pokoju i pakietu posiłków, zdjęć oraz godzin zameldowania i wymeldowania:

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

Śniadanie

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

<Result>

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

Element <Result> występuje w hierarchii XML komunikatu 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 ustawiać lub aktualizować ceny za pokoje i określać dostępne zasoby reklamowe. Elementy zdefiniowane w tym elemencie zazwyczaj odnoszą się do niezależnych od planu podróży metadanych dotyczących pomieszczenia lub pakietu (np. opisu lub zestawu udogodnień) zdefiniowanych w <PackageData> i <RoomData>.

Wiadomości „Transakcje” z aktualizacją cen są zwykle wysyłane bardzo często. To, jak i jak często będziesz to robić, zależy od trybu wyświetlania.

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

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

Składnia

Element <Result> ma taką składnię:

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

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

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

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

    <Rates>...</Rates>

    <RoomBundle>...</RoomBundle>

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

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

Atrybuty

Element <Result> ma te atrybuty:

Atrybut Wymagana? Typ Opis
mergeable Optional boolean Domyślnie nowe ceny dla określonej pary hotelu i planu podróży zastępują wszystkie poprzednie (niewygasłe) ceny znajdujące się w pamięci podręcznej Google. Atrybut scalany pozwala przechowywać dodatkowe ceny w pamięci podręcznej Google bez usuwania poprzednich informacji o cenach. Zapytanie o cenę w czasie rzeczywistym z odpowiedziami kontekstowymi zawsze ma ten atrybut ustawiony na true (niezależnie od odpowiedzi w wiadomości dotyczącej transakcji).

Elementy potomne

Element <Result> ma te elementy podrzędne:

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

Jeśli nie umieścisz tego elementu, wszystkie strony docelowe zdefiniowane w pliku stron docelowych będą mogły być wykorzystane do rezerwacji sali. Więcej informacji znajdziesz w artykule o składni plików stron docelowych.

<Baserate> Optional float

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

  • W przypadku pokoju prywatnego ustal najtańszą oferowana przez siebie stawkę za 2 osoby. Jeśli nie oferujesz ceny za 2 osoby, a na Twoim koncie włączono stawki za obłożenie inne niż podwójne, tutaj jest dozwolone większe obłożenie. Skontaktuj się z nami, aby włączyć stawki za obłożenie inne niż podwójne. Stawki za obłożenie dla jednej osoby nie są tu dozwolone – muszą być ustawione poniżej <Rates>.
  • Jeśli chcesz udostępnić pokój wspólny, pozostaw to pole puste i użyj <RoomBundle>.
  • Powinna to być łączna cena podstawowa za wszystkie noce, a nie średnia cena za noc.

Jeśli sala jest niedostępna w planie podróży, pole <Baserate> należy pominąć lub ustawić jako -1, a wartość <Unavailable> należy podać wraz z wszelkimi znanymi przyczynami niedostępności.

Aby usunąć pakiet pokoi, wykonaj czynności opisane w artykule Usuwanie pakietu pokoi.

Pole <Baserate> nie może zawierać żadnych symboli grupowania cyfr, takich jak przecinek (,) czy kropka (.). Ułamki zawsze oddzielaj kropką (.) jako znakiem dziesiętnym. Na przykład 1200,40 USD wpisz:

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

Element <Baserate> przyjmuje te atrybuty opcjonalne:

  • all_inclusive: wartość logiczna, która wskazuje, czy stawka zawiera podatki i opłaty. Ogólnie ustaw tę wartość na false dla użytkowników z USA i Kanady oraz wartości dostawców dla elementów <Tax> i <OtherFees>. Jeśli korzystasz z cen all inclusive, Twoje informacje o produktach mogą nie wyświetlać się w informacjach o produktach, jeśli podane przez Ciebie ceny nie uwzględniają podatków i opłat obowiązujących użytkowników z Kanady.

    Ceny all inclusive są teraz wyświetlane użytkownikom w Stanach Zjednoczonych.

    W przypadku pozostałych użytkowników zwykle uwzględnia się podatki i opłaty w stawce podstawowej i ustawia 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 wiadomości o transakcji w elemencie <Result> w przypadku ceny hotelu lub w bloku <PackageData> w przypadku pakietu pokoi.

Prawidłowe wartości to:

  • web: użytkownik jest obciążany opłatą online w momencie rezerwacji. jest to wartość domyślna Rzeczywista strona docelowa jest zdefiniowana w pliku strony docelowej i zależy od waluty, lokalizacji, języka i innych czynników użytkownika.
  • hotel: użytkownik jest obciążany opłatą podczas zameldowania w hotelu. Jeśli płatności muszą być zawsze dokonywane w walucie hotelu, ustaw wartość <ChargeCurrency> na hotel. Waluta użytkownika nie ma wpływu na rzeczywistą stronę docelową.
  • deposit: część opłaty jest naliczana natychmiast, a resztę pobieramy później, zwykle po wymeldowaniu użytkownika z hotelu.
  • installments: użytkownik jest obciążany początkowym ułamkiem całkowitej sumy do zapłaty i powinien regularnie płacić ustalone saldo przez określony czas.

Wartością domyślną jest web.

<Checkin> Required Date Data zameldowania w planie podróży podana w formacie Data. Kombinacja elementu <Nights> i elementu <Checkin> tworzy plan podróży.
<Custom[1‑5]> Optional string Określa pole niestandardowe, którego możesz używać do przekazywania dodatkowych danych związanych 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. Możesz na przykład podać w tym polu wartość, która będzie używana w pliku stron docelowych do utworzenia niestandardowego adresu URL strony docelowej. Obowiązuje limit 200 znaków na pole niestandardowe. Więcej informacji znajdziesz w opisie plików stron docelowych .

Elementy <Custom> zawarte w elemencie <Rate> nie są dziedziczone przez element <RoomBundle>. Atrybut <Custom> należy zdefiniować oddzielnie w każdym elemencie <RoomBundle>.

<ExpirationTime> Optional DateTime Data i godzina, w której uznaliśmy, że cena wygasła (co najmniej 3 godziny).

Zalecamy niepodawanie sygnatur czasowych wygaśnięcia, jeśli nie ma to znaczenia dla struktury cen.

Google nie wyświetla cen, które wygasły, a każdy plan podróży, którego cena straciła ważność, będzie kwalifikować się do zapytań o ceny w czasie rzeczywistym.

<Nights> Required integer Liczba nocy w planie podróży. Wartość elementu <Nights> musi być dodatnią liczbą całkowitą. Kombinacja właściwości <Nights> i <Checkin> tworzy plan podróży.
<OtherFees> Optional float Opłaty inne niż stawka podstawowa i podatki, które mają wpływ na ostateczną cenę pokoju. Element <OtherFees> przyjmuje pojedynczy wymagany atrybut currency, który określa trzyliterowy kod waluty używany do naliczania 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ą dozwoloną liczbę osób w przypadku tej ceny. Gdy <Occupancy> pojawia się bezpośrednio pod polem <Result>, musi zawierać wartość 2 lub większą. <Occupancy> może towarzyszyć atrybut <OccupancyDetails>, który określa rodzaj gości (dorośli lub dzieci). Jeśli nie podasz typów gości, zakładamy, że są to osoby dorosłe. Informacje o składni i opisie elementów podrzędnych znajdziesz na stronie <OccupancyDetails>. Jeśli nie podano elementu <Occupancy>, domyślnie jest to 2.

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

<PackageID> Optional string Unikalny identyfikator pakietu służący do zmapowania go na wstępnie zdefiniowane dane pakietu. Służy również do wypełniania zmiennej strony docelowej PACKAGE-ID. Więcej informacji znajdziesz w metadanych pakietu sal.
<Property> Required string Identyfikator hotelu, którego dotyczą powiązane dane (cena, plan podróży, pakiet pokoi lub metadane). Wartość tego elementu musi być ciągiem znaków. Wartość tego elementu musi odpowiadać wartości atrybutu <id> produktu zdefiniowanego w pliku danych z listą hoteli.
<Rates> Optional <Rates> Kontener na co najmniej 1 blok <Rate>. Każdy obiekt <Rate> w obiekcie <Rates> określa inną cenę dla kombinacji pokoju i planu podróży.

Użyj elementu <Rates>, gdy istnieje kilka stawek za ten sam pokój i plan podróży lub gdy stawki nie można określić na poziomie <Result>. Możesz na przykład zdefiniować wiele cen cen warunkowych, cen prywatnych, cen warunkowych w pakietach pokoi lub różnych obłożenia.

Uwaga: w <Result> stawki za 1 osobę można określić tylko w <Rates>. Skontaktuj się z nami, aby zezwolić na podwójne obłożenie.

<Refundable> Optional Object Umożliwia wyświetlanie informacji o cenie jako objętej pełnym zwrotem lub bezpłatne anulowanie. Jeśli jej nie podasz, nie pojawią się żadne informacje o zwrocie środków. Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result>. Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData>. Ceny podlegające zwrotom mogą być też wyróżnione za pomocą alternatywnych opcji bez konieczności bezpośredniego modyfikowania schematu wiadomości transakcji. Dowiedz się więcej o zasadach dotyczących zwrotów.

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

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

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

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

  • available: (wymagane) ustaw wartość 1 (lub true), aby wskazać, czy stawka umożliwia pełny zwrot środków. W przeciwnym razie ustaw 0 (lub false).
  • refundable_until_days: (wymagany, jeśli available ma wartość true) określa, na ile dni przed zameldowaniem można poprosić o pełny zwrot środków. Wartość refundable_until_days musi być liczbą całkowitą z zakresu od 0 do 330 włącznie.
  • refundable_until_time: (zdecydowanie zalecany, jeśli available ma wartość true) określa ostatnią godzinę (według lokalnego czasu hotelu), aby uwzględnić prośbę o pełny zwrot środków. Możesz go połączyć z właściwością refundable_until_days, aby na przykład określić, że „Zwroty środków są dostępne do 16:00 2 dni przed datą zameldowania”. Jeśli refundable_until_time nie jest ustawiony, domyślną wartością jest północ.

    Wartość tego atrybutu ma format Time.

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

  • Jeśli nie ustawiono wartości available lub refundable_until_days, stawka nie jest wyświetlana jako podlegająca zwrotowi.
  • Jeśli available ma wartość 0 (lub false), pozostałe atrybuty są ignorowane. Stawka nie jest wyświetlana jako podlegająca zwrotowi, nawet jeśli ustawiono co najmniej jeden z pozostałych atrybutów.
<RoomBundle> Optional <RoomBundle> Kontener na informacje o fizycznych opisach pokojów, opakowaniu udogodnień oraz zasadach zakupu dotyczących danego hotelu i planu podróży.

Ogólnie rzecz biorąc, tego elementu należy używać do określania cen za pokój podstawowy i różne typy pomieszczeń w tej samej usłudze. Choć opisy pakietów pokoi możesz zdefiniować bezpośrednio, do zdefiniowania tych informacji użyj osobnego komunikatu transakcji. Google będzie przechowywać metadane, aby umożliwić Ci odwoływanie się do nich, zamiast ich powtarzania podczas wszystkich przyszłych aktualizacji cen.

<RoomID> Optional string Unikalny identyfikator pokoju służący do zmapowania go na wstępnie zdefiniowane dane pokoju. Służy też do wypełniania zmiennej strony docelowej ID sali PARTNERA. Więcej informacji znajdziesz w metadanych pakietu sal.
<Tax> Optional float Podatki obliczane od ostatecznej ceny pokoju. Element <Tax> przyjmuje 1 wymagany atrybut currency, który określa 3-literowy 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 oznacza, że nie można zarezerwować planu podróży. Służy jako kontener z bardziej szczegółowymi przyczynami niedostępności planu podróży. Pod tagiem <Unavailable> może znajdować się co najmniej jedna z tych przyczyn niedostępności:
  • <NoVacancy/>: nie ma już dostępnych pokoi na co najmniej jedną noc.
  • <MinNightStay value=N/>: plan podróży był mniejszy niż minimalna liczba noclegów, która wynosi N w przypadku dat pobytu.
  • <MaxNightStay value=N/>: plan podróży przekracza maksymalny limit noclegu (N) w przypadku dat pobytu.
  • <MinAdvancePurchase value=N/>: plan podróży był poniżej minimalnego okresu rezerwacji z wyprzedzeniem wynoszącego N dla dat pobytu.
  • <MaxAdvancePurchase value=N/>: plan podróży przekracza maksymalny okres rezerwacji z wyprzedzeniem wynoszący N dla dat pobytu.
  • <ClosedToArrival/>: obiekt nie umożliwia zameldowania się w dniu przyjazdu na miejsce w planie podróży.
  • <ClosedToDeparture/>: obiekt nie umożliwia wymeldowania w dniu wylotu.
  • <PropertyClosed first_open="YYYY-MM-DD" first_closed="YYYY-MM-DD"/>: obiekt jest zamknięty do części pobytu lub do końca. Zalecane atrybuty first_open i first_closed określają pierwsze daty przypadające odpowiednio w dniu przyjazdu lub z datą przyjazdu, w przypadku której obiekt jest otwarty lub zamknięty. W przypadku usługi, która zostanie zamknięta po dacie przyjazdu, wartość first_open powinna być taka sama jak data przyjazdu, a first_closed – datą zamknięcia. W przypadku obiektu zamkniętego w dniu przyjazdu wartość first_closed powinna być taka sama jak data przyjazdu, a first_opened to następna data otwarcia obiektu.
  • <NotFetched/>: cena planu podróży nie została podana przez podrzędne źródła danych.
  • <InvalidProperty/>: nie rozpoznano żądanego identyfikatora usługi.
  • <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ł niewymieniony błąd. Opcjonalny atrybut powód może zgłosić błąd jako tekst.
  • <OtherRestriction restriction=""/>: plan podróży był niedostępny z powodu niewymienionych ograniczeń dotyczących rezerwacji. Opcjonalny atrybut restriction umożliwia zgłoszenie ograniczenia w formie tekstu.

Przykłady

Przykład dotyczący wielu usług

Ten przykład określa 1 plan podróży i jego ceny dla 2 usług:

<?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 są pokazane informacje o pomieszczeniu, takie jak opis, zdjęcie i podpis, nazwa pokoju i jego pojemność.

Możesz zdefiniować te informacje raz w osobnej wiadomości transakcji przechowywanej przez Google. Możesz się do nich odwoływać przy kolejnych aktualizacjach cen i zasobów reklamowych. Więcej informacji znajdziesz w artykule Metadane pakietu sal.

Przykład z wieloma stawkami

Poniższy przykład określa 1 plan podróży i obiekt z wieloma stawkami za różne liczby osób. Elementu <Rates> można użyć, aby podać ceny dla wielu stawek za określoną usługę. Ten przykład jest też przydatny w przypadku usług związanych z kwaterami wakacyjnymi (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

Ten przykład wskazuje jeden plan podróży, którego dostępności nie udało się pobrać z kanałów niższego szczebla, drugi, który jest poniżej minimalnej liczby noclegów i jest już zarezerwowany w określonych dniach, oraz trzeci, którego obiekt jest zamknięty w dniu przyjazdu, ale otwiera się w trakcie pobytu:

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

<Rates>

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

Elementu <Rates> używaj tylko wtedy, gdy istnieje kilka stawek za ten sam pokój lub plan podróży. Możesz na przykład zdefiniować wiele stawek cen warunkowych, cen prywatnych lub cen warunkowych w pakiecie pokoi.

Element <Rates> występuje w hierarchii XML komunikatu 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 <Rate> zastępują wartości związane z cenami w nadrzędnym elemencie <Result> lub <RoomBundle>. Jeśli nie zostaną ustawione w <Rate>, dziedziczą wartość z elementu nadrzędnego. Element <RoomBundle> jest dziedziczony tylko przez wartość <AllowablePointsofSale>.

Składnia

Element <Rates> ma taką składnię:

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

Atrybuty

Element <Rates> ma te atrybuty:

Atrybut Wymagana? Opis
rate_rule_id Optional W przypadku cen warunkowych ten identyfikator dopasowuje stawkę do definicji w pliku definicji reguły dotyczącej 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 odpowiednia dla hotelu. Ten element ma tę samą składnię co <AllowablePointsOfSale> w <Result>.
<Baserate> Required float Cena pokoju za pobyt. Ten element używa tej samej składni co <Baserate> w <Result>.

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

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

Jeśli w elemencie <Result> znajdują się elementy <Custom>, nie są one dziedziczone w elemencie <RoomBundle> i powinny być zdefiniowane oddzielnie dla każdego elementu <RoomBundle> lub można go w razie potrzeby uwzględnić w elemencie <PackageData>.

<ExpirationTime> Optional DateTime Data i godzina, kiedy stawka jest uznawana za nieaktualną. Ten element ma tę samą składnię co <ExpirationTime> w <Result>.
<Occupancy> Optional integer

Określa maksymalną dozwoloną liczbę osób w przypadku tej ceny. Jeśli nie podasz żadnej wartości, zakłada się, że będzie ona taka sama jak stawka nadrzędna. <Occupancy> może towarzyszyć atrybut <OccupancyDetails>, który określa rodzaj gości (dorośli lub dzieci). Informacje o składni i opisie elementów podrzędnych znajdziesz na stronie <OccupancyDetails>.

<OtherFees> Required float Opłaty inne niż stawka podstawowa i podatki, które mają wpływ na ostateczną cenę pokoju. Ten element ma tę samą składnię co <OtherFees> w <Result>.
<Refundable> Optional Object Umożliwia wyświetlanie informacji o cenie jako objętej pełnym zwrotem lub bezpłatne anulowanie. Jeśli jej nie podasz, nie pojawią się żadne informacje o zwrocie środków. Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result>. Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData>. Ceny podlegające zwrotom mogą być też wyróżnione za pomocą alternatywnych opcji bez konieczności bezpośredniego modyfikowania schematu wiadomości transakcji. Dowiedz się więcej o tych zasadach dotyczących zwrotów.

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

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

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

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

  • available: (wymagane) ustaw wartość 1 (lub true), aby wskazać, czy stawka umożliwia pełny zwrot środków. W przeciwnym razie ustaw 0 (lub false).
  • refundable_until_days: (wymagany, jeśli available ma wartość true) określa, na ile dni przed zameldowaniem można poprosić o pełny zwrot środków. Wartość refundable_until_days musi być liczbą całkowitą z zakresu od 0 do 330 włącznie.
  • refundable_until_time: (zdecydowanie zalecany, jeśli available ma wartość true) określa ostatnią godzinę (według lokalnego czasu hotelu), aby uwzględnić prośbę o pełny zwrot środków. Możesz go połączyć z właściwością refundable_until_days, aby na przykład określić, że „Zwroty środków są dostępne do 16:00 2 dni przed datą zameldowania”. Jeśli refundable_until_time nie jest ustawiony, domyślną wartością jest północ.

    Wartość tego atrybutu ma format Time.

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

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

Przykłady

Stawka podstawowa i cena warunkowa

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

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

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

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

  </Result>
</Transaction>

Wiele cen warunkowych

Ten przykład określa stawkę podstawową i kilka cen warunkowych w <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 pokojów w elemencie podrzędnym obiektu <Result> w wiadomości <Transaction>. Zdefiniuj osobny element dla każdej kombinacji pakietu lub planu podróży. Aby zdefiniować pakiet i warunki pakietów sal, użyj narzędzia <RoomData>.

Element <RoomBundle> występuje w hierarchii XML komunikatu 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 pokojów.

Składnia

Element <RoomBundle> ma taką składnię:

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

      <!-- 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 pokoi za pobyt. Ten element używa tej samej składni co <Baserate> w <Result> z tym wyjątkiem:
  • Jeśli sala jest niedostępna w planie podróży, usuń element <RoomBundle>, aby wskazać, że sali nie ma już w asortymencie. Więcej informacji znajdziesz w artykule o usuwaniu pakietu pokoi.
<BreakfastIncluded> Optional boolean Określa, czy ten pakiet pokoi obejmuje śniadanie w cenie.
<ChargeCurrency> Optional enum Kiedy i gdzie użytkownik płaci za rezerwację. Ten element ma tę samą składnię co <ChargeCurrency> w <Result>.

Wartością domyślną jest web.

<Custom[1‑5]> Optional string Pola niestandardowe do przekazywania dodatkowych danych na strony docelowe zestawu pokoi. Te elementy mają tę samą składnię co <Custom[1-5]> w <Result>. Obowiązuje limit 200 znaków na pole niestandardowe. Więcej informacji znajdziesz w plikach stron docelowych.

Jeśli w elemencie <Result> znajdują się elementy <Custom>, nie są one dziedziczone w elemencie <RoomBundle> i powinny być zdefiniowane oddzielnie dla każdego elementu <RoomBundle> lub można go w razie potrzeby uwzględnić w elemencie <PackageData>.

<InternetIncluded> Optional boolean Jeśli pakiet pokoi obejmuje bezpłatny dostęp do internetu, a pozostałe pakiety nie obejmują tego udogodnień, Nie ustawiaj tego elementu w przypadku pakietów pokojowych w hotelach, w których wszystkie pokoje mają bezpłatny dostęp do internetu. Ten element nie dotyczy przewodowego i bezprzewodowego internetu w pokoju, które nie są dostępne w pokojach dla gości.
<Occupancy> Required integer Określa maksymalną dozwoloną liczbę osób w przypadku tej ceny. Na przykład duży apartament może pomieścić do 6 osób, ale „Pakiet podróżny” tylko dla 2 osób.

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

Do definiowania liczby osób w adresie URL strony docelowej używaj zmiennych NUM-ADULTS i NUM-CHILDREN zgodnie z opisem w artykule Korzystanie ze zmiennych i warunków. Wartość domyślna to 2 dorosłych i 0 dzieci.

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

Uwagi:

  • Zdecydowanie zalecany jest atrybut <Occupancy> dla <RoomBundle>, dlatego 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 żadnej z tych wartości nie ma żadnej wartości, domyślna wartość to 2.
  • <Occupancy> może towarzyszyć atrybut <OccupancyDetails>, który określa rodzaj gości (dorośli lub dzieci). Jeśli nie podasz typów gości, zakładamy, że są to osoby dorosłe. 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> będzie miała pierwszeństwo.
<OtherFees> Required float Opłaty inne niż stawka podstawowa i podatki, które mają wpływ na ostateczną cenę pokoju. Element <OtherFees> przyjmuje pojedynczy wymagany atrybut currency, który określa trzyliterowy kod waluty używany do naliczania opłat. np. USD w przypadku dolara amerykańskiego.
<PackageID> Optional (recommended) string Unikalny identyfikator danych pakietu. Użyj tego identyfikatora, aby dopasować dane pakietu pokoi do danych wysłanych w <PackageData>. Więcej informacji znajdziesz w metadanych pakietu sal. Korzystając z tego identyfikatora, możesz też odwoływać się do wspólnej definicji pakietu pokoi używanej w pojedynczej wiadomości transakcji podczas definiowania wbudowanych danych pakietu pokoi.
<ParkingIncluded> Optional boolean Określa, czy pakiet pokoi obejmuje wliczony w cenę parking, jeśli parking w innym przypadku byłby płatną usługą w tym hotelu. Nie określaj 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 kombinacji pomieszczenia i pakietu. Na przykład dla <RoomID> wartości 5 i wartości <PackageID> ABC możesz użyć wartości 5-ABC dla elementu <RatePlanID>. Zdecydowanie zalecamy używanie RatePlanID jako zmiennej do tworzenia dynamicznego adresu URL strony docelowej (dawniej punktu sprzedaży).

Więcej informacji znajdziesz w artykule Korzystanie ze zmiennych i warunków.

<Rates> Optional <Rates> Stawki, które zastępują domyślne stawki dla tego pakietu pokoi. Ten element używa tej samej składni co <Rates> w <Result>.
<Refundable> Optional Object Umożliwia wyświetlanie informacji o cenie jako objętej pełnym zwrotem lub bezpłatne anulowanie. Jeśli jej nie podasz, nie pojawią się żadne informacje o zwrocie środków. Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result>. Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData>. Ceny podlegające zwrotom mogą być też wyróżnione za pomocą alternatywnych opcji bez konieczności bezpośredniego modyfikowania schematu wiadomości transakcji. Dowiedz się więcej o tych zasadach dotyczących zwrotów.

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

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

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

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

  • available: (wymagane) ustaw wartość 1 (lub true), aby wskazać, czy stawka umożliwia pełny zwrot środków. W przeciwnym razie ustaw 0 (lub false).
  • refundable_until_days: (wymagany, jeśli available ma wartość true) określa, na ile dni przed zameldowaniem można poprosić o pełny zwrot środków. Wartość refundable_until_days musi być liczbą całkowitą z zakresu od 0 do 330 włącznie.
  • refundable_until_time: (zdecydowanie zalecany, jeśli available ma wartość true) określa ostatnią godzinę (według lokalnego czasu hotelu), aby uwzględnić prośbę o pełny zwrot środków. Możesz go połączyć z właściwością refundable_until_days, aby na przykład określić, że „Zwroty środków są dostępne do 16:00 2 dni przed datą zameldowania”. Jeśli refundable_until_time nie jest ustawiony, domyślną wartością jest północ.

    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 jest wyświetlana jako podlegająca zwrotowi.
  • Jeśli available ma wartość 0 (lub false), pozostałe atrybuty są ignorowane. Stawka nie jest wyświetlana jako podlegająca zwrotowi, nawet jeśli ustawiono co najmniej jeden z pozostałych atrybutów.
<RoomID> Required string Unikalny identyfikator danych pokoju. Użyj tego identyfikatora, aby dopasować dane pakietu pokoi do danych wysłanych w <RoomData>. Więcej informacji znajdziesz w metadanych pakietu pokoi. (Możesz też użyć tego identyfikatora, aby odwołać się do definicji pokoju wspólnego w pojedynczej wiadomości transakcji podczas definiowania wbudowanych danych pokoju).
<Tax> Required float Podatki obliczane od ostatecznej ceny pokoju. Element <Tax> przyjmuje 1 wymagany atrybut currency, który określa 3-literowy kod waluty na potrzeby podatków. np. USD w przypadku dolara amerykańskiego.

Przykłady

Pakiet dla 1 osoby

Poniższy przykład zawiera odpowiedź z pakietem dla 1 osoby. Gdy użytkownik wybierze 1 w selektorze liczby obłożenia, Google wyświetli najniższą możliwą 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 ceny za 1 osobę nie są wysyłane w odpowiedzi na zapytania, jeśli plan podróży zawiera ceny dla co najmniej 2 osób.

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

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

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

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


Co najmniej 2 osoby

Poniższy przykład zdefiniowano odpowiedź zawierającą co najmniej 2 osoby.

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

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

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

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


Pakiety pokojów

Poniższy przykład pokazuje liczbę obłożenia w wielu pakietach pokoi, aby zademonstrować możliwe ceny za pokoje hostelowe.

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

Ten przykład określa stawkę podstawową i kilka cen warunkowych w <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 transakcji określa maksymalną liczbę gości za pokój lub pakiet. <OccupancyDetails> może zawierać dodatkowe informacje, np. liczbę i typ gości (dorośli lub dzieci).

Gdy w elemencie <Rates> w <Result> lub <RoomBundle> znajdują się <Occupancy> i <OccupancyDetails>, oznacza to, że cena jest ograniczona przez informacje o obłożeniu.

Składnia

Jeśli występuje ciąg <OccupancyDetails>, jest on zawsze poprzedzony znakiem <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 r.
<Children> Optional Object Kontener na co najmniej 1 element <Child>.
<Child age> Optional integer Maksymalny wiek tego dziecka, na przykład <Child age="17">.

Przykłady

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

Odpowiedź dotycząca wyniku

Ten przykład określa 1 plan podróży i cenę jednej usługi w odpowiedzi na zapytanie o cenę w czasie rzeczywistym, w którym użytkownik określił liczbę i rodzaje gości. W tym przypadku <OccupancyDetails> – 2 dorosłe osoby i 1 dziecko – zwracane są za <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>

Odpowiedź dotycząca stawek

Ten przykład określa 1 plan podróży i cenę dla 1 osoby dorosłej i 1 dziecka. W tym przypadku <OccupancyDetails> są zwracane 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 pokojów

W przykładzie poniżej określono pobyt 2 dorosłych i 1 dziecko na 2 noce i opłata podlegająca zwrotowi. Tutaj <OccupancyDetails> są widoczne 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 pokojów

W poniższym przykładzie zdefiniowano wiele stawek <RoomBundle>, które są przeznaczone tylko dla 2 dorosłych i 2 dzieci. W tym przypadku <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>