Ta strona zawiera informacje oparte na XML dotyczące wiadomości transakcyjnych.
<Transaction>
Elementem głównym wiadomości o transakcji jest <Transaction>
. Jest to pojemnik na opisowe informacje o pokojach i pakietach oraz ceny i dostępność pokoi i pakietów.
Element <Transaction>
znajduje się w hierarchii XML wiadomości transakcyjnej w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Wiadomości, które używają elementu <Transaction>
jako elementu wyższego poziomu, wymagają co najmniej jednego elementu podrzędnego. Wiadomości transakcyjne mogą mieć dowolną liczbę elementów podrzędnych, o ile ich łączny rozmiar nie przekracza 100 MB.
Składnia
Element <Transaction>
używa tej składni:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="timestamp " id="transaction_ID ">
<!-- Defines data about a room or package (Room Bundle) -->
<PropertyDataSet>
...
</PropertyDataSet>
<!-- Updates/sets prices and availability for rooms and Room Bundles -->
<!-- (Also removes itineraries from inventory) -->
<Result>
...
</Result>
</Transaction>
Atrybuty
Element <Transaction>
ma te atrybuty:
Atrybut | Wymagany? | Typ | Opis |
---|---|---|---|
id | Required | ciąg znaków | Unikalny identyfikator każdej wiadomości Transaction. |
partner | Optional | string | Konto partnera, którego dotyczy wiadomość transakcyjna. Zwykle używasz tego, jeśli backend udostępnia pliki danych o cenach dla wielu kont partnerów. Ta wartość ciągu znaków to wartość „klucza partnera” podana na stronie Ustawienia konta w Hotel Center. |
timestamp | Required | DateTime | Moment wysłania wiadomości o transakcji. Wszystkie wiadomości z sygnaturą czasową z ostatnich 24 godzin zostaną przetworzone, a te bez niej zostaną odrzucone. Wiadomości są przetwarzane w kolejności |
Elementy potomne
Element <Transaction>
ma te elementy podrzędne:
Element podrzędny | Wymagany? | Typ | Opis |
---|---|---|---|
<PropertyDataSet> | Optional* | <PropertyDataSet> |
Opisuje konkretny pokój i pakiety pokoi. Zwykle używasz tego elementu w osobnym komunikacie o transakcji, aby zdefiniować wspólne wartości dla pakietów pokoi i zmniejszyć rozmiar komunikatów o transakcjach. |
<Result> | Optional* | <Result> |
dane o cenach w przypadku planu podróży obejmującego pokój lub element |
* Wymagane jest zaznaczenie co najmniej jednej z tych właściwości: <PropertyDataSet> lub <Result> . |
Przykłady
W tym przykładzie dane pokoju są zdefiniowane w wiadomości Transaction:
<?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>
W tym przykładzie definiuje się dane dotyczące cen w wiadomości Transaction:
<?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 zdefiniowano dane cenowe na okres od 1 do 7 nocy, począwszy od 7 czerwca 2023 r.:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-08-24T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">209.99</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">419.98</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>3</Nights>
<Baserate currency="USD">614.97</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>4</Nights>
<Baserate currency="USD">819.96</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>5</Nights>
<Baserate currency="USD">999.95</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>6</Nights>
<Baserate currency="USD">1193.94</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>7</Nights>
<Baserate currency="USD">1259.93</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
</Transaction>
Ten przykład pokazuje wiadomość Transaction, która zawiera stawkę podstawową i stawkę warunkową:
<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2023-04-10</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">200.00</Baserate>
<Tax currency="USD">20.00</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<Rates>
<!-- The rate_rule_id is required when using conditional rates -->
<Rate rate_rule_id="mobile">
<!-- Override base rate and taxes for conditional rates -->
<Baserate currency="USD">180.00</Baserate>
<Tax currency="USD">18.00</Tax>
<!-- NOTE: OtherFees is inherited from the above setting -->
<Custom1>ratecode123</Custom1>
</Rate>
</Rates>
</Result>
</Transaction>
W tym przykładzie z zasobami usuwamy z zasobow hotelu kilka pozycji (pobyty na 1 noc w różnych terminach):
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-05-23T16:20:00-04:00" id="42">
<Result>
<Property>1123581321</Property>
<Checkin>2023-05-23</Checkin>
<Nights>1</Nights>
<Unavailable>
<NoVacancy/>
</Unavailable>
<Tax currency="USD">0</Tax>
<OtherFees currency="USD">0</OtherFees>
</Result>
<Result>
<Property>1123581321</Property>
<Checkin>2023-05-24</Checkin>
<Nights>1</Nights>
<Unavailable>
<NoVacancy/>
</Unavailable>
<Tax currency="USD">0</Tax>
<OtherFees currency="USD">0</OtherFees>
</Result>
<!---Sending <Baserate> is optional with <Unavailable> -->
<Result>
<Property>1123581321</Property>
<Checkin>2023-05-25</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">-1</Baserate>
<Unavailable>
<NoVacancy/>
</Unavailable>
<Tax currency="USD">0</Tax>
<OtherFees currency="USD">0</OtherFees>
</Result>
</Transaction>
<PropertyDataSet>
Konteiner z informacjami o pokoju i pakiecie (lub pakiecie pokoju) w wiadomości <Transaction>
. Wartości ustawione w hotelu zastępują wartości ustawione w hotelu partnerskim.
Google przechowuje te informacje, aby nie trzeba było ich definiować za każdym razem, gdy wysyłasz aktualizacje cen.
Element <PropertyDataSet>
znajduje się w hierarchii XML wiadomości transakcyjnej 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 pokoju.
Składnia
Element <PropertyDataSet>
używa tej składni:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <PropertyDataSet> <!-- (Required) ID that matches the Hotel List Feed --> <Property>hotel_ID </Property> <!-- (Optional) Defines metadata about a room --> <RoomData> ... </RoomData> <!-- (Optional) Defines package metadata to be paired with rooms (Room Bundles) --> <PackageData> ... </PackageData> </PropertyDataSet> ... </Transaction>
Atrybuty
Element <PropertyDataSet>
nie ma atrybutów.
Elementy potomne
Element <PropertyDataSet>
ma te elementy podrzędne:
Element podrzędny | Wymagany? | Typ | Opis |
---|---|---|---|
<PackageData> | Optional* | <PackageData> |
Opisuje zestaw pokoi. Te dane są powiązane z partnerem i hotelem, ale nie z planem podróży. Ten element jest podobny do elementu <RoomData> , ale opisuje udogodnienia i warunki, które nie są częścią opisu fizycznego pokoju.
W aktualizacjach cen możesz odwoływać się do identyfikatora pakietu. Więcej informacji znajdziesz w artykule Metadane pakietu pokoju. |
<Property> | Required | string | Identyfikator hotelu, którego dotyczą powiązane dane. Wartość tego elementu musi być ciągiem znaków odpowiadającym informacji <id> w pliku danych z listą hoteli.
|
<RoomData> | Optional* | <RoomData> |
Opisuje pokój. Te dane są powiązane z partnerem i hotelem, ale nie z planem podróży.
W aktualizacjach cen podajesz identyfikator pokoju. |
* Wymagane jest zaznaczenie co najmniej jednej z tych właściwości: <PackageData> lub <RoomData> . |
Przykłady
Ten przykład pokazuje dane dotyczące pokoju 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>
Gdy wysyłasz ceny i dostępność tego pokoju i zestawu pokoi, w wiadomościach z cenami podajesz identyfikatory pokoju i pakietu. W efekcie znacznie zmniejszysz rozmiar wiadomości, a także ilość błędów, które mogą wystąpić z powodu duplikatów danych. Więcej informacji znajdziesz w metadanych pakietu Room Bundle.
<RoomData>
Definiuje metadane dotyczące pokoi, które nie zależą od planu podróży, a także pakietów pokoi (ponieważ pakiety pokoi to pokoje z dodatkowymi udogodnieniami). Użyj opcji <RoomData>
, aby zmniejszyć powtarzanie danych opisowych w pliku danych o cenach.
Element <RoomData>
znajduje się w hierarchii XML wiadomości transakcyjnej 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. Przeznaczeniem jest przechowywanie wszystkich danych poza danymi dotyczącymi planu podróży.
Element <RoomData>
jest podobny do <PackageData>
, ale opisuje pokój fizyczny, a nie udogodnienia i warunki pakietu. Aby podać szczegóły dotyczące pakietów Room Bundles, użyj tagów <RoomData>
i <PackageData>
. W przypadku pojedynczych pokoi, które nie są częścią pakietu, użyj tylko <RoomData>
.
W przypadku tego samego pokoju lub pakietu pokoi możesz zdefiniować zarówno element <RoomData>
, jak i element <PackageData>
. Gdy Google wyświetla pokój lub pakiet w wynikach wyszukiwania, zawiera on opisy z obu tych obiektów, rozdzielone łącznikiem.
Więcej informacji znajdziesz w artykule Metadane pakietu pokoju.
Składnia
Element <RoomData>
używa tej składni:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <PropertyDataSet> ... <RoomData> <RoomID>room_ID </RoomID> <Name> <Text text="room_name " language="language_code "/> ... </Name> <Description> <Text text="room_description " language="language_code "/> ... </Description> <Capacity>max_number_of_occupants </Capacity> <Occupancy>max_number_of_intended_occupants </Occupancy> <OccupancyDetails> <!-- optional info about the types of guests, whether adults, children, or seniors --></OccupancyDetails> <OccupancySettings> <MinOccupancy>min_number_of_occupants </MinOccupancy> <MinAge>min_age_of_occupants </MinAge> </OccupancySettings> <PhotoURL> <Caption> <Text text="photo_description " language="language_code "/> ... </Caption> <URL>photo_location </URL> </PhotoURL> <RoomFeatures> ... </RoomFeatures> </RoomData> ... </PropertyDataSet> </Transaction>
Atrybuty
Element <RoomData>
nie ma atrybutów.
Elementy potomne
Element <RoomData>
ma te elementy podrzędne:
Element podrzędny | Wymagany? | Typ | Opis |
---|---|---|---|
<Capacity> | Optional | integer | Maksymalna liczba osób, które fizycznie mogą przebywać w pokoju. W przypadku pokoju pojemność jest równa lub większa od liczby osób.
Jeśli została określona, wartość musi być równa lub większa niż wartość elementu Wartość |
<Description> | Optional | Object | szczegółowy opis pokoju; Ten element powinien zawierać informacje, których nie ma w innych elementach ani w elemencie <Name> . Podczas opisywania pokoju nie używaj wielkich liter.
Element
Użyj osobnego elementu W tym przykładzie pokazano 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ć taka sama jak na stronie docelowej hotelu (dawniej punkt sprzedaży). Nie ustawiaj wartości tego elementu na wielkie litery.
Ten element przyjmuje 1 element podrzędny
Użyj osobnego elementu 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 fizycznie pomieścić 6 osób (pojemność = 6), ale jest przeznaczony tylko dla 4 osób.
Ta wartość musi być mniejsza lub równa wartości elementu Wartość parametru
|
<OccupancySettings> | Optional | Object | Ustawienia, które mogą ograniczać lub modyfikować wymagania dotyczące liczby osób w pokoju.
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 do zdjęcia danego pokoju lub pakietu pokoi. Możesz określić więcej niż 1 element <PhotoURL> dla pokoju lub pakietu pokoi. Każdy adres URL zdjęcia musi znajdować się w osobnym wierszu.<PhotoURL>
Ten element przyjmuje te 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 funkcjach pokoju. |
<RoomID> | Required | string | Unikalny identyfikator pokoju. Użyj tego identyfikatora, aby dopasować dane pokoju do bloków <Result> w aktualizacjach cen. Więcej informacji znajdziesz w metadanych pakietu Room Bundle. (możesz też użyć tego identyfikatora, aby odwoływać się do wspólnej definicji pokoju w jednym komunikacie o transakcji podczas definiowania danych pokoju w tekście). |
Przykłady
W tym przykładzie zdefiniowano dane pokoju:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>5440OF</RoomID>
<Name>
<Text text="Single King Bed Room" language="en"/>
<Text text="Simple Lit de Roi" language="fr"/>
</Name>
<Description>
<Text text="One king bed with pillowtop mattresses, 300-thread-count linens,
and down comforters (bedspreads). City view. 300 square feet. Desk with
rolling chair. Multi-line phone with voice mail. Cable/satellite TV with
complimentary HBO and pay movies." language="en"/>
<Text text="Un très grand lit avec matelas à plateau-coussin, ..." language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Bathroom View" language="en"/>
<Text text="La salle de baines" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Capacity>4</Capacity>
</RoomData>
</PropertyDataSet>
</Transaction>
W tym przykładzie zdefiniowano metadane pokoju i pakietu:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>180054</Property>
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Bed Room" language="en"/>
<Text text="Chambre single" language="fr"/>
</Name>
<Description>
<Text text="Non-smoking" language="en"/>
<Text text="Pas de fumiers" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
</RoomData>
<PackageData>
<PackageID>P54321</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
<Text text="Avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Includes a delightful array of jams and jellies." language="en"/>
<Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
</Description>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
</PropertyDataSet>
</Transaction>
W tym przykładzie zdefiniowano metadane pokoju i pakietu dla wielu pakietów pokoju:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<!-- A transaction message with room types result. -->
<PropertyDataSet>
<Property>12345</Property>
<RoomData>
<RoomID>single</RoomID>
<Name>
<Text text="Single room" language="en"/>
<Text text="Chambre simple" language="fr"/>
</Name>
<Description>
<Text text="A single room" language="en"/>
<Text text="Le chambre simple" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<PhotoURL>
<URL>http://www.foo.com/static/bar/image1235.jpg</URL>
</PhotoURL>
<Capacity>2</Capacity>
</RoomData>
<RoomData>
<RoomID>double</RoomID>
<Name>
<Text text="Double room" language="en"/>
<Text text="Chambre double" language="fr"/>
</Name>
<Occupancy>1</Occupancy>
</RoomData>
<PackageData>
<PackageID>refundbreakfast</PackageID>
<Name>
<Text text="Refundable Room with Breakfast" language="en"/>
<Text text="Chambre remboursable avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Continental Breakfast" language="en"/>
<Text text="Petit déjeuner continental" language="fr"/>
</Description>
<ChargeCurrency>hotel</ChargeCurrency>
<Refundable available="1" refundable_until_days="3"/>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
<PackageData>
<PackageID>prepaid</PackageID>
<Name>
<Text text="Nonrefundable" language="en"/>
<Text text="Non remboursable" language="fr"/>
</Name>
<Description>
<Text text="Blah blah blad" language="en"/>
<Text text="Le blah blah blad" language="fr"/>
</Description>
<Occupancy>2</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="0"/>
</PackageData>
</PropertyDataSet>
</Transaction>
<RoomFeatures>
Określa funkcje znalezione w pokoju.
Element <RoomFeatures>
znajduje się w hierarchii XML wiadomości transakcyjnej w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<RoomFeatures>
Składnia
Element <RoomFeatures>
używa tej składni:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <PropertyDataSet ... > ... <RoomData> <RoomFeatures> <JapaneseHotelRoomStyle>[western|japanese|japanese_western]</JapaneseHotelRoomStyle> <Beds> <Bed size="[single|semi_double|double|queen|king]"> <Width unit="cm" number="width "/> <Length unit="cm" number="length "/> </Bed> <!-- Include with any additional beds. --> </Beds> <Suite/> <Capsule/> <Roomsharing>[shared|private]</Roomsharing> <Outdoor/> <MobilityAccessible/> <Smoking>[smoking|non_smoking]</Smoking> <BathAndToilet relation="[together|separate]"> <Bath bathtub="[false|true]" shower="[false|true]"/> <Toilet electronic_bidet="[false|true]" mobility_accessible="[false|true]"/> </BathAndToilet> <OpenAirBath/> <AirConditioning/> <Balcony/> <Views> <!-- (Optional) Defines the type of views from the room. --> <!-- Example: <OceanView/> --> </Views> </RoomFeatures> ... </RoomData> ... </PropertyDataSet> </Transactions>
Atrybuty
Element <RoomFeatures>
nie ma atrybutów.
Elementy potomne
Element <RoomFeatures>
ma te elementy podrzędne:
Element podrzędny | Wymagany? | Typ | Opis |
---|---|---|---|
<JapaneseHotelRoomStyle> | Optional | enum | Wskazuje styl japońskiego pokoju hotelowego. Prawidłowe wartości to:
|
<Beds> | Optional | Object | Zawiera tyle <Bed> , ile jest w pokoju. Pamiętaj, że japońskie futony nie powinny być tu liczone.
Każdy element
<Bed> ma 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 | Podaj ten element, jeśli pokój jest apartamentem. |
<Capsule> | Optional | empty | Podaj ten element, jeśli pokój jest kapsułą. |
<Roomsharing> | Optional | enum | czy pokój jest udostępniony innym użytkownikom, takim jak właściciele lub inni goście. Prawidłowe wartości to shared i private . |
<Outdoor> | Optional | empty | Podaj ten element, jeśli pokój jest obiektem noclegowym na świeżym powietrzu, który nie ma stałych ścian, instalacji hydraulicznej ani klimatyzacji. Na przykład pokoje hotelowe nie są obiektami noclegowymi na świeżym powietrzu, podczas gdy pola namiotowe, na których goście mieszkają w namiotach, oraz parkingi dla przyczep kempingowych, na które goście przyjeżdżają własnymi przyczepami, są obiektami noclegowymi na świeżym powietrzu. |
<MobilityAccessible> | Optional | empty | Podaj ten element, jeśli pokój jest dostępny dla osób z ograniczoną mobilnością. |
<Smoking> | Optional | enum | Czy pokój jest dla palaczy czy niepalących. Prawidłowe wartości to non_smoking i smoking . |
<BathAndToilet> | Optional | Object | Zawiera informacje o łazience i toalecie w pokoju.
Atrybut:
Element opcjonalnie może zawierać 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 | Podaj ten element, jeśli pokój ma prywatną łazienkę na świeżym powietrzu. |
<AirConditioning> | Optional | empty | Podaj ten element, jeśli pokój jest klimatyzowany. |
<Balcony> | Optional | empty | Podaj ten element, jeśli pokój ma balkon lub werandę. |
<Views> | Optional | Object | Dostępne opcje:
|
Przykłady
JapaneseHotelRoomStyle
nie ma wartości domyślnej. Pominięcie wartości nie powoduje błędu XML, ale oferta nie będzie wyświetlana w wynikach wyszukiwania, gdy użytkownik filtruje według stylu pokoju lub łóżek.
Poniższy przykład pokazuje, jak używać funkcji <RoomFeatures>
:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>RoomID_1</RoomID>
<RoomFeatures>
<JapaneseHotelRoomStyle>western</JapaneseHotelRoomStyle>
<Beds> <!-- Two single beds -->
<Bed size="single">
<Width unit="cm" number="97"/>
<Length unit="cm" number="195"/>
</Bed>
<Bed size="single">
<Width unit="cm" number="97"/>
<Length unit="cm" number="195"/>
</Bed>
</Beds>
<Suite/>
<Capsule/>
<Roomsharing>private</Roomsharing>
<Outdoor/>
<MobilityAccessible/>
<Smoking>non_smoking</Smoking>
<BathAndToilet relation="separate">
<Bath bathtub="1" shower="1"/>
<Toilet electronic_bidet="1" mobility_accessible="1"/>
</BathAndToilet>
<OpenAirBath/>
<AirConditioning/>
<Balcony/>
<Views>
<LakeView/>
<MarinaView/>
<BeachView/>
<ForestView/>
<MountainView/>
<NatureView/>
</Views>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
Poniżej przedstawiamy przykład western
pokoju w stylu japońskim z 2 double
łóżkami.
<?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>
Poniżej znajdziesz przykład pokoju w stylu japońskim bez łóżka. 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>
<RoomID>RoomID_1</RoomID>
<RoomFeatures>
<JapaneseHotelRoomStyle>japanese</JapaneseHotelRoomStyle>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
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
pokojach, postępuj zgodnie z tym przykładem:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>RoomID_1</RoomID>
<RoomFeatures>
<JapaneseHotelRoomStyle>japanese_western</JapaneseHotelRoomStyle>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
<PackageData>
Określa metadane dotyczące pakietów pokoi niezależne od planu podróży. Ten element zawiera informacje powiązane z partnerem i hotelem, ale nie z planem podróży. Celem jest zdefiniowanie wszystkich danych niezwiązanych z rozkładem raz i odwoływanie się do nich z danych rozkładu.
Element <PackageData>
znajduje się w hierarchii XML wiadomości transakcyjnej 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 i warunki cenowe, które nie są częścią opisu pokoju. Używasz tagów <RoomData>
i <PackageData>
, aby podać szczegółowe informacje o pakietach pokoi i funkcjach cen. W przypadku pojedynczych pokoi, które nie są częścią pakietu, użyj tylko <RoomData>
.
W przypadku tego samego pokoju lub pakietu pokoi możesz zdefiniować elementy <RoomData>
i <PackageData>
. Gdy Google wyświetla pokój lub pakiet w wynikach wyszukiwania, zawiera on opisy z obu tych obiektów, rozdzielone łącznikiem.
Jeśli zaktualizujesz pojedynczy element <PackageData>
w usłudze, musisz zaktualizować wszystkie elementy <PackageData>
i <RoomData>
tej usługi.
Każdy element <PropertyDataSet>
zawiera wszystkie dane o usłudze i zastępuje wszystkie istniejące dane.
Więcej informacji znajdziesz w artykule Metadane pakietu pokoju.
Składnia
Element <PackageData>
używa tej 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 aMilesIncluded
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 | Wymagany? | Typ | Opis |
---|---|---|---|
<BreakfastIncluded> | Optional | boolean | Określa, czy śniadanie jest wliczone w cenę.
Prawidłowe wartości to 0 (lub false ) i 1 (lub true ).
Zamiast atrybutu |
<ChargeCurrency> | Optional | enum | Kiedy i gdzie użytkownik płaci za rezerwację. Ten element używa tej samej składni co <ChargeCurrency> w <Result> .
Wartością domyślną jest |
<CheckinTime> | Optional | Time | Najwcześniejsza możliwa godzina zameldowania. Czas musi być mniejszy niż 24:00 czasu lokalnego hotelu. |
<CheckoutTime> | Optional | Time | Najpóźniejszą możliwą godzinę wymeldowania według czasu lokalnego hotelu. |
<Description> | Optional | Object | szczegółowy opis pakietu; Ten element powinien zawierać informacje, których nie ma w innych elementach ani w elemencie <Name> . Podczas opisywania pokoju nie używaj 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 | Jeśli pakiet obejmuje bezpłatny dostęp do internetu,
podczas gdy inne pakiety nie obejmują tej opcji. Nie ustawiaj tego elementu w przypadku pakietów pokoi w hotelu, który oferuje bezpłatny internet we wszystkich pokojach. Ten element nie dotyczy przewodowego internetu w pokoju ani bezprzewodowego internetu, 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 pakiecie.
Element
Atrybuty opcjonalne są używane tylko wtedy, gdy wartość atrybutu Aby filtry posiłków ( |
<Name> | Required | string | Nazwa pakietu. Ta wartość powinna być zgodna z wartością wyświetlaną na stronie docelowej hotelu. Nie ustawiaj wartości tego elementu na wielkie litery.
Ten element przyjmuje 1 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 przeznaczony jest pakiet pokoi.
Na przykład duży apartament może fizycznie pomieścić 6 osób, ale jest przeznaczony tylko dla maksymalnie 4 osób.
Ta wartość musi być mniejsza lub równa wartości elementu Wartość Jeśli ten element jest określony zarówno w parametrye Uwaga: <Occupancy> może być uzupełniony o <OccupancyDetails> ,który określa typ gości (dorośli lub dzieci). Składnia i opis elementów podrzędnych: <OccupancyDetails> .
|
<PackageID> | Required | string | Unikalny identyfikator pakietu. Użyj tego identyfikatora, aby dopasować dane pakietu pokoi do bloków (możesz też użyć tego identyfikatora, aby odwoływać się do wspólnej definicji pakietu pokoi używanej w jednym komunikacie o transakcji podczas definiowania danych pakietu pokoi w treści). |
<ParkingIncluded> | Optional | boolean | Czy pakiet obejmuje bezpłatny parking, który w przeciwnym razie byłby usługą płatną w danym hotelu. W przypadku hotelu, który oferuje bezpłatny parking, nie podawaj wartości tego elementu.
Dozwolone wartości to |
<PhotoURL> | Optional | Object | (To samo co <PhotoURL> w <RoomData> ,
ale w przypadku pakietu (np. zdjęcia posiłków).)
|
<Refundable> | Optional | Object | Umożliwia wyświetlanie stawki jako w pełni podlegającej zwrotowi lub oferowanie bezpłatnego anulowania. Jeśli nie zostanie podany, nie wyświetli się żadna informacja 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 z możliwością zwrotu środków można również wyróżnić dla użytkowników za pomocą alternatywnych opcji bez bezpośredniej modyfikacji schematu wiadomości o transakcji. Dowiedz się więcej o tych opcjach w zasadach dotyczących zwrotów.
Ten przykład pokazuje element <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Uwaga: zalecamy skonfigurowanie wszystkich atrybutów. Jeśli co najmniej 1 atrybut nie jest ustawiony, generowany jest komunikat ostrzeżenia o stanie pliku danych. Jeśli nie ustawisz żadnych atrybutów, stawka nie będzie wyświetlana jako podlegająca zwrotowi. Atrybuty:
Podczas konfigurowania atrybutów pamiętaj o tych kwestiach:
|
<MembershipBenefits |
Optional | boolean | Cena obejmuje korzyści związane z elitarnym statusem na czas pobytu. Obejmuje te parametry:
|
<CarRentalIncluded> | Optional | boolean | Cena obejmuje bezpłatne wypożyczenie samochodu na czas pobytu. |
<MilesIncluded>> | Optional | boolean | Cena obejmuje mile w programie lojalnościowym. Parametry:
|
<OnPropertyCredit> | Optional | boolean | Cena obejmuje środki do wykorzystania w obiekcie (wyżywienie i napoje, spa itp.). Parametr:
|
<AirportTransportationIncluded> | Optional | Object | Cena obejmuje bezpłatny transport do/z pobliskiego lotniska. Opcjonalny atrybut direction określa kierunek transportu. Dostępne wartości:
from : Transport z lotniska do obiektu. Jest to wartość domyślna, jeśli nie określono kierunku.
to : transport z hotelu na lotnisko.
round_trip : transport z lotniska i na lotnisko.
|
Przykłady
W tym przykładzie zdefiniowano jeden pakiet pokoi z liczbą osób 2 (1 dorosły i 1 dziecko) i wliczonym ś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>
W tym przykładzie zdefiniowano metadane pokoju i pakietu:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>180054</Property>
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Bed Room" language="en"/>
<Text text="Chambre single" language="fr"/>
</Name>
<Description>
<Text text="Non-smoking" language="en"/>
<Text text="Pas de fumiers" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
</RoomData>
<PackageData>
<PackageID>P54321</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
<Text text="Avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Includes a delightful array of jams and jellies." language="en"/>
<Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
</Description>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
</PropertyDataSet>
</Transaction>
W tym przykładzie zdefiniowano metadane pokoju i pakietu dla wielu pakietów pokoju:
<?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>
W tym przykładzie zdefiniowano metadane pokoju i pakietu dla pakietu pokoju z funkcjami 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>
W tym przykładzie definiujemy metadane pokoju i pakietu dotyczące posiłków, zdjęć oraz godzin zameldowania i wymeldowania:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<PackageData>
<PackageID>PackageID_1</PackageID>
<Name>
<Text text="Meals Included" language="en"/>
</Name>
<PhotoURL>
<Caption>
<Text text="Breakfast" language="en"/>
<Text text="朝食" language="ja"/>
</Caption>
<URL>http://example.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Meals>
<!-- Guests can choose to have breakfast in their room or in another
space to avoid contact with other guests. -->
<Breakfast included="1" in_room="1" in_private_space="1"/>
<Dinner included="1" buffet="1"/>
</Meals>
<CheckinTime>15:00</CheckinTime>
<CheckoutTime>11:00</CheckoutTime>
</PackageData>
</PropertyDataSet>
</Transaction>
<?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 na aktualizacje cen i dostępności w wiadomości <Transaction>
.
Element <Result>
znajduje się w hierarchii XML wiadomości transakcyjnej w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Użyj <Result>
, aby ustawić lub zaktualizować ceny pokoi i określić dostępny asortyment. Elementy zdefiniowane w tym elemencie zwykle odwołują się do metadanych niezależnych od planu podróży dotyczących pokoju lub pakietu (takich jak opis lub zestaw udogodnień) zdefiniowanych w elementach <PackageData>
i <RoomData>
.
Zazwyczaj wysyłasz wiadomości Transaction z aktualizacjami cen bardzo często. Dokładny sposób i częstotliwość wykonywania tych czynności zależy od trybu dostawy.
Aby usunąć plany podróży, możesz użyć elementu <Result>
w wiadomości Transakcja, zgodnie z opisem w sekcji Usuwanie zasobów.
Więcej informacji o aktualizowaniu cen i dostępności za pomocą wiadomości o transakcjach znajdziesz w artykule Dodawanie i aktualizowanie asortymentu.
Pojedyncza wiadomość Transakcja może zawierać dowolną liczbę elementów <Result>
, o ile jej rozmiar nie przekracza 100 MB.
Składnia
Element <Result>
używa tej 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 | Wymagany? | Typ | Opis |
---|---|---|---|
mergeable | Optional | boolean | Domyślnie nowe ceny w przypadku konkretnego hotelu i planu podróży nadpisują wszystkie poprzednie (niewygasłe) ceny obecne w pamięci podręcznej Google. Atrybut z możliwością scalania umożliwia przechowywanie dodatkowych cen w pamięci podręcznej Google bez usuwania poprzednich informacji o cenach. W przypadku zapytania o aktualne ceny z odpowiedziami w kontekście ten atrybut będzie zawsze ustawiony na wartość true (niezależnie od odpowiedzi na wiadomość o transakcji). |
Elementy potomne
Element <Result>
ma te elementy podrzędne:
Element podrzędny | Wymagany? | Typ | Opis |
---|---|---|---|
<AllowablePointsOfSale> | Optional | Object | Co najmniej 1 strona docelowa kwalifikująca się do hotelu. Strona docelowa to witryna, która umożliwia użytkownikowi dokonanie rezerwacji. Aby wyraźnie uwzględnić określoną stronę docelową (i wykluczyć inne), dodaj co najmniej 1 element <AllowablePointsOfSale> , który pasuje do atrybutu id elementu <PointOfSale> w pliku stron docelowych.
Jeśli nie uwzględnisz tego elementu, wszystkie strony docelowe zdefiniowane w pliku stron docelowych będą uznawane za odpowiednie do rezerwacji pokoju. Więcej informacji znajdziesz w składni pliku stron docelowych. |
<Baserate> | Optional | float | Cena pokoju za pobyt. Wartość tego elementu powinna odzwierciedlać:
Jeśli pokój jest niedostępny w danym planie podróży,
Aby usunąć pakiet pokoju, wykonaj instrukcje podane w artykule Usuwanie pakietu pokoju. Wartość <Baserate currency="USD">1200.40</Baserate> Element
|
<ChargeCurrency> | Optional | enum | Kiedy i gdzie użytkownik płaci za rezerwację. Element ten może być używany w komunikacie o transakcji w elemencie <Result> dla ceny hotelu lub w bloku <PackageData> dla pakietu pokoi.
Prawidłowe wartości to:
Wartością domyślną jest |
<Checkin> | Required | Date | Data zameldowania w programie podróży w formacie Date. 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 powiązanych z hotelem. Możesz podać maksymalnie 5 wartości niestandardowych z tymi nazwami elementów:
Elementy Elementy <Custom> podane w elemencie |
<ExpirationTime> | Optional | DateTime | Data i godzina, w których cena została uznana za nieważną (co najmniej 3 godziny).
Zalecamy, aby nie podawać sygnatur czasowych ważności, jeśli nie są one istotne dla Twojej struktury cen. Google nie wyświetla cen, które wygasły, a plan podróży z wygasłą ceną staje się dostępny do wyszukiwania rzeczywistych cen. |
<Nights> | Required | integer | Liczba nocy w planie podróży. Wartość elementu <Nights> musi być dodatnią liczbą całkowitą.
Kombinacja <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 jeden wymagany atrybut currency , który definiuje trzyliterowy kod waluty dla opłat. Na przykład: USD .
Element |
<Occupancy> | Optional | integer | Określa maksymalną liczbę pasażerów dla tej stawki.
Gdy element <Occupancy> pojawia się bezpośrednio pod elementem <Result> , musi określać element 2 lub wyższy. <Occupancy> może być uzupełniony o <OccupancyDetails> , który określa typ gości (dorośli lub dzieci). Jeśli typy gości nie są określone,
zakłada się, że są to dorośli. Aby poznać składnię i opis elementów podrzędnych, zapoznaj się z dokumentem <OccupancyDetails> . Jeśli element <Occupancy> nie jest podany, domyślna liczba osób to 2 .
Uwaga: aby włączyć funkcję przesyłania cen dla pokoi z większą liczbą osób niż 2, skontaktuj się z zespołem pomocy. |
<PackageID> | Optional | string | Unikalny identyfikator pakietu, który pozwala na jego zmapowanie z wstępnie zdefiniowanymi danymi pakietu. Służy też do wypełniania zmiennej strony docelowej PACKAGE-ID. Więcej informacji znajdziesz w artykule Metadane dotyczące pokoju w pakiecie. |
<Property> | Required | string | Identyfikator hotelu, na który mają wpływ powiązane dane (cena, plan podróży, pakiet pokoi lub metadane). Wartość tego elementu musi być ciągiem znaków. Wartość tego elementu musi być zgodna z ofertą
<id> zdefiniowaną w pliku danych z listą hoteli.
|
<Rates> | Optional | <Rates> |
Kontener dla co najmniej 1 bloku <Rate> . Każdy element <Rate> w <Rates> definiuje inną cenę kombinacji pokój/plan podróży.
Użyj elementu Uwaga: w przypadku |
<Refundable> | Optional | Object | Umożliwia wyświetlanie stawki jako w pełni podlegającej zwrotowi lub oferowanie bezpłatnego anulowania. Jeśli nie zostanie podany, nie wyświetli się żadna informacja 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 z możliwością zwrotu środków można również wyróżnić dla użytkowników za pomocą alternatywnych opcji bez bezpośredniej modyfikacji schematu wiadomości o transakcji. Dowiedz się więcej o zasadach dotyczących zwrotów środków.
Ten przykład pokazuje element <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Uwaga: zalecamy skonfigurowanie wszystkich atrybutów. Jeśli co najmniej 1 atrybut nie jest ustawiony, generowany jest komunikat ostrzeżenia o stanie pliku danych. Jeśli nie ustawisz żadnych atrybutów, stawka nie będzie wyświetlana jako podlegająca zwrotowi. Atrybuty:
Podczas konfigurowania atrybutów pamiętaj o tych kwestiach:
|
<RoomBundle> | Optional | <RoomBundle> |
Pojemnik na informacje o opisach pokoi z ceną, opakowaniach udogodnień oraz niektórych szczegółach zasad zakupu dotyczących danego hotelu i planu podróży.
Ogólnie element ten służy do określania cen za pokój podstawowy i różne typy pokoi w tym samym obiekcie. Opisów pakietów pokoi można definiować w tekście wiadomości, ale zalecamy użycie osobnej wiadomości z transakcją. Google będzie przechowywać metadane, aby można było się do nich odwoływać, zamiast powtarzać je we wszystkich przyszłych aktualizacjach cen. |
<RoomID> | Optional | string | Niepowtarzalny identyfikator pokoju, który umożliwia jego zmapowanie do wstępnie zdefiniowanych danych pokoju. Jest też używany do wypełniania zmiennej strony docelowej PARTNER-ROOM-ID. Więcej informacji znajdziesz w artykule Metadane dotyczące pokoju w pakiecie. |
<Tax> | Optional | float | Podatki obliczone dla ostatecznej ceny pokoju.
Element <Tax> ma jeden wymagany atrybut currency , który definiuje 3-literowy kod waluty dla podatków. Na przykład: USD . Element <Tax> jest wymagany, jeśli <Baserate> jest większy od zera.
Jeśli atrybut „all_inclusive” elementu |
<Unavailable> | Optional | Object | Wskazuje, że plan podróży jest niedostępny do rezerwacji. służy jako kontener dla bardziej szczegółowych przyczyn braku dostępności planu podróży; Pod tagiem <Unavailable> może być podany jeden lub więcej z tych powodów niedostępności:
|
Przykłady
W tym przykładzie zdefiniowano jeden 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 uwzględniono szczegółów dotyczących pokoju, takich jak opis, zdjęcie i podpis, nazwa pokoju oraz liczba osób, które może pomieścić.
Te informacje możesz zdefiniować raz w osobnym komunikacie o transakcji, który Google przechowuje. Następnie możesz się do niego odwoływać we wszystkich kolejnych aktualizacjach cen i asortymencie. Więcej informacji znajdziesz w artykule Metadane pakietu pokoju.
W tym przykładzie zdefiniowano jeden plan podróży i obiekt z kilkoma stawkami dla różnych liczby osób w pokoju. Element <Rates>
może służyć do podawania cen z wieloma stawkami w przypadku konkretnej usługi. Ten przykład jest również przydatny w przypadku kwater wakacyjnych:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-07-23T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2021-01-13</Checkin>
<Nights>9</Nights>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>2</Occupancy>
<Rates>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>1</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>3</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>4</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>5</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>6</Occupancy>
</Rate>
</Rates>
</Result>
</Transaction>
W tym przykładzie zdefiniowano jeden plan podróży, którego dostępności nie udało się pobrać z kanałów docelowych, drugi, który jest poniżej minimalnej liczby nocy i już zarezerwowany na podane daty, oraz trzeci, w którym obiekt jest zamknięty w dniu przyjazdu, ale otwiera się w trakcie pobytu:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>060773</Property>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Unavailable>
<NotFetched/>
</Unavailable>
</Result>
<Result>
<Property>073313</Property>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Unavailable>
<NoVacancy/>
<MinNightStay value=3/>
</Unavailable>
</Result>
<Result>
<Property>052213</Property>
<Checkin>2018-06-10</Checkin>
<Nights>10</Nights>
<Unavailable>
<PropertyClosed first_open="2018-06-15" first_closed="2018-06-10"/>
</Unavailable>
</Result>
</Transaction>
<Rates>
Kontener dla co najmniej 1 bloku <Rate>
. Każdy element <Rate>
w grupie <Rates>
określa inną cenę pokoju lub kombinacji planu podróży.
Element <Rates>
należy używać tylko wtedy, gdy istnieje kilka cen za ten sam pokój lub tę samą kombinację planu podróży. Możesz na przykład zdefiniować kilka cen warunkowych, prywatnych lub warunkowych w pakietach pokoi.
Element <Rates>
znajduje się w hierarchii XML wiadomości transakcyjnej 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 elementach <Rate>
zastępują wartości związane z ceną w elementach nadrzędnych <Result>
lub <RoomBundle>
. Jeśli nie są ustawione w elementach <Rate>
, dziedziczą wartość z elementu nadrzędnego. Do elementu <RoomBundle>
dziedziczona jest tylko wartość elementu <AllowablePointsofSale>.
Składnia
Element <Rates>
używa tej 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 | Wymagany? | Opis |
---|---|---|
rate_rule_id | Optional | W przypadku taryf warunkowych ten identyfikator pasuje do stawki do definicji w pliku definicji reguł dotyczących stawek. Limit znaków w tym polu to 40. |
Elementy potomne
Element <Rates>
ma te elementy podrzędne:
Element podrzędny | Wymagany? | Typ | Opis |
---|---|---|---|
<AllowablePointsOfSale> | Optional | Object | co najmniej 1 strona docelowa kwalifikująca się do hotelu; Ten element używa tej samej składni co element <AllowablePointsOfSale> w <Result> . |
<Baserate> | Required | float | Cena pokoju za pobyt. Ten element używa tej samej składni co element <Baserate> w <Result> .
Uwaga: element podrzędny |
<ChargeCurrency> | Optional | enum | Kiedy i gdzie użytkownik płaci za rezerwację. Ten element używa tej samej składni co element <ChargeCurrency> w <Result> . |
<Custom[1‑5]> | Optional | string | Pola niestandardowe, których możesz używać do przekazywania dodatkowych danych powiązanych z hotelem na stronę docelową. Ten element używa tej samej składni co <Custom[1‑5]> w sekcji <Result> . W przypadku każdego pola niestandardowego obowiązuje limit 200 znaków. Więcej informacji znajdziesz w
plikach strony docelowej.
Jeśli w elemencie |
<ExpirationTime> | Optional | DateTime | Data i godzina, w której stawka została uznana za nieważną. Ten element używa tej samej składni co element <ExpirationTime> w sekcji <Result> . |
<Occupancy> | Optional | integer | Określa maksymalną liczbę pasażerów dla tej stawki. Jeśli nie określono, przyjmuje się, że jest ona taka sama jak stawka rodzica.
|
<OtherFees> | Required | float | Opłaty inne niż stawka podstawowa i podatki, które wpływają na ostateczną cenę pokoju. Ten element używa tej samej składni co <OtherFees> w sekcji <Result> .
Jeśli atrybut „all_inclusive” elementu |
<Refundable> | Optional | Object | Umożliwia wyświetlanie stawki jako w pełni podlegającej zwrotowi lub oferowanie bezpłatnego anulowania. Jeśli nie zostanie podany, nie wyświetli się żadna informacja 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 z możliwością zwrotu środków można również wyróżnić dla użytkowników za pomocą alternatywnych opcji bez bezpośredniej modyfikacji schematu wiadomości o transakcji. Dowiedz się więcej o tych opcjach w zasadach dotyczących zwrotów.
Ten przykład pokazuje element <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Uwaga: zalecamy skonfigurowanie wszystkich atrybutów. Jeśli co najmniej 1 atrybut nie jest ustawiony, generowany jest komunikat ostrzeżenia o stanie pliku danych. Jeśli nie ustawisz żadnych atrybutów, stawka nie będzie wyświetlana jako podlegająca zwrotowi. Atrybuty:
Podczas konfigurowania atrybutów pamiętaj o tych kwestiach:
|
<Tax> | Required | float | Podatki obliczone dla ostatecznej ceny pokoju. Ten element używa tej samej składni co <Tax> w <Result> . |
Przykłady
Ten przykład pokazuje wiadomość Transaction, która zawiera stawkę podstawową i stawkę warunkową:
<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2023-04-10</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">200.00</Baserate>
<Tax currency="USD">20.00</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<Rates>
<!-- The rate_rule_id is required when using conditional rates -->
<Rate rate_rule_id="mobile">
<!-- Override base rate and taxes for conditional rates -->
<Baserate currency="USD">180.00</Baserate>
<Tax currency="USD">18.00</Tax>
<!-- NOTE: OtherFees is inherited from the above setting -->
<Custom1>ratecode123</Custom1>
</Rate>
</Rates>
</Result>
</Transaction>
W tym przykładzie definiujemy stawkę podstawową i wiele stawek 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 pokoi jako elementu podrzędnego <Result>
w wiadomości <Transaction>
. Określ osobny element na potrzeby każdej kombinacji pakietów lub planów podróży. Aby zdefiniować pakiet i warunki pakietów Room Bundles, użyj elementu <RoomData>
.
Element <RoomBundle>
znajduje się w hierarchii XML wiadomości transakcyjnej 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
Element <RoomBundle>
używa tej 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 | Wymagany? | 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, że:
|
<BreakfastIncluded> | Optional | boolean | Określa, czy w cenie pokoju z pakietem śniadaniowym wliczone jest śniadanie. |
<ChargeCurrency> | Optional | enum | Kiedy i gdzie użytkownik płaci za rezerwację. Ten element używa tej samej składni co <ChargeCurrency> w <Result> .
Wartością domyślną jest |
<Custom[1‑5]> | Optional | string | Pola niestandardowe do przekazywania dodatkowych danych na strony docelowe pakietu pokoi. Te elementy używają tej samej składni co
<Custom[1-5]> w <Result> . Limit znaków na pole niestandardowe wynosi 200. Więcej informacji znajdziesz w plikach strony docelowej.
Zmienne niestandardowe są wymienione tylko wtedy, gdy przesyłasz ceny w wiadomości o transakcji.
Jeśli w elemencie |
<InternetIncluded> | Optional | boolean | Jeśli pakiet pokoju obejmuje bezpłatny dostęp do internetu, inne pakiety nie będą go zawierać. Nie ustawiaj tego elementu w przypadku pakietów pokoi w hotelu, który oferuje bezpłatny internet we wszystkich pokojach. Ten element nie dotyczy przewodowego internetu w pokoju ani bezprzewodowego internetu, który nie jest dostępny w pokojach gościnnych. |
<Occupancy> | Required | integer | Określa maksymalną liczbę pasażerów dla tej stawki. Na przykład duży apartament może pomieścić 6 osób, ale w ramach „pakietu na podróż poślubną” mogą w nim przebywać tylko 2 osoby.
Ta wartość musi być równa lub mniejsza niż Podczas definiowania obłożenia w adresie URL strony docelowej użyj zmiennych Wartość parametru Uwagi:
|
<OtherFees> | Required | float | opłaty inne niż stawka podstawowa i podatki, które wpływają na ostateczną cenę pokoju; Element <OtherFees> przyjmuje jeden wymagany atrybut currency , który definiuje trzyliterowy kod waluty dla opłat. Użyj na przykład znaku USD w przypadku dolarów amerykańskich. |
<PackageID> | Optional (recommended) | string | Unikalny identyfikator danych pakietu. Użyj tego identyfikatora do dopasowania danych Room Bundle do danych wysłanych w <PackageData> . Więcej informacji znajdziesz w artykule Metadane pakietu pokoju. (możesz też użyć tego identyfikatora, aby odwoływać się do wspólnej definicji pakietu pokoi używanej w jednym komunikacie o transakcji podczas definiowania danych pakietu pokoi w tekście). |
<ParkingIncluded> | Optional | boolean | Czy pakiet obejmuje bezpłatny parking, który w przeciwnym razie byłby usługą płatną w danym hotelu. W przypadku hotelu, który oferuje bezpłatny parking, nie podawaj wartości tego elementu.
Dozwolone wartości to |
<RatePlanID> | Optional | string | Identyfikator planu cenowego to unikalny identyfikator kombinacji pokoju i pakietu. Jeśli np. wartość właściwości <RoomID> wynosi 5, a wartość właściwości <PackageID> to ABC, możesz użyć wartości 5-ABC dla właściwości <RatePlanID> . Zdecydowanie zalecamy użycie zmiennej RatePlanID do utworzenia adresu URL strony docelowej (dawniej strony punktu sprzedaży) w ramach kampanii dynamicznych.
Więcej informacji znajdziesz w artykule Używanie zmiennych i warunków. |
<Rates> | Optional | <Rates> |
Stawki, które zastępują domyślne stawki dla tego pakietu pokoi. Ten element używa tej samej składni co <Rates> w <Result> . |
<Refundable> | Optional | Object | Umożliwia wyświetlanie stawki jako w pełni podlegającej zwrotowi lub oferowanie bezpłatnego anulowania. Jeśli nie zostanie podany, nie wyświetli się żadna informacja 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 z możliwością zwrotu środków można również wyróżnić dla użytkowników za pomocą alternatywnych opcji bez bezpośredniej modyfikacji schematu wiadomości o transakcji. Dowiedz się więcej o tych opcjach w zasadach dotyczących zwrotów.
Ten przykład pokazuje element <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Uwaga: zalecamy skonfigurowanie wszystkich atrybutów. Jeśli co najmniej 1 atrybut nie jest ustawiony, generowany jest komunikat ostrzeżenia o stanie pliku danych. Jeśli nie ustawisz żadnych atrybutów, stawka nie będzie wyświetlana jako podlegająca zwrotowi. Atrybuty:
Podczas konfigurowania atrybutów pamiętaj o tych kwestiach:
|
<RoomID> | Required | string | Unikalny identyfikator danych pokoju. Użyj tego identyfikatora do dopasowania danych pakietu pokoi do danych wysłanych w <RoomData> .
Więcej informacji znajdziesz w artykule
Room Bundle metadata. (możesz też użyć tego identyfikatora, aby odnieść się do wspólnej definicji pokoju w jednym komunikacie o transakcji podczas definiowania danych pokoju w tekście wiadomości). |
<Tax> | Required | float | Podatki obliczone dla ostatecznej ceny pokoju.
Element <Tax> ma jeden wymagany atrybut currency , który definiuje 3-literowy kod waluty dla podatków. Użyj na przykład USD w przypadku dolarów amerykańskich. |
Przykłady
Poniższy przykład definiuje odpowiedź z jednym pakietem zakwaterowania.
Gdy użytkownik wybierze 1
w selektorze liczby osób, Google wyświetla najniższą obowiązującą cenę niezależnie od liczby osób.
Jeśli cena za pobyt 1 osoby nie jest dostępna, Google wyświetli najniższą cenę za pobyt 2 osób. Pamiętaj, że ceny za pobyt 1 osoby nie są pobierane w czasie rzeczywistym, jeśli w przypadku planu podróży są one przechowywane w pamięci podręcznej.
W tym przykładzie elementy <RoomID>
i <PackageID>
odwołują się do wstępnie zdefiniowanych metadanych pokoju i pakietu. 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>
W tym przykładzie zdefiniowano odpowiedź zawierającą co najmniej 2 rodzaje zakwaterowania.
W tym przykładzie elementy <RoomID>
i <PackageID>
odwołują się do wstępnie zdefiniowanych metadanych pokoju i pakietu. 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>
W tym przykładzie ustawiono Liczba osób w kilku pakietach pokoi, aby pokazać możliwe ceny za pokój w hostelu.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
<Result>
...
<!-- Suite Room Bundle -->
<RoomBundle>
<RoomID>suite1</RoomID>
<PackageID>standard</PackageID>
<Occupancy>2</Occupancy>
<!-- Price for room -->
<Baserate currency="USD">80.00</Baserate>
<Tax currency="USD">5.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RoomData>
<Name>
<Text text="Suite for 2" language="en"/>
</Name>
</RoomData>
</RoomBundle>
<!-- Small Dorm Room Bundle -->
<RoomBundle>
<RoomID>small_dorm</RoomID>
<PackageID>economy</PackageID>
<Occupancy>1</Occupancy>
<!-- Price per bed -->
<Baserate currency="USD">35.00</Baserate>
<Tax currency="USD">3.50</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RoomData>
<Name>
<Text text="1 bed in small dorm" language="en"/>
</Name>
</RoomData>
</RoomBundle>
<!-- Large Dorm Room Bundle -->
<RoomBundle>
<RoomID>large_dorm</RoomID>
<PackageID>economy</PackageID>
<Occupancy>1</Occupancy>
<!-- Price per bed -->
<Baserate currency="USD">20.00</Baserate>
<Tax currency="USD">2.50</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RoomData>
<Name>
<Text text="1 bed in large dorm" language="en"/>
</Name>
</RoomData>
</RoomBundle>
...
</Result>
</Transaction>
W tym przykładzie definiujemy stawkę podstawową i wiele stawek 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 o transakcji określa maksymalną liczbę gości w pokoju lub pakiecie. <OccupancyDetails>
może zawierać dodatkowe informacje, takie jak liczba i typ gości (dorośli lub dzieci).
Jeśli w elemencie <Rates>
w sekcji <Result>
lub <RoomBundle>
występują wartości <Occupancy>
i <OccupancyDetails>
, oznacza to, że stawka jest ograniczona przez szczegóły dotyczące liczby osób.
Składnia
Gdy pojawia się <OccupancyDetails>
, zawsze poprzedza go <Occupancy>
.
Uwaga:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> ... <Occupancy>max_number_of_intended_occupants </Occupancy> <OccupancyDetails> <NumAdults>number_of_adults </NumAdults> <Children> <Child age=age_of_one_child_guest /> <Child age=age_of_one_child_guest /> </Children> </OccupancyDetails> </Result> </Transaction>
Elementy potomne
Element <OccupancyDetails>
ma te elementy podrzędne:
Element podrzędny | Wymagany? | Typ | Opis |
---|---|---|---|
<NumAdults> | Required | integer | Liczba dorosłych gości. Min.: 1, maks.: 20. |
<Children> | Optional | Object | Kontener dla co najmniej 1 elementu <Child> . |
<Child age> | Optional | integer | Maksymalny wiek dziecka – na przykład <Child age="17"> . |
Przykłady
Poniższe przykłady pokazują, jak element <OccupancyDetails>
może się pojawiać w elementach podrzędnych <Results>
, <RoomBundle>
lub <Rates>
.
W tym przykładzie zdefiniowano jeden plan podróży i jego cenę dla jednego obiektu w odpowiedzi na zapytanie o ceny na żywo, w którym użytkownik podał liczbę i typ gości. W tym przypadku <OccupancyDetails>
(2 osoby dorosłe i jedno dziecko) są zwracane w wartości <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>
W tym przykładzie zdefiniowano jeden plan podróży i jego cenę dla 1 osoby dorosłej i 1 dziecka. Tutaj <OccupancyDetails>
są zwracane w elemencie <Rates>
obiektu <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>
W tym przykładzie określono liczbę osób: 2 dorośli i 1 dziecko na 2 noce w ramach zwracalnej ceny. W tym przypadku <OccupancyDetails>
pojawia się w ramach <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>
W tym przykładzie zdefiniowano kilka cen <RoomBundle>
, które są ograniczone do 2 dorosłych i 2 dzieci. W tym przykładzie element <OccupancyDetails>
występuje w elemencie <Rates>
w elemencie <RoomBundle>
.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">275.00</Baserate>
<Tax currency="USD">27.50</Tax>
<OtherFees currency="USD">0</OtherFees>
<RoomBundle>
<RoomID>5</RoomID>
<PackageID>STD</PackageID>
<Baserate currency="USD">275.00</Baserate>
<Tax currency="USD">27.50</Tax>
<OtherFees currency="USD">0</OtherFees>
<InternetIncluded>1</InternetIncluded>
<ChargeCurrency>web</ChargeCurrency>
<Custom1>ratebasic</Custom1>
<Custom2>ratebasic</Custom2>
<Occupancy>4</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
<Children>
<Child age="17"/>
<Child age="17"/>
</Children>
</OccupancyDetails>
<Rates>
<Rate rate_rule_id="mobile">
<Baserate currency="USD">258.33</Baserate>
<Tax currency="USD">25.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<ChargeCurrency>hotel</ChargeCurrency>
<Custom1>ratecode321</Custom1>
</Rate>
<Rate rate_rule_id="us_or_gb">
<Baserate currency="USD">268.33</Baserate>
<Tax currency="USD">26.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<Custom1>ratecode432</Custom1>
</Rate>
</Rates>
</RoomBundle>
</Result>
</Transaction>