Na tej stronie znajdziesz informacje o komunikatach o transakcjach opartych na języku XML.
<Transaction>
Elementem głównym wiadomości o transakcji jest <Transaction>
. Jest to kontener zawierający opisowe informacje o pokojach i pakietach lub cenach i dostępności pokojów i pakietów.
Element <Transaction>
pojawia się w hierarchii XML wiadomości o transakcji w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Wiadomości, których elementem głównym jest <Transaction>
, wymagają co najmniej 1 elementu podrzędnego. Wiadomości o transakcjach mogą zawierać dowolną liczbę elementów podrzędnych, o ile ich łączny rozmiar nie przekracza 100 MB.
Składnia
W elemencie <Transaction>
używana jest taka składnia:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="timestamp" id="transaction_ID">
<!-- Defines data about a room or package (Room Bundle) -->
<PropertyDataSet>
...
</PropertyDataSet>
<!-- Updates/sets prices and availability for rooms and Room Bundles -->
<!-- (Also removes itineraries from inventory) -->
<Result>
...
</Result>
</Transaction>
Atrybuty
Element <Transaction>
ma te atrybuty:
Atrybut | Wymagana? | Typ | Opis |
---|---|---|---|
id | Required | ciąg znaków | Unikalny identyfikator każdej wiadomości dotyczącej transakcji. |
partner | Optional | string | Konto partnera, którego dotyczy wiadomość dotycząca transakcji. Zwykle korzystasz z tej opcji, jeśli Twój backend udostępnia pliki danych z cenami dla wielu kont partnerów. Ta wartość ciągu znaków jest wartością „Klucz partnera” podaną na stronie Ustawienia konta w Hotel Center. |
timestamp | Required | DateTime | Moment wysłania wiadomości o transakcji. Wszystkie wiadomości z sygnaturą czasową wysłane w ciągu ostatnich 24 godzin zostaną przetworzone, a pozostałe zostaną odrzucone. Wiadomości są przetwarzane w kolejności od |
Elementy potomne
Element <Transaction>
ma te elementy podrzędne:
Element podrzędny | Wymagana? | Typ | Opis |
---|---|---|---|
<PropertyDataSet> | Optional* | <PropertyDataSet> |
Opisuje konkretne sale i pakiety pokoi. Tego elementu zwykle używa się w osobnej wiadomości dotyczącej transakcji, aby zdefiniować wspólne wartości dla pakietów pokoi i zmniejszyć rozmiar wiadomości o transakcjach. |
<Result> | Optional* | <Result> |
Dane o cenach w planie podróży sali lub w elemencie |
* Wymagane jest co najmniej 1 z tych właściwości: <PropertyDataSet> lub <Result> . |
Przykłady
Dane dotyczące pomieszczenia
Ten przykład pokazuje zdefiniowanie danych pokoju w prostej wiadomości o transakcji:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>5440OF</RoomID>
<Name>
<Text text="Single King Bed Room" language="en"/>
<Text text="Simple Lit de Roi" language="fr"/>
</Name>
<Description>
<Text text="One king bed with pillowtop mattresses, 300-thread-count linens,
and down comforters (bedspreads). City view. 300 square feet. Desk with
rolling chair. Multi-line phone with voice mail. Cable/satellite TV with
complimentary HBO and pay movies." language="en"/>
<Text text="Un très grand lit avec matelas à plateau-coussin, ..." language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Bathroom View" language="en"/>
<Text text="La salle de baines" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Capacity>4</Capacity>
</RoomData>
</PropertyDataSet>
</Transaction>
Dane dotyczące cen
Poniższy przykład pokazuje dane o cenach w prostej wiadomości transakcji:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>060773</Property>
<RoomID>RoomType101</RoomID>
<PackageID>Package101</PackageID>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">278.33</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="site1"/>
</AllowablePointsOfSale>
</Result>
<Result>
<Property>052213</Property>
<RoomID>RoomType101</RoomID>
<PackageID>Package101</PackageID>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">299.98</Baserate>
<Tax currency="USD">26.42</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="otto"/>
<PointOfSale id="simon"/>
</AllowablePointsOfSale>
</Result>
</Transaction>
Ceny za noc
W tym przykładzie zdefiniowano dane o cenach za okres od 1 do 7 nocy od 7 czerwca 2023 r.:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-08-24T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">209.99</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">419.98</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>3</Nights>
<Baserate currency="USD">614.97</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>4</Nights>
<Baserate currency="USD">819.96</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>5</Nights>
<Baserate currency="USD">999.95</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>6</Nights>
<Baserate currency="USD">1193.94</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>7</Nights>
<Baserate currency="USD">1259.93</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
</Transaction>
Ceny podstawowe i warunkowe
Poniższy przykład pokazuje komunikat o transakcji zawierający stawkę podstawową i stawkę warunkową:
<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2023-04-10</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">200.00</Baserate>
<Tax currency="USD">20.00</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<Rates>
<!-- The rate_rule_id is required when using conditional rates -->
<Rate rate_rule_id="mobile">
<!-- Override base rate and taxes for conditional rates -->
<Baserate currency="USD">180.00</Baserate>
<Tax currency="USD">18.00</Tax>
<!-- NOTE: OtherFees is inherited from the above setting -->
<Custom1>ratecode123</Custom1>
</Rate>
</Rates>
</Result>
</Transaction>
Usuwanie zasobów reklamowych
W tym przykładzie usunięto z asortymentu kilka zasobów reklamowych (pobyty na 1 noc w różnych dniach):
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-05-23T16:20:00-04:00" id="42">
<Result>
<Property>1123581321</Property>
<Checkin>2023-05-23</Checkin>
<Nights>1</Nights>
<Unavailable>
<NoVacancy/>
</Unavailable>
<Tax currency="USD">0</Tax>
<OtherFees currency="USD">0</OtherFees>
</Result>
<Result>
<Property>1123581321</Property>
<Checkin>2023-05-24</Checkin>
<Nights>1</Nights>
<Unavailable>
<NoVacancy/>
</Unavailable>
<Tax currency="USD">0</Tax>
<OtherFees currency="USD">0</OtherFees>
</Result>
<!---Sending <Baserate> is optional with <Unavailable> -->
<Result>
<Property>1123581321</Property>
<Checkin>2023-05-25</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">-1</Baserate>
<Unavailable>
<NoVacancy/>
</Unavailable>
<Tax currency="USD">0</Tax>
<OtherFees currency="USD">0</OtherFees>
</Result>
</Transaction>
<PropertyDataSet>
Kontener informacji o sali i pakiecie (lub zestawie sal) w wiadomości <Transaction>
. Wartości ustawione w hotelu zastępującym wartości ustawione u partnera.
Google przechowuje te informacje, więc nie musisz ich definiować za każdym razem, gdy wysyłasz aktualizacje cen.
Element <PropertyDataSet>
pojawia się w hierarchii XML wiadomości o transakcji w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Więcej informacji znajdziesz w artykule na temat metadanych pakietów sal.
Składnia
W elemencie <PropertyDataSet>
używana jest taka składnia:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <PropertyDataSet> <!-- (Required) ID that matches the Hotel List Feed --> <Property>hotel_ID</Property> <!-- (Optional) Defines metadata about a room --> <RoomData> ... </RoomData> <!-- (Optional) Defines package metadata to be paired with rooms (Room Bundles) --> <PackageData> ... </PackageData> </PropertyDataSet> ... </Transaction>
Atrybuty
Element <PropertyDataSet>
nie ma atrybutów.
Elementy potomne
Element <PropertyDataSet>
ma te elementy podrzędne:
Element podrzędny | Wymagana? | Typ | Opis |
---|---|---|---|
<PackageData> | Optional* | <PackageData> |
Opisuje pakiet pokoi. Te dane są powiązane z partnerem i hotelem, ale nie z planem podróży. Ten element jest podobny do elementu <RoomData> , ale opisuje udogodnienia i hasła, które nie są częścią opisu pomieszczenia fizycznego.
Podajesz identyfikator pakietu w aktualizacji cen. Więcej informacji znajdziesz w artykule o metadanych pakietu sal. |
<Property> | Required | string | Identyfikator hotelu, którego dotyczą powiązane dane. Wartość tego elementu musi być ciągiem znaków pasującym do wpisu <id> w pliku danych z listą hoteli.
|
<RoomData> | Optional* | <RoomData> |
Opisuje pomieszczenie. Te dane są powiązane z partnerem i hotelem, ale nie z planem podróży.
W aktualizacji cen odwołujesz się do identyfikatora pokoju. |
* Wymagane jest co najmniej 1 z tych właściwości: <PackageData> lub <RoomData> . |
Przykłady
Dane dotyczące sal i pakietów
Ten przykład pokazuje dane dotyczące sal i pakietów w pliku <PropertyDataSet>
:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>180054</Property>
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Bed Room" language="en"/>
<Text text="Chambre single" language="fr"/>
</Name>
<Description>
<Text text="Non-smoking" language="en"/>
<Text text="Pas de fumiers" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
</RoomData>
<PackageData>
<PackageID>P54321</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
<Text text="Avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Includes a delightful array of jams and jellies." language="en"/>
<Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
</Description>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
</PropertyDataSet>
</Transaction>
Przesyłając ceny i dostępność tego pokoju lub pakietu, w komunikatach o cenach podajesz identyfikatory pokoi i pakietów. W efekcie znacznie zmniejszasz rozmiar wiadomości i zmniejszasz liczbę błędów, które mogą wystąpić z powodu duplikowania danych. Więcej informacji znajdziesz w artykule o metadanych pakietów sal.
<RoomData>
Definiuje niezależne od planu podróży metadane dotyczące pokojów, a przede wszystkim grupy pokoi (bo pakiety pokoi to pokoje z dodatkowymi udogodnieniami). Aby ograniczyć powtarzanie danych opisowych w pliku danych z cenami, użyj atrybutu <RoomData>
.
Element <RoomData>
pojawia się w hierarchii XML wiadomości o transakcji w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Elementy <RoomData>
zawierają informacje powiązane z partnerem i hotelem, ale nie z planem podróży. Jego przeznaczeniem jest zbieranie wszystkich danych niezwiązanych z planem podróży.
Element <RoomData>
jest podobny do elementu <PackageData>
, ale opisuje miejsce fizyczne, a nie udogodnienia i warunki pakietu. Aby podać szczegółowe informacje o pakietach sal, użyj kombinacji <RoomData>
i <PackageData>
. W przypadku pokoi, które nie są częścią pakietu, użyj tylko pokoju <RoomData>
.
Możesz zdefiniować elementy <RoomData>
i <PackageData>
dla tego samego pokoju lub zestawu pokoi. Gdy Google wyświetla w wynikach wyszukiwania tę salę lub pakiet, będzie zawierać opis obu pokoi oddzielony łącznikiem.
Więcej informacji znajdziesz w artykule na temat metadanych pakietów sal.
Składnia
W elemencie <RoomData>
używana jest taka składnia:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <PropertyDataSet> ... <RoomData> <RoomID>room_ID</RoomID> <Name> <Text text="room_name" language="language_code"/> ... </Name> <Description> <Text text="room_description" language="language_code"/> ... </Description> <Capacity>max_number_of_occupants</Capacity> <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <!-- optional info about the types of guests, whether adults, children, or seniors --></OccupancyDetails> <OccupancySettings> <MinOccupancy>min_number_of_occupants</MinOccupancy> <MinAge>min_age_of_occupants</MinAge> </OccupancySettings> <PhotoURL> <Caption> <Text text="photo_description" language="language_code"/> ... </Caption> <URL>photo_location</URL> </PhotoURL> <RoomFeatures> ... </RoomFeatures> </RoomData> ... </PropertyDataSet> </Transaction>
Atrybuty
Element <RoomData>
nie ma atrybutów.
Elementy potomne
Element <RoomData>
ma te elementy podrzędne:
Element podrzędny | Wymagana? | Typ | Opis |
---|---|---|---|
<Capacity> | Optional | integer | Maksymalna liczba gości, którą może fizycznie obsłużyć sala. Pojemność sali jest równa liczbie osób lub od niej większa.
Jeśli została określona, musi być równa wartości elementu Wartość |
<Description> | Optional | Object | Szczegółowy opis pokoju. Ten element powinien zawierać informacje, które nie są opisane w innych elementach ani w elemencie <Name> . Opis pokoju nie powinien zawierać samych wielkich liter.
Element
Użyj osobnego elementu Ten przykład pokazuje francuską i angielską wersję opisu pokoju: <Description> <Text text="Two queen-sized beds" language="en"/> <Text text="Deux lits de la reine" language="fr"/> </Description> |
<Name> | Required | string | Nazwa kategorii pokoju. Ta wartość powinna odpowiadać wartości wyświetlanej na stronie docelowej hotelu (dawniej punktu sprzedaży). Nie ustawiaj wartości tego elementu wyłącznie na wielkie litery.
Ten element przyjmuje pojedynczy element podrzędny
Użyj osobnego elementu Ten przykład pokazuje francuską i angielską wersję nazwy sali: <Name> <Text text="Standard Double Room" language="en"/> <Text text="Le chambre double" language="fr"/> </Name> |
<Occupancy> | Optional | integer | Maksymalna liczba gości, dla których jest przeznaczona sala.
Na przykład duży apartament może fizycznie pomieścić do 6 osób (liczba miejsc: 6), ale jest przeznaczony wyłącznie dla 4 osób.
Ta wartość nie może być większa od wartości elementu Wartość Termi |
<OccupancySettings> | Optional | Object | Ustawienia, które mogą ograniczać lub modyfikować wymagania dotyczące obłożenia sali.
Element
<OccupancySettings> <MinOccupancy>2</MinOccupancy> <MinAge>16</MinAge> </OccupancySettings> Nie wszystkie elementy podrzędne muszą być uwzględnione. |
<PhotoURL> | Optional | Object | Adres URL i opcjonalny podpis zdjęcia danego pokoju lub zestawu pokoi. Dla pokoju lub pakietu pokoi możesz określić więcej niż 1 element <PhotoURL> . Każdy adres URL zdjęcia musi mieć własny element <PhotoURL> .
Ten element pobiera następujące elementy podrzędne:
Przykład: <PhotoURL> <URL>https://www.example.com/static/bar/image1234.jpg</URL> <Caption> <Text text="A bright and breezy way to enjoy your mornin' cuppa tea." language="en"/> <Text text="Une façon lumineuse et aérée pour profiter de votre journée tasse de thé." language="fr"/> </Caption> </PhotoURL> <PhotoURL> <URL>https://www.foo.com/static/bar/image5678.jpg</URL> <Caption> <Text text="Or, perhaps you prefer coffee." language="en"/> <Text text="Ou peut-être préférez-vous le café." language="fr"/> </Caption> </PhotoURL> |
<RoomFeatures> | Optional | <RoomFeatures> |
Zawiera informacje o wyposażeniu pokoju. |
<RoomID> | Required | string | Unikalny identyfikator sali. Użyj tego identyfikatora, aby dopasować dane sal do bloków <Result> w aktualizacji cen. Więcej informacji znajdziesz w sekcji Metadane pakietu sal. Możesz też użyć tego identyfikatora, aby odwołać się do definicji świetlicy w pojedynczej wiadomości dotyczącej transakcji, gdy zdefiniujesz wbudowane dane pokoju. |
Przykłady
Dane dotyczące pomieszczenia
W tym przykładzie zdefiniowano dane dotyczące sal:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>5440OF</RoomID>
<Name>
<Text text="Single King Bed Room" language="en"/>
<Text text="Simple Lit de Roi" language="fr"/>
</Name>
<Description>
<Text text="One king bed with pillowtop mattresses, 300-thread-count linens,
and down comforters (bedspreads). City view. 300 square feet. Desk with
rolling chair. Multi-line phone with voice mail. Cable/satellite TV with
complimentary HBO and pay movies." language="en"/>
<Text text="Un très grand lit avec matelas à plateau-coussin, ..." language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Bathroom View" language="en"/>
<Text text="La salle de baines" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Capacity>4</Capacity>
</RoomData>
</PropertyDataSet>
</Transaction>
Metadane dotyczące sali i pakietu
Poniższy przykład zawiera metadane dotyczące sali i pakietu:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>180054</Property>
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Bed Room" language="en"/>
<Text text="Chambre single" language="fr"/>
</Name>
<Description>
<Text text="Non-smoking" language="en"/>
<Text text="Pas de fumiers" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
</RoomData>
<PackageData>
<PackageID>P54321</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
<Text text="Avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Includes a delightful array of jams and jellies." language="en"/>
<Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
</Description>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
</PropertyDataSet>
</Transaction>
Pakiety z kilkoma pokojami
W tym przykładzie zdefiniowano metadane dotyczące sal i pakietów w przypadku wielu grup pomieszczeń:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<!-- A transaction message with room types result. -->
<PropertyDataSet>
<Property>12345</Property>
<RoomData>
<RoomID>single</RoomID>
<Name>
<Text text="Single room" language="en"/>
<Text text="Chambre simple" language="fr"/>
</Name>
<Description>
<Text text="A single room" language="en"/>
<Text text="Le chambre simple" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<PhotoURL>
<URL>http://www.foo.com/static/bar/image1235.jpg</URL>
</PhotoURL>
<Capacity>2</Capacity>
</RoomData>
<RoomData>
<RoomID>double</RoomID>
<Name>
<Text text="Double room" language="en"/>
<Text text="Chambre double" language="fr"/>
</Name>
<Occupancy>1</Occupancy>
</RoomData>
<PackageData>
<PackageID>refundbreakfast</PackageID>
<Name>
<Text text="Refundable Room with Breakfast" language="en"/>
<Text text="Chambre remboursable avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Continental Breakfast" language="en"/>
<Text text="Petit déjeuner continental" language="fr"/>
</Description>
<ChargeCurrency>hotel</ChargeCurrency>
<Refundable available="1" refundable_until_days="3"/>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
<PackageData>
<PackageID>prepaid</PackageID>
<Name>
<Text text="Nonrefundable" language="en"/>
<Text text="Non remboursable" language="fr"/>
</Name>
<Description>
<Text text="Blah blah blad" language="en"/>
<Text text="Le blah blah blad" language="fr"/>
</Description>
<Occupancy>2</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="0"/>
</PackageData>
</PropertyDataSet>
</Transaction>
<RoomFeatures>
Określa cechy znalezione w pokoju.
Element <RoomFeatures>
pojawia się w hierarchii XML wiadomości o transakcji w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<RoomFeatures>
Składnia
W elemencie <RoomFeatures>
używana jest taka składnia:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <PropertyDataSet ... > ... <RoomData> <RoomFeatures> <JapaneseHotelRoomStyle>[western|japanese|japanese_western]</JapaneseHotelRoomStyle> <Beds> <Bed size="[single|semi_double|double|queen|king]"> <Width unit="cm" number="width"/> <Length unit="cm" number="length"/> </Bed> <!-- Include with any additional beds. --> </Beds> <Suite/> <Capsule/> <Roomsharing>[shared|private]</Roomsharing> <Outdoor/> <MobilityAccessible/> <Smoking>[smoking|non_smoking]</Smoking> <BathAndToilet relation="[together|separate]"> <Bath bathtub="[false|true]" shower="[false|true]"/> <Toilet electronic_bidet="[false|true]" mobility_accessible="[false|true]"/> </BathAndToilet> <OpenAirBath/> <AirConditioning/> <Balcony/> <Views> <!-- (Optional) Defines the type of views from the room. --> <!-- Example: <OceanView/> --> </Views> </RoomFeatures> ... </RoomData> ... </PropertyDataSet> </Transactions>
Atrybuty
Element <RoomFeatures>
nie ma atrybutów.
Elementy potomne
Element <RoomFeatures>
ma te elementy podrzędne:
Element podrzędny | Wymagana? | Typ | Opis |
---|---|---|---|
<JapaneseHotelRoomStyle> | Optional | enum | Wskazuje styl japońskiego pokoju hotelowego. Prawidłowe wartości to:
|
<Beds> | Optional | Object | Liczba pokoi w pokoju <Bed> jest równa liczbie dostępnej w pokoju. Pamiętaj, że nie uwzględniamy tutaj japońskich futonów.
Każdy element
<Bed> zawiera te elementy podrzędne:
<Beds> <Bed size="double"> <Width unit="cm" number="140"/> <Length unit="cm" number="195"/> </Bed> <Bed/> <!-- Size unknown --> </Beds> |
<Suite> | Optional | empty | Dodaj ten element, jeśli pokój jest apartamentem. |
<Capsule> | Optional | empty | Dodaj ten element, jeśli pokój jest kapsułą. |
<Roomsharing> | Optional | enum | Określa, czy sala jest udostępniana innym osobom, np. właścicielom lub innym gościom. Prawidłowe wartości to shared i private . |
<Outdoor> | Optional | empty | Użyj tego elementu, jeśli pokój to hotel na zewnątrz, który nie ma stałych ścian, hydrauliki ani klimatyzacji. Na przykład pokoje hotelowe nie są zakwaterowaniem na świeżym powietrzu, a kempingi, w których goście przebywają w namiotach, i parkingi dla kamperów, do których przyjeżdżają własne kamery, – miejsca zakwaterowania na świeżym powietrzu. |
<MobilityAccessible> | Optional | empty | Dodaj ten element, gdy sala jest przystosowana do urządzeń mobilnych. |
<Smoking> | Optional | enum | Czy jest to pokój dla niepalących, czy też pokój dla palących. Prawidłowe wartości to non_smoking i smoking . |
<BathAndToilet> | Optional | Object | zawiera informacje na temat wanny i toalety w pokoju.
Atrybut to:
Element opcjonalnie pobiera te elementy podrzędne:
Przykład: <BathAndToilet relation="separate"> <Bath bathtub="1" shower="1"/> <Toilet electronic_bidet="1" mobility_accessible="1"/> </BathAndToilet> |
<OpenAirBath> | Optional | empty | Dodaj ten element, jeśli w pokoju znajduje się prywatna łazienka na świeżym powietrzu. |
<AirConditioning> | Optional | empty | Dodaj ten element, jeśli pokój jest klimatyzowany. |
<Balcony> | Optional | empty | Dodaj ten element, jeśli pokój ma balkon lub werandę. |
<Views> | Optional | Object | Możliwe opcje:
|
Przykłady
JapaneseHotelRoomStyle
nie ma wartości domyślnej. Pominięcie wartości nie powoduje błędu XML, ale informacje o firmie nie wyświetlają się w wynikach wyszukiwania, gdy użytkownik filtruje według stylu pokoju lub łóżek.
2 łóżka pojedyncze
Ten przykład pokazuje, jak użyć atrybutu <RoomFeatures>
:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomFeatures>
<JapaneseHotelRoomStyle>western</JapaneseHotelRoomStyle>
<Beds> <!-- Two single beds -->
<Bed size="single">
<Width unit="cm" number="97"/>
<Length unit="cm" number="195"/>
</Bed>
<Bed size="single">
<Width unit="cm" number="97"/>
<Length unit="cm" number="195"/>
</Bed>
</Beds>
<Suite/>
<Capsule/>
<Roomsharing>private</Roomsharing>
<Outdoor/>
<MobilityAccessible/>
<Smoking>non_smoking</Smoking>
<BathAndToilet relation="separate">
<Bath bathtub="1" shower="1"/>
<Toilet electronic_bidet="1" mobility_accessible="1"/>
</BathAndToilet>
<OpenAirBath/>
<AirConditioning/>
<Balcony/>
<Views>
<LakeView/>
<MarinaView/>
<BeachView/>
<ForestView/>
<MountainView/>
<NatureView/>
</Views>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
2 łóżka podwójne
Poniżej znajduje się przykład pokoju japońskiego w stylu western
z 2 łóżkami double
.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomFeatures>
<JapaneseHotelRoomStyle>western</JapaneseHotelRoomStyle>
<Beds> <!-- Two double beds-->
<Bed size="double"></Bed>
<Bed size="double"></Bed>
</Beds>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
Japoński bez łóżka
Poniżej znajdziesz przykład pokoju bez łóżka w japońskim stylu. Informacje o łóżku nie są wymagane w przypadku pokoju w stylu japanese
.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomFeatures>
<JapaneseHotelRoomStyle>japanese</JapaneseHotelRoomStyle>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
Japoński western z łóżkiem
Poniżej znajduje się przykład pokoju w stylu japanese_western
z łóżkiem o rozmiarze king
.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomFeatures>
<JapaneseHotelRoomStyle>japanese_western</JapaneseHotelRoomStyle>
<Beds>
<Bed size="king"></Bed>
</Beds>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
Jeśli partner nie ma informacji o liczbie łóżek w japanese_western
pokojach, skorzystaj z tego przykładu:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomFeatures>
<JapaneseHotelRoomStyle>japanese_western</JapaneseHotelRoomStyle>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
<PackageData>
Definiuje niezależne od planu podróży metadane dotyczące pakietów pokojów obiektu. Zawiera on informacje powiązane z partnerem i hotelem, ale nie z planem podróży. Jego celem jest jednorazowe zdefiniowanie wszystkich danych niebędących podróżami i odwołanie się do nich w danych planu podróży.
Element <PackageData>
pojawia się w hierarchii XML wiadomości o transakcji w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Element <PackageData>
jest podobny do elementu <RoomData>
, ale opisuje funkcje związane z cenami i hasła, które nie są częścią opisu pomieszczenia fizycznego. Stosując kombinację <RoomData>
i <PackageData>
, możesz podawać szczegółowe informacje o pakietach sal i funkcjach cen. W przypadku pokoi, które nie są częścią pakietu, użyj tylko <RoomData>
.
W przypadku tego samego pokoju lub zestawu pokoi możesz zdefiniować elementy <RoomData>
i <PackageData>
. Gdy Google wyświetla w wynikach wyszukiwania tę salę lub pakiet, będzie zawierać opis obu pokoi oddzielony łącznikiem.
Jeśli aktualizujesz pojedynczy element <PackageData>
w danej usłudze, musisz zaktualizować wszystkie jej elementy <PackageData>
i <RoomData>
.
Każdy element <PropertyDataSet>
jest traktowany jako wszystkie dane o usłudze i zastępuje wszystkie istniejące dane.
Więcej informacji znajdziesz w artykule na temat metadanych pakietów sal.
Składnia
W elemencie <PackageData>
używana jest taka składnia:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
<PropertyDataSet ... >
<PackageData>
<PackageID>package_ID</PackageID>
<Name>
<Text text="package_name" language="language_code"/>
...
</Name>
<Description>
<Text text="package_description" language="language_code"/>
...
</Description>
<Refundable available="[false|true]" refundable_until_days="number_of_days"
refundable_until_time="time"/>
<ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency>
<Occupancy>max_number_of_intended_occupants</Occupancy>
<OccupancyDetails><!-- optional info about the types of guests,
whether adults or children --></OccupancyDetails>
<!-- For these next 3 elements, boolean_value can be 0/1 or true/false -->
<BreakfastIncluded>boolean_value</BreakfastIncluded>
<InternetIncluded>boolean_value</InternetIncluded>
<ParkingIncluded>boolean_value</ParkingIncluded>
<PhotoURL>
<Caption>
<Text text="photo_description" language="language_code"/>
...
</Caption>
<URL>photo_location</URL>
</PhotoURL>
...
<Meals>
<Breakfast
included="[true|false]" buffet="[true|false]"
in_room="[true|false]" in_private_space="[true|false]"/>
<Dinner
included="[true|false]" buffet="[true|false]"
in_room="[true|false]" in_private_space="[true|false]"/>
</Meals>
<CheckinTime>checkin_time</CheckinTime>
<CheckoutTime>checkout_time</CheckoutTime>
<MembershipBenefitsIncluded>
<ProgramName>
<Text language="en" text="Special Rewards">
</ProgramName>
<ProgramLevel>
<Text language="en" text="Platinum">
</ProgramLevel>
</MembershipBenefitsIncluded>
<OnPropertyCredit>
<Amount currency="USD">123.45</Amount>
</OnPropertyCredit>
</PackageData>
<!-- a PackageID with a MilesIncluded
rate feature -->
<PackageData>
<PackageID>room_with_miles</PackageID>
<Name>
<Text text="Room with Bundled Miles" language="en">
</Name>
<ChargeCurrency>hotel </ChargeCurrency>
<MilesIncluded>
<NumberOfMiles>1000 </NumberOfMiles>
<Provider>
<Text language="en" text="United Airlines">
</Provider>
</MilesIncluded>
</PackageData>
...
...
</PropertyDataSet>
...
</Transaction>
Atrybuty
Element <PackageData>
nie ma atrybutów.
Elementy potomne
Element <PackageData>
ma te elementy podrzędne:
Element podrzędny | Wymagana? | Typ | Opis |
---|---|---|---|
<BreakfastIncluded> | Optional | boolean | Określa, czy pakiet obejmuje śniadanie w cenie.
Prawidłowe wartości to 0 (lub false ) i 1 (lub true ).
Zaleca się użycie właściwości |
<ChargeCurrency> | Optional | enum | Kiedy i gdzie użytkownik płaci za rezerwację. Ten element używa tej samej składni co element <ChargeCurrency> w elemencie <Result> .
Wartością domyślną jest |
<CheckinTime> | Optional | Time | Najwcześniejsza możliwa godzina zameldowania. Godzina nie może być późniejsza niż 24:00 czasu lokalnego. |
<CheckoutTime> | Optional | Time | Najpóźniejsze możliwe wymeldowanie według czasu lokalnego. |
<Description> | Optional | Object | Szczegółowy opis pakietu. Ten element powinien zawierać informacje, które nie są opisane w innych elementach ani w elemencie <Name> . Opis pokoju nie powinien zawierać samych wielkich liter.
Element <Description> <Text text="Two breakfast buffet certificates for each night of stay." language="en"/> <Text text="Deux certificats petit-déjeuner buffet pour chaque nuit de séjour." language="fr"/> </Description> |
<InternetIncluded> | Optional | boolean | Pakiet obejmuje bezpłatny dostęp do internetu, podczas gdy inne pakiety nie obejmują tego udogodnienia. Nie ustawiaj tego elementu dla pakietów pokoi w hotelu, który ma bezpłatny dostęp do internetu we wszystkich
pokojach. Nie dotyczy on internetu przewodowego ani bezprzewodowego w pokoju, który nie jest dostępny w pokojach gościnnych. Prawidłowe wartości to 0 (lub false ) i 1 (lub true ).
|
<Meals> | Optional | Object | Zawiera informacje o posiłkach w tym opakowaniu.
Element
Atrybuty opcjonalne są używane tylko wtedy, gdy Aby filtry posiłków ( |
<Name> | Required | string | Nazwa pakietu. Ta wartość powinna odpowiadać wartości wyświetlanej na stronie docelowej hotelu. Nie ustawiaj wartości tego elementu wyłącznie na wielkie litery.
Ten element przyjmuje pojedynczy element podrzędny <Name> <Text text="Bed and Breakfast" language="en"/> <Text text="Lit et petit déjeuné" language="fr"/> </Name> |
<Occupancy> | Optional | integer | Maksymalna liczba gości, dla których jest przeznaczony pakiet pokoi.
Na przykład duży apartament może fizycznie pomieścić 6 osób, ale jest przeznaczony tylko dla 4 osób.
Ta wartość nie może być większa od wartości elementu Wartość Jeśli określisz ten element zarówno w Uwaga: Terminem<Occupancy> może towarzyszyć
<OccupancyDetails> ,który określa typ gości (dorośli lub dzieci). Informacje o składni i opisach elementów podrzędnych znajdziesz w sekcji <OccupancyDetails> .
|
<PackageID> | Required | string | Unikalny identyfikator pakietu. Użyj tego identyfikatora, aby dopasować dane pakietu sal do bloków <Result> w aktualizacjach cen. Więcej informacji znajdziesz w artykule o metadanych pakietu sal.
Możesz też użyć tego identyfikatora, aby odwołać się do definicji wspólnego pakietu pokoi w pojedynczej wiadomości z transakcją podczas definiowania wbudowanych danych pakietu pokoi. |
<ParkingIncluded> | Optional | boolean | Określa, czy pakiet pokoi obejmuje bezpłatny parking, gdzie parking w tym hotelu byłby płatny. Nie podawaj wartości tego elementu w przypadku hotelu z bezpłatnym parkingiem.
Prawidłowe wartości to |
<PhotoURL> | Optional | Object | (tak samo jak <PhotoURL> w <RoomData> , ale w przypadku opakowania (np. zdjęć posiłków)
|
<Refundable> | Optional | Object | Umożliwia podanie ceny jako pełnej zwrotu środków lub jej bezpłatne anulowanie. Jeśli nie zostanie podany, informacje o zwrocie środków nie zostaną wyświetlone.
Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result> . Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData> . Ceny podlegające zwrotom można też wyróżnić za pomocą alternatywnych opcji, bez konieczności bezpośredniego modyfikowania schematu wiadomości o transakcji. Więcej informacji o tych opcjach znajdziesz tutaj.
Poniższy przykład pokazuje element <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Uwaga: zalecamy ustawienie wszystkich atrybutów. Jeśli nie zostanie ustawiony co najmniej 1 atrybut, zostanie wygenerowane ostrzeżenie o stanie pliku danych. Jeśli nie ustawisz żadnych atrybutów, stawka nie będzie wyświetlana jako podlegająca zwrotowi. Atrybuty to:
Podczas ustawiania atrybutów pamiętaj o tych kwestiach:
|
<MembershipBenefits |
Optional | boolean | Cena obejmuje korzyści ze statusu elitarnego użytkownika za czas pobytu. Zawiera te parametry:
|
<CarRentalIncluded> | Optional | boolean | W cenę pobytu wliczone jest wypożyczenie samochodu na czas pobytu. |
<MilesIncluded>> | Optional | boolean | Stawka obejmuje loty w kilometrach na przeloty. Dostępne parametry:
|
<OnPropertyCredit> | Optional | boolean | Cena obejmuje środki do wykorzystania w hotelu (F&B, ośrodek wypoczynkowy, spa itp.). Parametr:
|
<AirportTransportationIncluded> | Optional | Object | Cena obejmuje bezpłatny transport między hotelem a pobliskim lotniskiem. Opcjonalny atrybut direction określa kierunek działania transportu. Prawidłowe wartości to:
from : transport z lotniska do obiektu
Jeśli nie określono kierunku, jest to wartość domyślna.
to : transport z obiektu na lotnisko jest zapewniany.
round_trip : zapewniamy transport zarówno na lotnisko, jak i z lotniska.
|
Przykłady
Pakiet 1-pokojowy
Ten przykład określa pakiet 1 pokojów dla 2 osób (1 dorosły i 1 dziecko) ze śniadaniem:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<PackageData>
<Occupancy>2</Occupancy>
<OccupancyDetails>
<NumAdults>1</NumAdults>
<Children>
<Child age="17"/>
</Children>
</OccupancyDetails>
<PackageID>P54321</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
<Text text="Avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Two certificates for continental
breakfast will be provided." language="en"/>
<Text text="Deux certificats pour le petit déjeuner
continental seront fournis." language="fr"/>
</Description>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
</PropertyDataSet>
</Transaction>
Metadane dotyczące sali i pakietu
Poniższy przykład zawiera metadane dotyczące sali i pakietu:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>180054</Property>
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Bed Room" language="en"/>
<Text text="Chambre single" language="fr"/>
</Name>
<Description>
<Text text="Non-smoking" language="en"/>
<Text text="Pas de fumiers" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
</RoomData>
<PackageData>
<PackageID>P54321</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
<Text text="Avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Includes a delightful array of jams and jellies." language="en"/>
<Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
</Description>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
</PropertyDataSet>
</Transaction>
Pakiety z kilkoma pokojami
W tym przykładzie zdefiniowano metadane dotyczące sal i pakietów w przypadku wielu grup pomieszczeń:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<!-- A transaction message with room types result. -->
<PropertyDataSet>
<Property>12345</Property>
<RoomData>
<RoomID>single</RoomID>
<Name>
<Text text="Single room" language="en"/>
<Text text="Chambre simple" language="fr"/>
</Name>
<Description>
<Text text="A single room" language="en"/>
<Text text="Le chambre simple" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<PhotoURL>
<URL>http://www.foo.com/static/bar/image1235.jpg</URL>
</PhotoURL>
<Capacity>2</Capacity>
</RoomData>
<RoomData>
<RoomID>double</RoomID>
<Name>
<Text text="Double room" language="en"/>
<Text text="Chambre double" language="fr"/>
</Name>
<Occupancy>1</Occupancy>
</RoomData>
<PackageData>
<PackageID>refundbreakfast</PackageID>
<Name>
<Text text="Refundable Room with Breakfast" language="en"/>
<Text text="Chambre remboursable avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Continental Breakfast" language="en"/>
<Text text="Petit déjeuner continental" language="fr"/>
</Description>
<ChargeCurrency>hotel</ChargeCurrency>
<Refundable available="1" refundable_until_days="3"/>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
<PackageData>
<PackageID>prepaid</PackageID>
<Name>
<Text text="Nonrefundable" language="en"/>
<Text text="Non remboursable" language="fr"/>
</Name>
<Description>
<Text text="Blah blah blad" language="en"/>
<Text text="Le blah blah blad" language="fr"/>
</Description>
<Occupancy>2</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="0"/>
</PackageData>
</PropertyDataSet>
</Transaction>
Pakiet pokoi ze stawkami
W tym przykładzie zdefiniowano metadane pokoju i pakietu dotyczące pakietu sal z funkcjami dotyczącymi cen:
<Transaction timestamp="2010-04-24T20:44:56-04:00" id="TXNID">
<PropertyDataSet>
<Property>12345</Property>
<RoomData>
...
</RoomData>
<!-- definitions of PackageData types including rate features -->
<PackageData>
<PackageID>room_with_addl_benefits</PackageID>
<Name>
<Text text="Acme Hotels 2017 Promotion Package" language="en"/>
</Name>
<ChargeCurrency>hotel</ChargeCurrency>
<BreakfastIncluded>1</BreakfastIncluded>
<MembershipBenefitsIncluded>
<ProgramName>
<Text language="en" text="Marriott Rewards"/>
</ProgramName>
<ProgramLevel>
<Text language="en" text="Platinum"/>
</ProgramLevel>
</MembershipBenefitsIncluded>
<OnPropertyCredit>
<Amount currency="USD">123.45</Amount>
</OnPropertyCredit>
</PackageData>
<PackageData>
<PackageID>room_with_miles</PackageID>
<Name>
<Text text="Room with Bundled Miles" language="en"/>
</Name>
<ChargeCurrency>hotel</ChargeCurrency>
<MilesIncluded>
<NumberOfMiles>1000</NumberOfMiles>
<Provider>
<Text language="en" text="United Airlines"/>
</Provider>
</MilesIncluded>
<AirportTransportationIncluded direction="from"/>
</PackageData>
</PropertyDataSet>
<!-- The actual list of prices -->
<Result>
…
</Result>
</Transaction>
Posiłki i zdjęcia
Ten przykład zawiera metadane dotyczące pokoju i pakietu dotyczące posiłków, zdjęć oraz godzin zameldowania i wymeldowania:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<PackageData>
<PhotoURL>
<Caption>
<Text text="Breakfast" language="en"/>
<Text text="朝食" language="ja"/>
</Caption>
<URL>http://example.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Meals>
<!-- Guests can choose to have breakfast in their room or in another
space to avoid contact with other guests. -->
<Breakfast included="1" in_room="1" in_private_space="1"/>
<Dinner included="1" buffet="1"/>
</Meals>
<CheckinTime>15:00</CheckinTime>
<CheckoutTime>11:00</CheckoutTime>
</PackageData>
</PropertyDataSet>
</Transaction>
Śniadanie
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<PackageData>
<PhotoURL>
<Caption>
<Text text="Breakfast" language="en"/>
<Text text="朝食" language="ja"/>
</Caption>
<URL>http://example.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Meals>
<Breakfast included="true"/>
<!-- Dinner not included needs to be explicitly specified -->
<Dinner included="false"/>
</Meals>
<CheckinTime>15:00</CheckinTime>
<CheckoutTime>11:00</CheckoutTime>
</PackageData>
</PropertyDataSet>
</Transaction>
<Result>
Kontener aktualizacji cen i dostępności w wiadomości <Transaction>
.
Element <Result>
pojawia się w hierarchii XML wiadomości o transakcji w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Użyj narzędzia <Result>
, aby ustalać lub aktualizować ceny pokoi oraz określać dostępne zasoby reklamowe. Elementy zdefiniowane w tym elemencie zwykle odwołują się do niezależnych metadanych sali lub pakietu (takich jak opis lub zestaw udogodnień) zdefiniowanych w dokumentach <PackageData>
i <RoomData>
.
Zazwyczaj bardzo często wysyłasz wiadomości dotyczące transakcji z aktualizacjami cen. Dokładna szybkość i częstotliwość wykonywania tych czynności zależą od trybu wyświetlania.
Aby usunąć plany podróży, w komunikacie o transakcji możesz użyć <Result>
zgodnie z opisem w sekcji Usuwanie zasobów reklamowych.
Więcej informacji o używaniu komunikatów dotyczących transakcji do aktualizowania cen i dostępności znajdziesz w artykule Dodawanie i aktualizowanie zasobów reklamowych.
Pojedyncza wiadomość o transakcji może zawierać dowolną liczbę elementów <Result>
, o ile jej rozmiar nie przekracza 100 MB.
Składnia
W elemencie <Result>
używana jest taka składnia:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> <!-- Required --> <Property>hotel_ID</Property> <!-- Required --> <Checkin>YYYY-MM-DD</Checkin> <!-- Required --> <Nights>number_of_nights</Nights> <Baserate currency="currency_code">price</Baserate> <!-- Only required when <Baserate> contains a real price --> <Tax currency="currency_code">tax_amount</Tax> <!-- Only required when <Baserate> contains a real price --> <OtherFees currency="currency_code">fee_amount</OtherFees> <Refundable available="[false|true]" refundable_until_days="number_of_days" refundable_until_time="time"/> <RoomID>room_ID</RoomID> <PackageID>package_ID</PackageID> <ExpirationTime>expiration_time</ExpirationTime> <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency> <Occupancy>max_number_of_intended_occupants</Occupancy> <!-- For Baserate, occupancy value must be greater than or equal to 2. If a value is not provided for occupancy, it defaults to 2. --> <OccupancyDetails>occupancy_info</OccupancyDetails> <Rates>...</Rates> <RoomBundle>...</RoomBundle> <AllowablePointsOfSale> <PointOfSale id="landing_page_identifier"/> ... </AllowablePointsOfSale> <Custom[1-5]>custom_value</Custom[1-5]> </Result> ... </Transaction>
Atrybuty
Element <Result>
ma te atrybuty:
Atrybut | Wymagana? | Typ | Opis |
---|---|---|---|
mergeable | Optional | boolean | Domyślnie nowe ceny dotyczące określonej pary hotelu i planu podróży zastąpią wszelkie wcześniejsze (aktualne) ceny znajdujące się w pamięci podręcznej Google. Atrybut scalony pozwala przechowywać dodatkowe ceny w pamięci podręcznej Google bez usuwania informacji o poprzednich cenach. Zapytanie o cenę na żywo z odpowiedziami kontekstowymi będzie zawsze miało ten atrybut ustawiony na true (niezależnie od odpowiedzi komunikatu dotyczącego transakcji). |
Elementy potomne
Element <Result>
ma te elementy podrzędne:
Element podrzędny | Wymagana? | Typ | Opis |
---|---|---|---|
<AllowablePointsOfSale> | Optional | Object | Co najmniej jedna strona docelowa, która kwalifikuje się do tego hotelu. Strona docelowa to witryna, która może obsługiwać proces rezerwacji użytkownika. Aby wyraźnie uwzględnić określoną stronę docelową (i wykluczyć inne), dodaj co najmniej 1 element <AllowablePointsOfSale> zgodny z atrybutem id elementu <PointOfSale> w pliku stron docelowych.
Jeśli go nie dodasz, wszystkie strony docelowe zdefiniowane w pliku stron docelowych zostaną uznane za odpowiednie do rezerwacji sali. Więcej informacji znajdziesz w artykule o składni pliku stron docelowych. |
<Baserate> | Optional | float | Cena pokoju za pobyt. Wartość tego elementu powinna wyglądać tak:
Gdy sala jest niedostępna w ramach planu podróży, należy pominąć atrybut Aby usunąć pakiet pokoi, postępuj zgodnie z instrukcjami w artykule Usuwanie pakietu pokoi. Pole <Baserate currency="USD">1200.40</Baserate> Element
|
<ChargeCurrency> | Optional | enum | Kiedy i gdzie użytkownik płaci za rezerwację. Tego elementu można użyć w komunikacie o transakcji w elemencie <Result> dotyczącym ceny hotelu lub bloku <PackageData> w przypadku pakietu pokoi.
Prawidłowe wartości to:
Wartością domyślną jest |
<Checkin> | Required | Date | Data zameldowania w planie podróży podana w formacie Data. Kombinacja elementów <Nights> i <Checkin> tworzy plan podróży. |
<Custom[1‑5]> | Optional | string | Definiuje pole niestandardowe, za pomocą którego można przekazywać dodatkowe dane powiązane z hotelem. Możesz przekazać maksymalnie 5 wartości niestandardowych o tych nazwach elementów:
Elementy Elementy <Custom> podane w elemencie |
<ExpirationTime> | Optional | DateTime | Data i godzina, w przypadku których cena została uznana za nieważną (minimum 3 godziny).
Nie zalecamy podawania sygnatur czasowych ważności, jeśli nie mają one znaczenia dla Twojej struktury cen. Google nie będzie wyświetlać cen, które straciły ważność, a wszystkie plany podróży, których cena wygasła, będą kwalifikować się do zapytań o cenę w czasie rzeczywistym. |
<Nights> | Required | integer | Liczba nocy w planie podróży. Wartość elementu <Nights> musi być dodatnią liczbą całkowitą.
Połączenie <Nights> i <Checkin> tworzy plan podróży. |
<OtherFees> | Optional | float | Opłaty inne niż stawka podstawowa i podatki, które wpływają na ostateczną cenę pokoju. Element <OtherFees> przyjmuje pojedynczy wymagany atrybut currency , który określa trzyliterowy kod waluty opłat. Na przykład: USD .
Element |
<Occupancy> | Optional | integer | Określa maksymalną liczbę osób.
Jeśli atrybut <Occupancy> należy do kategorii <Result> , musi zawierać parametr 2 lub więcej. <Occupancy> może towarzyszyć parametrowi <OccupancyDetails> określającemu typ gości (dorośli lub dzieci). Informacje o składni i opisie elementów podrzędnych znajdziesz na stronie <OccupancyDetails> . Jeśli element <Occupancy> nie zostanie określony, obłożenie jest domyślnie ustawiane na 2 .
Uwaga: skontaktuj się z zespołem pomocy, aby włączyć funkcję przesyłania cen za obłożenie inne niż podwójne. |
<PackageID> | Optional | string | Unikalny identyfikator pakietu, który pozwala zmapować go na wstępnie zdefiniowane dane pakietu. Służy też do wypełniania zmiennej strony docelowej PACKAGE-ID. Więcej informacji znajdziesz w artykule o metadanych pakietu sal. |
<Property> | Required | string | Identyfikator hotelu, na które mają wpływ powiązane dane (cena, plan podróży, pakiet pokoi lub metadane). Wartość tego elementu musi być ciągiem znaków. Wartość tego elementu musi być zgodna z <id> podanym w pliku danych z listą hoteli.
|
<Rates> | Optional | <Rates> |
Kontener dla co najmniej 1 bloku <Rate> . Każdy <Rate> w <Rates> określa inną cenę za pokój i plan podróży.
Używaj elementu |
<Refundable> | Optional | Object | Umożliwia podanie ceny jako pełnej zwrotu środków lub jej bezpłatne anulowanie. Jeśli nie zostanie podany, informacje o zwrocie środków nie zostaną wyświetlone.
Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result> . Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData> . Ceny podlegające zwrotom można też wyróżnić za pomocą alternatywnych opcji, bez konieczności bezpośredniego modyfikowania schematu wiadomości o transakcji. Więcej informacji o tych opcjach znajdziesz tutaj.
Poniższy przykład pokazuje element <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Uwaga: zalecamy ustawienie wszystkich atrybutów. Jeśli nie zostanie ustawiony co najmniej 1 atrybut, zostanie wygenerowane ostrzeżenie o stanie pliku danych. Jeśli nie ustawisz żadnych atrybutów, stawka nie będzie wyświetlana jako podlegająca zwrotowi. Atrybuty to:
Podczas ustawiania atrybutów pamiętaj o tych kwestiach:
|
<RoomBundle> | Optional | <RoomBundle> |
Kontener informacji o cenach fizycznych opisów pokoi, opakowaniach udogodnień oraz niektórych zasadach zakupu dotyczących danego hotelu i planu podróży.
Ogólnie rzecz biorąc, ten element służy do określania cen pokoju podstawowego i różnych typów pokoi w tej samej usłudze. Chociaż można zdefiniować wbudowane opisy pakietów pokoi, użyj osobnego komunikatu dotyczącego transakcji, aby zdefiniować te informacje. Google będzie przechowywać metadane, aby można było się do nich odwoływać, zamiast powtarzać je przy każdej aktualizacji cen. |
<RoomID> | Optional | string | Unikalny identyfikator sali potrzebny do zmapowania na wstępnie zdefiniowane dane pokoju. Służy też do wypełniania zmiennej strony docelowej „PARTNER-ROOM-ID”. Więcej informacji znajdziesz w artykule o metadanych pakietu sal. |
<Tax> | Optional | float | Podatki obliczane na podstawie ostatecznej ceny pokoju.
Element <Tax> przyjmuje pojedynczy wymagany atrybut currency , który określa trzyliterowy kod waluty na potrzeby podatków. Na przykład: USD . Element <Tax> jest wymagany, jeśli <Baserate> ma wartość większą niż 0. |
<Unavailable> | Optional | Object | wskazuje, że plan podróży nie jest dostępny do zarezerwowania. Pełni funkcję kontenera do bardziej szczegółowych powodów, dla których plan podróży jest niedostępny. Pod tagiem <Unavailable> może znajdować się co najmniej jedna z tych przyczyn niedostępności:
|
Przykłady
Przykład witryny z wieloma usługami
W przykładzie poniżej zdefiniowano jeden plan podróży i ceny dla 2 obiektów:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>060773</Property>
<RoomID>RoomType101</RoomID>
<PackageID>Package101</PackageID>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">278.33</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="site1"/>
</AllowablePointsOfSale>
</Result>
<Result>
<Property>052213</Property>
<RoomID>RoomType101</RoomID>
<PackageID>Package101</PackageID>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">299.98</Baserate>
<Tax currency="USD">26.42</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="otto"/>
<PointOfSale id="simon"/>
</AllowablePointsOfSale>
</Result>
</Transaction>
W tym przykładzie nie widać szczegółów sali, w tym jej opisu, zdjęcia i podpisu, nazwy oraz pojemności.
Informacje te możesz zdefiniować raz w osobnej wiadomości o transakcji przechowywanej przez Google. Możesz się o niego odwoływać przy wszystkich kolejnych aktualizacjach cen i asortymentu. Więcej informacji znajdziesz w artykule na temat metadanych pakietów sal.
Przykład reklamy z wieloma stawkami
Poniższy przykład pokazuje 1 plan podróży i obiekt z wieloma stawkami przy różnym obłożeniu. Elementu <Rates>
można używać do podawania cen z wieloma stawkami w przypadku konkretnej usługi. Przykład poniżej jest przydatny również w przypadku usług wynajmu kwater wakacyjnych (VR).
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-07-23T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2021-01-13</Checkin>
<Nights>9</Nights>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>2</Occupancy>
<Rates>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>1</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>3</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>4</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>5</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>6</Occupancy>
</Rate>
</Rates>
</Result>
</Transaction>
Przykład niedostępny
Poniższy przykład określa jeden plan podróży, którego dostępność nie jest dostępna w kanałach odbierających dane, drugi jest poniżej minimalnej liczby noclegów i został już zarezerwowany na określone daty oraz drugi, którego miejsce jest zamknięte w dniu przyjazdu, ale otwiera się w trakcie pobytu:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>060773</Property>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Unavailable>
<NotFetched/>
</Unavailable>
</Result>
<Result>
<Property>073313</Property>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Unavailable>
<NoVacancy/>
<MinNightStay value=3/>
</Unavailable>
</Result>
<Result>
<Property>052213</Property>
<Checkin>2018-06-10</Checkin>
<Nights>10</Nights>
<Unavailable>
<PropertyClosed first_open="2018-06-15" first_closed="2018-06-10"/>
</Unavailable>
</Result>
</Transaction>
<Rates>
Kontener dla co najmniej 1 bloku <Rate>
. Każdy <Rate>
w <Rates>
ma inną cenę za pokój i plan podróży.
Używaj elementu <Rates>
tylko wtedy, gdy dla tej samej kombinacji sali i planu podróży obowiązuje kilka stawek. Możesz na przykład zdefiniować wiele stawek cen warunkowych, cen prywatnych lub cen warunkowych w pakietach pokoi.
Element <Rates>
pojawia się w hierarchii XML wiadomości o transakcji w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
(Can also contain<Rates>
) + ...
Wartości ustawione w elemencie <Rate>
zastępują wartości związane z cenami w nadrzędnym elemencie <Result>
lub <RoomBundle>
. Jeśli nie są one ustawione w elemencie <Rate>
, dziedziczą one wartość z elementu nadrzędnego. Do elementu <RoomBundle>
dziedziczy tylko wartość <AllowablePointsofSale>.
Składnia
W elemencie <Rates>
używana jest taka składnia:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> <Rates> <Rate rate_rule_id="rate_rule_id"> <Baserate currency="currency_code">price</Baserate> <Tax currency="currency_code">tax_amount</Tax> <OtherFees currency="currency_code">fee_amount</OtherFees> <ExpirationTime>expiration_time</ExpirationTime> <Refundable available="[false|true]" refundable_until_days="number_of_days" refundable_until_time="time"/> <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency> <AllowablePointsOfSale> <PointOfSale id="landing_page_identifier"/> </AllowablePointsOfSale> <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <!-- optional info about the types of guests, whether adults or children --></OccupancyDetails> ... <Custom[1-5]>custom_value</Custom[1-5]> </Rate> ... </Rates> </Result> ... </Transaction>
Atrybuty
Element <Rates>
ma te atrybuty:
Atrybut | Wymagana? | Opis |
---|---|---|
rate_rule_id | Optional | W przypadku stawek warunkowych ten identyfikator odpowiada stawce określonej w pliku definicji reguły stawek. Limit znaków w tym polu to 40 znaków. |
Elementy potomne
Element <Rates>
ma te elementy podrzędne:
Element podrzędny | Wymagana? | Typ | Opis |
---|---|---|---|
<AllowablePointsOfSale> | Optional | Object | Co najmniej jedna strona docelowa, która kwalifikuje się do tego hotelu. Ten element używa tej samej składni co właściwość <AllowablePointsOfSale> w systemie <Result> . |
<Baserate> | Required | float | Cena pokoju za pobyt. Ten element korzysta z tej samej składni co element <Baserate> w witrynie <Result> .
Uwaga: nie można określić elementu podrzędnego |
<ChargeCurrency> | Optional | enum | Kiedy i gdzie użytkownik płaci za rezerwację. Ten element korzysta z tej samej składni co element <ChargeCurrency> w elemencie <Result> . |
<Custom[1‑5]> | Optional | string | Pola niestandardowe, których możesz używać do przekazywania na stronę docelową dodatkowych danych powiązanych z hotelem. Ten element używa tej samej składni co właściwość <Custom[1‑5]> w elemencie <Result> . Obowiązuje limit 200 znaków na pole niestandardowe. Więcej informacji znajdziesz w sekcji Pliki stron docelowych.
Jeśli w elemencie |
<ExpirationTime> | Optional | DateTime | Data i godzina, w przypadku których stawka została uznana za nieważną. Ten element korzysta z tej samej składni co element <ExpirationTime> w elemencie <Result> . |
<Occupancy> | Optional | integer | Określa maksymalną liczbę osób.
|
<OtherFees> | Required | float | Opłaty inne niż stawka podstawowa i podatki, które wpływają na ostateczną cenę pokoju. Ten element używa tej samej składni co właściwość <OtherFees> w elemencie <Result> . |
<Refundable> | Optional | Object | Umożliwia podanie ceny jako pełnej zwrotu środków lub jej bezpłatne anulowanie. Jeśli nie zostanie podany, informacje o zwrocie środków nie zostaną wyświetlone.
Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result> . Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData> . Ceny podlegające zwrotom można też wyróżnić za pomocą alternatywnych opcji, bez konieczności bezpośredniego modyfikowania schematu wiadomości o transakcji. Więcej informacji o tych opcjach znajdziesz tutaj.
Poniższy przykład pokazuje element <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Uwaga: zalecamy ustawienie wszystkich atrybutów. Jeśli nie zostanie ustawiony co najmniej 1 atrybut, zostanie wygenerowane ostrzeżenie o stanie pliku danych. Jeśli nie ustawisz żadnych atrybutów, stawka nie będzie wyświetlana jako podlegająca zwrotowi. Atrybuty to:
Podczas ustawiania atrybutów pamiętaj o tych kwestiach:
|
<Tax> | Required | float | Podatki obliczane na podstawie ostatecznej ceny pokoju. Ten element korzysta z tej samej składni co <Tax> w elemencie <Result> . |
Przykłady
Stawka podstawowa i warunkowa
Poniższy przykład pokazuje komunikat o transakcji zawierający stawkę podstawową i stawkę warunkową:
<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2023-04-10</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">200.00</Baserate>
<Tax currency="USD">20.00</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<Rates>
<!-- The rate_rule_id is required when using conditional rates -->
<Rate rate_rule_id="mobile">
<!-- Override base rate and taxes for conditional rates -->
<Baserate currency="USD">180.00</Baserate>
<Tax currency="USD">18.00</Tax>
<!-- NOTE: OtherFees is inherited from the above setting -->
<Custom1>ratecode123</Custom1>
</Rate>
</Rates>
</Result>
</Transaction>
Wiele cen warunkowych
Ten przykład określa stawkę podstawową i wiele cen warunkowych w obrębie <RoomBundle>
:
<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2023-04-10</Checkin>
<Nights>2</Nights>
<!-- When Google receives new room bundle information for an itinerary, all
previous room bundle pricing is dropped from Google's cache. Thus, if you
want to delete a specific room bundle from Google's cache, you may do so
by simply not providing that specific room bundle in subsequent transaction
messages. -->
<RoomBundle>
...
<!-- RoomID is required, PackageID is recommended. -->
<RoomID>5</RoomID>
<PackageID>ABC</PackageID>
<!-- Baserate is required. -->
<Baserate currency="USD">275.00</Baserate>
<Tax currency="USD">27.50</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<!-- RatePlanID is optional and represents the unique identifier for a
room and package data combination. We strongly recommend using RatePlanID
as a variable to build your dynamic landing page (formerly Point of Sale)
URL. For details, see Using Variables and Conditions. -->
<RatePlanID>5-ABC</RatePlanID>
<!-- Occupancy is mandatory for RoomBundle elements. -->
<!-- Elements below will get inherited to nested rate elements. -->
<Occupancy>2</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
</OccupancyDetails>
<InternetIncluded>1</InternetIncluded>
<!-- Rate rule "mobile" overrides chargeCurrency, "us_or_gb" doesn't. -->
<ChargeCurrency>web</ChargeCurrency>
<Custom1>ratebasic</Custom1>
<!-- Neither rate overrides Custom2. -->
<Custom2>ratebasic</Custom2>
<Rates>
<Rate rate_rule_id="mobile">
<Baserate currency="USD">258.33</Baserate>
<Tax currency="USD">25.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<!-- The value below overrides ChargeCurrency from roombundle. -->
<ChargeCurrency>hotel</ChargeCurrency>
<!-- The value below overrides Custom1 from roombundle. -->
<Custom1>ratecode321</Custom1>
<!-- Custom2 is inherited from roombundle. -->
</Rate>
<Rate rate_rule_id="us_or_gb">
<Baserate currency="USD">268.33</Baserate>
<Tax currency="USD">26.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<!-- The value below overrides Custom1 from roombundle. -->
<Custom1>ratecode432</Custom1>
<!-- Custom2 is inherited from roombundle. -->
</Rate>
</Rates>
</RoomBundle>
</Result>
</Transaction>
<RoomBundle>
Określa ceny i dostępność pakietów pokoi jako element podrzędny elementu <Result>
w wiadomości <Transaction>
. Zdefiniuj osobny element na potrzeby każdej kombinacji pakietu i planu podróży. Aby zdefiniować pakiet i warunki pakietów sal, użyj polecenia <RoomData>
.
Element <RoomBundle>
pojawia się w hierarchii XML wiadomości o transakcji w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Więcej informacji znajdziesz w artykule Korzystanie z pakietów sal.
Składnia
W elemencie <RoomBundle>
używana jest taka składnia:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> ... <RoomBundle> <!-- Required unless specified inline under<RoomData>
--> <RoomID>room_ID</RoomID> <!-- Required<PackageData>
--> <PackageID>package_ID</PackageID> <!-- Required --> <Baserate currency="currency_code">price</Baserate> <!-- Required --> <Tax currency="currency_code">taxes</Tax> <!-- Required --> <OtherFees currency="currency_code">other_fees</OtherFees> <Refundable available="[false|true]" refundable_until_days="number_of_days" refundable_until_time="time"/> <!-- Required --> <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency> <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <!-- optional info about the types of guests, whether adults or children --></OccupancyDetails> <BreakfastIncluded>boolean_value</BreakfastIncluded> <InternetIncluded>boolean_value</InternetIncluded> <ParkingIncluded>boolean_value</ParkingIncluded> <RatePlanID>rate_plan_ID</RatePlanID> <Rates>...</Rates> <Custom1>custom_value_1</Custom1> <Custom2>custom_value_2</Custom2> <Custom3>custom_value_3</Custom3> <Custom4>custom_value_4</Custom4> <Custom5>custom_value_5</Custom5> </RoomBundle> ... </Result> </Transaction>
Atrybuty
Element <RoomBundle>
nie ma atrybutów.
Elementy potomne
Element <RoomBundle>
ma te elementy podrzędne:
Element podrzędny | Wymagana? | Typ | Opis |
---|---|---|---|
<Baserate> | Required | float | Określa cenę pakietu pokoju za pobyt. Ten element używa tej samej składni co element <Baserate> w <Result> , z tym wyjątkiem:
|
<BreakfastIncluded> | Optional | boolean | Określa, czy pakiet obejmuje śniadanie w cenie. |
<ChargeCurrency> | Optional | enum | Kiedy i gdzie użytkownik płaci za rezerwację. Ten element używa tej samej składni co element <ChargeCurrency> w elemencie <Result> .
Wartością domyślną jest |
<Custom[1‑5]> | Optional | string | Pola niestandardowe do przekazywania dodatkowych danych do stron docelowych pakietu pokoi. Użyta składnia tych elementów jest taka sama jak w przypadku elementu <Custom[1-5]> w elemencie <Result> . Każde pole niestandardowe może zawierać maksymalnie 200 znaków. Więcej informacji znajdziesz w sekcji Pliki stron docelowych.
Jeśli w elemencie |
<InternetIncluded> | Optional | boolean | Jeśli pakiet obejmuje bezpłatny dostęp do internetu, a inne pakiety nie obejmują tego udogodnienia. Nie ustawiaj tego elementu dla pakietów pokoi w hotelu, który ma bezpłatny dostęp do internetu we wszystkich pokojach. Nie dotyczy on internetu przewodowego ani bezprzewodowego w pokoju, który nie jest dostępny w pokojach gościnnych. |
<Occupancy> | Required | integer | Maksymalna liczba gości, dla których przeznaczony jest pakiet pokoi. Duży apartament może na przykład pomieścić 6 osób, ale „Pakiet „Podróż poślubna” jest przeznaczony tylko dla 2 osób.
Ta wartość nie może być większa niż Podczas określania obłożenia w adresie URL strony docelowej używaj zmiennych Wartość Uwagi:
|
<OtherFees> | Required | float | Opłaty inne niż stawka podstawowa i podatki, które wpływają na ostateczną cenę pokoju. Element <OtherFees> przyjmuje pojedynczy wymagany atrybut currency , który określa trzyliterowy kod waluty opłat. Na przykład wpisz USD w przypadku złotego. |
<PackageID> | Optional (recommended) | string | Unikalny identyfikator danych pakietu. Użyj tego identyfikatora, aby dopasować dane pakietu sal do tego, co zostało wysłane w zadaniu <PackageData> . Więcej informacji znajdziesz w artykule o metadanych pakietu sal. Możesz też użyć tego identyfikatora, aby odwołać się do definicji wspólnego pakietu pokoi w pojedynczej wiadomości z transakcją podczas definiowania wbudowanych danych pakietu pokoju. |
<ParkingIncluded> | Optional | boolean | Określa, czy pakiet pokoi obejmuje bezpłatny parking, gdzie parking w tym hotelu byłby płatny. Nie podawaj wartości tego elementu w przypadku hotelu z bezpłatnym parkingiem.
Prawidłowe wartości to |
<RatePlanID> | Optional | string | Identyfikator abonamentu to unikalny identyfikator sali i pakietu. Na przykład jeśli <RoomID> ma wartość 5, a <PackageID> wartość ABC, możesz użyć wartości 5-ABC dla parametru <RatePlanID> . Podczas tworzenia dynamicznego adresu URL strony docelowej (dawniej punktu sprzedaży) zdecydowanie zalecamy stosowanie zmiennej RatePlanID jako zmiennej.
Więcej informacji znajdziesz w artykule Używanie zmiennych i warunków. |
<Rates> | Optional | <Rates> |
Stawki, które zastępują wartości domyślne w przypadku tego pakietu pokoi. Ten element używa tej samej składni co element <Rates> w elemencie <Result> . |
<Refundable> | Optional | Object | Umożliwia podanie ceny jako pełnej zwrotu środków lub jej bezpłatne anulowanie. Jeśli nie zostanie podany, informacje o zwrocie środków nie zostaną wyświetlone.
Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result> . Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData> . Ceny podlegające zwrotom można też wyróżnić za pomocą alternatywnych opcji, bez konieczności bezpośredniego modyfikowania schematu wiadomości o transakcji. Więcej informacji o tych opcjach znajdziesz tutaj.
Poniższy przykład pokazuje element <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Uwaga: zalecamy ustawienie wszystkich atrybutów. Jeśli nie zostanie ustawiony co najmniej 1 atrybut, zostanie wygenerowane ostrzeżenie o stanie pliku danych. Jeśli nie ustawisz żadnych atrybutów, stawka nie będzie wyświetlana jako podlegająca zwrotowi. Atrybuty to:
Podczas ustawiania atrybutów pamiętaj o tych kwestiach:
|
<RoomID> | Required | string | Unikalny identyfikator danych pokoju. Użyj tego identyfikatora, aby dopasować dane pakietu sal do tego, co wysłałeś w zadaniu <RoomData> .
Więcej informacji znajdziesz w artykule o metadanych pakietu sal.
Możesz też użyć tego identyfikatora, aby odwołać się do definicji świetlicy w wiadomości dotyczącej transakcji, gdy zdefiniujesz wbudowane dane pokoju. |
<Tax> | Required | float | Podatki obliczane na podstawie ostatecznej ceny pokoju.
Element <Tax> przyjmuje pojedynczy wymagany atrybut currency , który określa trzyliterowy kod waluty na potrzeby podatków. Na przykład wpisz USD w przypadku złotego. |
Przykłady
Pakiet dla 1 osoby
Poniższy przykład zawiera odpowiedź z pojedynczym pakietem liczby osób.
Gdy użytkownik wybierze 1
w selektorze obłożenia, Google wyświetli najniższą kwalifikującą się cenę niezależnie od liczby osób.
Jeśli cena za 1 osobę nie jest dostępna, Google wyświetli najniższą cenę za 2 osoby. Pamiętaj, że zapytania dotyczące ceny za 1 osobę nie są wyświetlane, jeśli dla planu podróży są przechowywane w pamięci podręcznej ceny za 2 lub więcej osób.
W tym przykładzie odwołuje się do wstępnie zdefiniowanych metadanych pokoju i pakietu za pomocą elementów <RoomID>
i <PackageID>
. Aby zdefiniować te informacje, użyj elementów <RoomData>
i <PackageData>
.
<!-- Efficient method of defining Room Bundles-->
<!----- Occupancy of 1 example ----->
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="12345678">
<!-- Part1: Define RoomData and PackageData in PropertyDataSet -->
<!-- Note: Once defined it does not have to be repeated for future
Transaction Messages.
PropertyDataSets can also be defined and sent in their own
Transaction Message separately from pricing. Google can be
configured to pull just PropertyDataSets once per day
(or on a predefined frequency). -->
<PropertyDataSet>
<Property>180054</Property>
<!-- Can be reused by multiple Room Bundles -->
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Queen Room - Non-Smoking" language="en"/>
<Text text="Chambre de la Roi Premium - Pas de Fumeurs" language="fr"/>
</Name>
<!-- Room can accommodate up to 4, but package data specifies occupancy
between 1 to 4 -->
<Capacity>4</Capacity>
</RoomData>
<RoomData>
<RoomID>436233</RoomID>
<Name>
<Text text="Premium King Room - Non-Smoking" language="en"/>
<Text text="Chambre de le Roi Premium - Pas de Fumeurs" language="fr"/>
</Name>
<Capacity>4</Capacity>
</RoomData>
<!-- Can be reused by multiple Room Bundles -->
<PackageData>
<PackageID>P11111</PackageID>
<Occupancy>1</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>
<ParkingIncluded>1</ParkingIncluded>
<InternetIncluded>1</InternetIncluded>
</PackageData>
<PackageData>
<PackageID>P54321</PackageID>
<Occupancy>2</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>
<ParkingIncluded>1</ParkingIncluded>
<InternetIncluded>1</InternetIncluded>
</PackageData>
<PackageData>
<PackageID>P12345</PackageID>
<Occupancy>4</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="1" refundable_until_days="1"
refundable_until_time="18:00:00"/>
<ParkingIncluded>1</ParkingIncluded>
<InternetIncluded>1</InternetIncluded>
</PackageData>
</PropertyDataSet>
<!-- Efficient method of defining Room Bundles -->
<!-- Part 2: Reference RoomData and PackageData through ID -->
<Result>
<!-- Single occupancy pricing will be specified in a room bundle below -->
<Property>180054</Property>
<Checkin>2017-10-07</Checkin>
<Nights>2</Nights>
<!-- Base Room Bundle -->
<RoomBundle>
<RoomID>060773</RoomID>
<PackageID>P54321</PackageID>
<Baserate currency="USD">199.99</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RatePlanID>060773-P54321</RatePlanID>
</RoomBundle>
<RoomBundle>
<RoomID>060773</RoomID>
<PackageID>P11111</PackageID>
<!-- Price for 1 ("occupancy") is the lowest price and will be
displayed -->
<Baserate currency="USD">174.99</Baserate>
<Tax currency="USD">22.08</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RatePlanID>060773-P11111</RatePlanID>
</RoomBundle>
<!-- Premium Room Bundle -->
<RoomBundle>
<RoomID>436233</RoomID>
<PackageID>P12345</PackageID>
<!-- Price for 4 ("occupancy"), any eligible room bundle with 1 or more
occupancy will be displayed-->
<Baserate currency="USD">298.88</Baserate>
<Tax currency="USD">42.12</Tax>
<OtherFees currency="USD">10.00</OtherFees>
<RatePlanID>436233-P12345</RatePlanID>
</RoomBundle>
<!-- ..Continue providing all available RoomBundle rates under matched
property for 1 or more occupancies..-->
</Result>
</Transaction>
Co najmniej 2 osoby
Poniższy przykład zawiera zdefiniowaną odpowiedź zawierającą co najmniej 2 objęcia.
W tym przykładzie odwołuje się do wstępnie zdefiniowanych metadanych pokoju i pakietu za pomocą elementów <RoomID>
i <PackageID>
. Aby zdefiniować te informacje, użyj elementów <RoomData>
i <PackageData>
.
<!-- Efficient method of defining Room Bundles-->
<!----- Occupancy of 3 example ----->
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="12345678">
<!-- Efficient method of defining Room Bundles-->
<!-- Part1: Define RoomData and PackageData in PropertyDataSet -->
<PropertyDataSet>
<Property>180054</Property>
<!-- Can be reused by multiple Room Bundles -->
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Queen Room - Non-Smoking" language="en"/>
<Text text="Chambre de la Roi Premium - Pas de Fumeurs" language="fr"/>
</Name>
<!-- Room can accommodate up to 4, but package data specifies occupancy
between 1 to 4 -->
<Capacity>4</Capacity>
</RoomData>
<RoomData>
<RoomID>436233</RoomID>
<Name>
<Text text="Premium King Room - Non-Smoking" language="en"/>
<Text text="Chambre de le Roi Premium - Pas de Fumeurs" language="fr"/>
</Name>
<Capacity>4</Capacity>
</RoomData>
<!-- Can be reused by multiple Room Bundles -->
<PackageData>
<PackageID>P33333</PackageID>
<Occupancy>3</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>
<ParkingIncluded>1</ParkingIncluded>
<InternetIncluded>1</InternetIncluded>
</PackageData>
<PackageData>
<PackageID>P12345</PackageID>
<Occupancy>4</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="1" refundable_until_days="1"
refundable_until_time="18:00:00"/>
<ParkingIncluded>1</ParkingIncluded>
<InternetIncluded>1</InternetIncluded>
</PackageData>
</PropertyDataSet>
<Result>
<Property>180054</Property>
<Checkin>2017-10-07</Checkin>
<Nights>2</Nights>
<!-- Efficient method of defining Room Bundles -->
<!-- Part 2: Reference RoomData and PackageData through ID -->
<!-- Base Room Bundle -->
<RoomBundle>
<!-- Baserate above and attributes must match atleast one room bundle
below -->
<RoomID>060773</RoomID>
<PackageID>P33333</PackageID>
<Baserate currency="USD">499.99</Baserate>
<Tax currency="USD">55.12</Tax>
<OtherFees currency="USD">22.00</OtherFees>
</RoomBundle>
<!-- Premium Room Bundle -->
<RoomBundle>
<RoomID>436233</RoomID>
<PackageID>P12345</PackageID>
<!-- Lowest price for 3 ("occupancy"), shown below, will be displayed -->
<Baserate currency="USD">598.88</Baserate>
<Tax currency="USD">62.12</Tax>
<OtherFees currency="USD">30.00</OtherFees>
</RoomBundle>
<!-- ..Continue providing all available RoomBundle rates under matched
property for 2 or more occupancies..-->
</Result>
</Transaction>
Pakiety z kilkoma pokojami
Poniższy przykład pokazuje liczbę osób w pakiecie z wieloma salami, aby zademonstrować możliwe ceny pokoi w hostelach.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
<Result>
...
<!-- Suite Room Bundle -->
<RoomBundle>
<RoomID>suite1</RoomID>
<PackageID>standard</PackageID>
<Occupancy>2</Occupancy>
<!-- Price for room -->
<Baserate currency="USD">80.00</Baserate>
<Tax currency="USD">5.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RoomData>
<Name>
<Text text="Suite for 2" language="en"/>
</Name>
</RoomData>
</RoomBundle>
<!-- Small Dorm Room Bundle -->
<RoomBundle>
<RoomID>small_dorm</RoomID>
<PackageID>economy</PackageID>
<Occupancy>1</Occupancy>
<!-- Price per bed -->
<Baserate currency="USD">35.00</Baserate>
<Tax currency="USD">3.50</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RoomData>
<Name>
<Text text="1 bed in small dorm" language="en"/>
</Name>
</RoomData>
</RoomBundle>
<!-- Large Dorm Room Bundle -->
<RoomBundle>
<RoomID>large_dorm</RoomID>
<PackageID>economy</PackageID>
<Occupancy>1</Occupancy>
<!-- Price per bed -->
<Baserate currency="USD">20.00</Baserate>
<Tax currency="USD">2.50</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RoomData>
<Name>
<Text text="1 bed in large dorm" language="en"/>
</Name>
</RoomData>
</RoomBundle>
...
</Result>
</Transaction>
Wiele cen warunkowych
Z przykładu poniżej zdefiniowano stawkę podstawową i wiele cen warunkowych w obrębie <RoomBundle>
:
<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2023-04-10</Checkin>
<Nights>2</Nights>
<!-- When Google receives new room bundle information for an itinerary, all
previous room bundle pricing is dropped from Google's cache. Thus, if you
want to delete a specific room bundle from Google's cache, you may do so
by simply not providing that specific room bundle in subsequent transaction
messages. -->
<RoomBundle>
...
<!-- RoomID is required, PackageID is recommended. -->
<RoomID>5</RoomID>
<PackageID>ABC</PackageID>
<!-- Baserate is required. -->
<Baserate currency="USD">275.00</Baserate>
<Tax currency="USD">27.50</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<!-- RatePlanID is optional and represents the unique identifier for a
room and package data combination. We strongly recommend using RatePlanID
as a variable to build your dynamic landing page (formerly Point of Sale)
URL. For details, see Using Variables and Conditions. -->
<RatePlanID>5-ABC</RatePlanID>
<!-- Occupancy is mandatory for RoomBundle elements. -->
<!-- Elements below will get inherited to nested rate elements. -->
<Occupancy>2</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
</OccupancyDetails>
<InternetIncluded>1</InternetIncluded>
<!-- Rate rule "mobile" overrides chargeCurrency, "us_or_gb" doesn't. -->
<ChargeCurrency>web</ChargeCurrency>
<Custom1>ratebasic</Custom1>
<!-- Neither rate overrides Custom2. -->
<Custom2>ratebasic</Custom2>
<Rates>
<Rate rate_rule_id="mobile">
<Baserate currency="USD">258.33</Baserate>
<Tax currency="USD">25.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<!-- The value below overrides ChargeCurrency from roombundle. -->
<ChargeCurrency>hotel</ChargeCurrency>
<!-- The value below overrides Custom1 from roombundle. -->
<Custom1>ratecode321</Custom1>
<!-- Custom2 is inherited from roombundle. -->
</Rate>
<Rate rate_rule_id="us_or_gb">
<Baserate currency="USD">268.33</Baserate>
<Tax currency="USD">26.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<!-- The value below overrides Custom1 from roombundle. -->
<Custom1>ratecode432</Custom1>
<!-- Custom2 is inherited from roombundle. -->
</Rate>
</Rates>
</RoomBundle>
</Result>
</Transaction>
<OccupancyDetails>
<Occupancy>
w wiadomości o transakcji określa maksymalną liczbę gości w pokoju lub pakiecie. Pole <OccupancyDetails>
może zawierać dodatkowe informacje, takie jak liczba i rodzaj gości (osoby dorosłe lub dzieci).
Gdy <Occupancy>
i <OccupancyDetails>
pojawiają się w elemencie <Rates>
wartości <Result>
lub <RoomBundle>
, oznacza to, że cena jest ograniczona przez szczegóły obłożenia.
Składnia
Kiedy występuje ciąg <OccupancyDetails>
, jest on zawsze poprzedzony ciągiem <Occupancy>
.
Zwróć uwagę na tę składnię:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> ... <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <NumAdults>number_of_adults</NumAdults> <Children> <Child age=age_of_one_child_guest/> <Child age=age_of_one_child_guest/> </Children> </OccupancyDetails> </Result> </Transaction>
Elementy potomne
Element <OccupancyDetails>
ma te elementy podrzędne:
Element podrzędny | Wymagana? | Typ | Opis |
---|---|---|---|
<NumAdults> | Required | integer | Liczba dorosłych gości. Min.: 1, maks.:20. |
<Children> | Optional | Object | Kontener dla co najmniej 1 elementu <Child> . |
<Child age> | Optional | integer | Maksymalny wiek tego konta dziecka – na przykład <Child age="17"> . |
Przykłady
Poniższe przykłady pokazują, jak element <OccupancyDetails>
może wyglądać w elemencie <Results>
, <RoomBundle>
lub <Rates>
.
Odpowiedź wyniku
W tym przykładzie zdefiniowano jeden plan podróży i ceny dla jednej usługi w odpowiedzi na zapytanie o cenę na żywo, w ramach którego użytkownik podał liczbę i typy gości. Tutaj <OccupancyDetails>
– 2 osoby dorosłe i 1 podrzędny – są zwracane w polu <Result>
.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>060773</Property>
<RoomID>RoomType101</RoomID>
<PackageID>Package101</PackageID>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">278.33</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="site1"/>
</AllowablePointsOfSale>
<Occupancy>3</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
<Children>
<Child age="17"/>
</Children>
</OccupancyDetails>
</Result>
</Transaction>
Oceń odpowiedź
Poniższy przykład określa 1 plan podróży oraz ceny dla 1 osoby dorosłej i 1 dziecka. Tutaj <OccupancyDetails>
jest zwracany w elemencie <Rates>
elementu <Result>
.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Transaction id="Wtdj8QoQIWcAAbaTGlIAAAC4" timestamp="2018-04-18T11:27:45-04:00">
<Result>
<Property>8251</Property>
<Checkin>2018-06-20</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">62.18</Baserate>
<Tax currency="USD">2.45</Tax>
<OtherFees currency="USD">0.00</OtherFees>
<Rates>
<Rate rate_rule_id="rule-951">
<Occupancy>2</Occupancy>
<OccupancyDetails>
<NumAdults>1</NumAdults>
<Children>
<Child age="17"/>
</Children>
</OccupancyDetails>
<Baserate currency="USD">42.61</Baserate>
<Tax currency="USD">5.70</Tax>
<OtherFees currency="USD">0.00</OtherFees>
<Custom1>abc4</Custom1>
<AllowablePointsOfSale>
<PointOfSale id="yourhotelpartnersite.com"/>
</AllowablePointsOfSale>
</Rate>
</Rates>
</Result>
</Transaction>
Pakiet pokoi
Poniższy przykład określa liczbę osób dla 2 dorosłych i 1 dziecka na 2 noce, w przypadku których obowiązuje stawka zwrotu. Tutaj <OccupancyDetails>
wewnątrz elementu <RoomBundle>
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>6781291</Property>
<Checkin>2017-08-05</Checkin>
<Nights>2</Nights>
...
<RoomBundle>
<RoomID>10291</RoomID>
<RatePlanID>564739</RatePlanID>
<PackageID>564739</PackageID>
<Occupancy>3</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
<Children>
<Child age="17"/>
</Children>
</OccupancyDetails>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="true" refundable_until_days="1" refundable_until_time="23:59:00" />
<Baserate currency="USD">185.34</Baserate>
<Tax currency="USD">37.06</Tax>
<OtherFees currency="USD">2.22</OtherFees>
</RoomBundle>
</Result>
</Transaction>
Pakiety z kilkoma pokojami
W tym przykładzie określono wiele cen <RoomBundle>
, które są ograniczone do liczby osób dorosłych i 2 dzieci. Tutaj <OccupancyDetails>
występuje w elemencie <Rates>
elementu <RoomBundle>
.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">275.00</Baserate>
<Tax currency="USD">27.50</Tax>
<OtherFees currency="USD">0</OtherFees>
<RoomBundle>
<RoomID>5</RoomID>
<PackageID>STD</PackageID>
<Baserate currency="USD">275.00</Baserate>
<Tax currency="USD">27.50</Tax>
<OtherFees currency="USD">0</OtherFees>
<InternetIncluded>1</InternetIncluded>
<ChargeCurrency>web</ChargeCurrency>
<Custom1>ratebasic</Custom1>
<Custom2>ratebasic</Custom2>
<Occupancy>4</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
<Children>
<Child age="17"/>
<Child age="17"/>
</Children>
</OccupancyDetails>
<Rates>
<Rate rate_rule_id="mobile">
<Baserate currency="USD">258.33</Baserate>
<Tax currency="USD">25.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<ChargeCurrency>hotel</ChargeCurrency>
<Custom1>ratecode321</Custom1>
</Rate>
<Rate rate_rule_id="us_or_gb">
<Baserate currency="USD">268.33</Baserate>
<Tax currency="USD">26.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<Custom1>ratecode432</Custom1>
</Rate>
</Rates>
</RoomBundle>
</Result>
</Transaction>