Ta strona zawiera informacje o wiadomościach o transakcjach w formacie XML.
<Transaction>
Elementem głównym wiadomości o transakcji jest <Transaction>
. Jest to kontener na informacje opisowe o pokojach i pakietach oraz o cenach i dostępności pokoi i pakietów.
Element <Transaction>
występuje w tym miejscu w hierarchii XML wiadomości o transakcji:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Wiadomości, które używają elementu głównego <Transaction>
, wymagają co najmniej 1 elementu podrzędnego. Wiadomości transakcyjne mogą zawierać dowolną liczbę elementów podrzędnych, o ile łączny rozmiar wiadomości nie przekracza 100 MB.
Składnia
Element <Transaction>
ma tę składnię:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="timestamp" id="transaction_ID">
<!-- Defines data about a room or package (Room Bundle) -->
<PropertyDataSet>
...
</PropertyDataSet>
<!-- Updates/sets prices and availability for rooms and Room Bundles -->
<!-- (Also removes itineraries from inventory) -->
<Result>
...
</Result>
</Transaction>
Atrybuty
Element <Transaction>
ma te atrybuty:
Atrybut | Wymagany? | Typ | Opis |
---|---|---|---|
id | Required | ciąg | Unikalny identyfikator każdej wiadomości transakcji. |
partner | Optional | string | Konto partnera, którego dotyczy wiadomość transakcyjna. Zwykle używasz tej opcji, jeśli Twój backend udostępnia pliki danych o cenach dla wielu kont partnerów. Ta wartość ciągu znaków to wartość „Klucz partnera” podana na stronie Ustawienia konta w Hotel Center. |
timestamp | Required | DateTime | Moment wysłania wiadomości o transakcji. Wiadomości wysłane w ciągu ostatnich 24 godzin zostaną przetworzone, a pozostałe zostaną odrzucone. Wiadomości są przetwarzane w kolejności |
Elementy potomne
Element <Transaction>
ma te elementy podrzędne:
Element podrzędny | Wymagany? | Typ | Opis |
---|---|---|---|
<PropertyDataSet> | Optional* | <PropertyDataSet> |
Opisuje konkretny pokój i pakiety pokoi. Zwykle używasz tego elementu w osobnej wiadomości o transakcji, aby zdefiniować wspólne wartości dla pakietów pokoi i zmniejszyć rozmiar wiadomości o transakcji. |
<Result> | Optional* | <Result> |
Dane o cenach planu podróży dotyczącego pokoju lub elementu |
* Wymagane jest podanie co najmniej jednej z tych wartości: <PropertyDataSet> lub <Result> . |
Przykłady
Dane dotyczące pomieszczenia
Poniższy przykład określa dane pokoju w wiadomości transakcji:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>5440OF</RoomID>
<Name>
<Text text="Single King Bed Room" language="en"/>
<Text text="Simple Lit de Roi" language="fr"/>
</Name>
<Description>
<Text text="One king bed with pillowtop mattresses, 300-thread-count linens,
and down comforters (bedspreads). City view. 300 square feet. Desk with
rolling chair. Multi-line phone with voice mail. Cable/satellite TV with
complimentary HBO and pay movies." language="en"/>
<Text text="Un très grand lit avec matelas à plateau-coussin, ..." language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Bathroom View" language="en"/>
<Text text="La salle de baines" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Capacity>4</Capacity>
</RoomData>
</PropertyDataSet>
</Transaction>
Dane o cenach
Poniższy przykład definiuje dane o cenach w wiadomości o transakcji:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>060773</Property>
<RoomID>RoomType101</RoomID>
<PackageID>Package101</PackageID>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">278.33</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="site1"/>
</AllowablePointsOfSale>
</Result>
<Result>
<Property>052213</Property>
<RoomID>RoomType101</RoomID>
<PackageID>Package101</PackageID>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">299.98</Baserate>
<Tax currency="USD">26.42</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="otto"/>
<PointOfSale id="simon"/>
</AllowablePointsOfSale>
<MilesIncluded>
<NumberOfMiles>1200</NumberOfMiles>
<Provider>
<Text language="en" text="United Airlines"/>
</Provider>
<LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
</MilesIncluded>
</Result>
</Transaction>
Stawki za noc
Poniższy przykład definiuje dane o cenach za pobyt od 1 do 7 nocy, począwszy od 7 czerwca 2023 r.:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-08-24T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">209.99</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">419.98</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>3</Nights>
<Baserate currency="USD">614.97</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>4</Nights>
<Baserate currency="USD">819.96</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>5</Nights>
<Baserate currency="USD">999.95</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>6</Nights>
<Baserate currency="USD">1193.94</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>7</Nights>
<Baserate currency="USD">1259.93</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
</Transaction>
Ceny podstawowe i warunkowe
Poniższy przykład pokazuje wiadomość Transaction zawierającą stawkę podstawową i stawkę warunkową:
<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2023-04-10</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">200.00</Baserate>
<Tax currency="USD">20.00</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<Rates>
<!-- The rate_rule_id is required when using conditional rates -->
<Rate rate_rule_id="mobile">
<!-- Override base rate and taxes for conditional rates -->
<Baserate currency="USD">180.00</Baserate>
<Tax currency="USD">18.00</Tax>
</Rate>
</Rates>
</Result>
</Transaction>
Usuwanie zasobów reklamowych
W tym przykładzie usuwamy z zasobów reklamowych hotelu kilka rodzajów zasobów reklamowych (noclegi na 1 noc w różnych terminach):
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-05-23T16:20:00-04:00" id="42">
<Result>
<Property>1123581321</Property>
<Checkin>2023-05-23</Checkin>
<Nights>1</Nights>
<Unavailable>
<NoVacancy/>
</Unavailable>
<Tax currency="USD">0</Tax>
<OtherFees currency="USD">0</OtherFees>
</Result>
<Result>
<Property>1123581321</Property>
<Checkin>2023-05-24</Checkin>
<Nights>1</Nights>
<Unavailable>
<NoVacancy/>
</Unavailable>
<Tax currency="USD">0</Tax>
<OtherFees currency="USD">0</OtherFees>
</Result>
<!---Sending <Baserate> is optional with <Unavailable> -->
<Result>
<Property>1123581321</Property>
<Checkin>2023-05-25</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">-1</Baserate>
<Unavailable>
<NoVacancy/>
</Unavailable>
<Tax currency="USD">0</Tax>
<OtherFees currency="USD">0</OtherFees>
</Result>
</Transaction>
<PropertyDataSet>
Kontener informacji o pokoju i pakiecie (lub pakiecie pokoju) w wiadomości.<Transaction>
Wartości ustawione w przypadku hotelu zastępują wartości ustawione w przypadku partnera.
Google przechowuje te informacje, aby nie trzeba było ich podawać za każdym razem, gdy wysyłasz aktualizacje cen.
Element <PropertyDataSet>
występuje w tym miejscu w hierarchii XML wiadomości o transakcji:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Więcej informacji znajdziesz w artykule Metadane pakietu Room Bundle.
Składnia
Element <PropertyDataSet>
ma tę składnię:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <PropertyDataSet> <!-- (Required) ID that matches the Hotel List Feed --> <Property>hotel_ID</Property> <!-- (Optional) Defines metadata about a room --> <RoomData> ... </RoomData> <!-- (Optional) Defines package metadata to be paired with rooms (Room Bundles) --> <PackageData> ... </PackageData> </PropertyDataSet> ... </Transaction>
Atrybuty
Element <PropertyDataSet>
nie ma atrybutów.
Elementy potomne
Element <PropertyDataSet>
ma te elementy podrzędne:
Element podrzędny | Wymagany? | Typ | Opis |
---|---|---|---|
<PackageData> | Optional* | <PackageData> |
Opisuje pakiet z pokojem. Dane te są powiązane z partnerem i hotelem, ale nie z planem podróży. Ten element jest podobny do elementu <RoomData> , ale opisuje udogodnienia i warunki, które nie są częścią opisu fizycznego pokoju.
Odwołujesz się do identyfikatora pakietu w aktualizacjach cen. Więcej informacji znajdziesz w artykule Metadane pakietu Room Bundle. |
<Property> | Required | string | Identyfikator hotelu, którego dotyczą powiązane dane. Wartość tego elementu musi być ciągiem znaków zgodnym z wartością <id> w pliku danych z listą hoteli.
|
<RoomData> | Optional* | <RoomData> |
Opisuje pokój. Te dane są powiązane z partnerem i hotelem, ale nie z planem podróży.
W aktualizacjach cen odwołujesz się do identyfikatora pokoju. |
* Wymagane jest podanie co najmniej jednej z tych wartości: <PackageData> lub <RoomData> . |
Przykłady
Dane o pokojach i pakietach
Ten przykład pokazuje dane pokoju i pakietu w elemencie <PropertyDataSet>
:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>180054</Property>
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Bed Room" language="en"/>
<Text text="Chambre single" language="fr"/>
</Name>
<Description>
<Text text="Non-smoking" language="en"/>
<Text text="Pas de fumiers" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
</RoomData>
<PackageData>
<PackageID>P54321</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
<Text text="Avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Includes a delightful array of jams and jellies." language="en"/>
<Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
</Description>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
</PropertyDataSet>
</Transaction>
Gdy wysyłasz ceny i dostępność tego pokoju oraz zestawu pokoi, w wiadomościach dotyczących cen odwołujesz się do identyfikatorów pokoju i pakietu. Dzięki temu znacznie zmniejszysz rozmiar wiadomości, a także liczbę błędów, które mogą wystąpić z powodu zduplikowanych danych. Więcej informacji znajdziesz w artykule Metadane pakietu Room Bundle.
<RoomData>
Określa niezależne od planu podróży metadane dotyczące pokoi, a w konsekwencji pakietów pokoi (ponieważ pakiety pokoi to pokoje z dodatkowymi udogodnieniami). Użyj
<RoomData>
, aby zmniejszyć powtarzanie danych opisowych w pliku danych o cenach.
Element <RoomData>
występuje w tym miejscu w hierarchii XML wiadomości o transakcji:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Elementy <RoomData>
zawierają informacje powiązane z partnerem i hotelem, ale nie z planem podróży. Jest on przeznaczony do wszystkich danych innych niż dane dotyczące planu podróży.
Element <RoomData>
jest podobny do elementu <PackageData>
, ale opisuje fizyczne pomieszczenie, a nie udogodnienia i warunki pakietu. Elementów <RoomData>
i <PackageData>
używasz w połączeniu, aby podać szczegóły dotyczące pakietów pokoi. W przypadku pojedynczych pokoi, które nie są częścią pakietu, użyj tylko
<RoomData>
.
Możesz zdefiniować elementy <RoomData>
i <PackageData>
dla tego samego pokoju lub pakietu pokoi. Gdy Google wyświetli ten pokój lub pakiet w wynikach wyszukiwania, uwzględni opisy z obu źródeł, oddzielając je łącznikiem.
Więcej informacji znajdziesz w artykule Metadane pakietu Room Bundle.
Składnia
Element <RoomData>
ma tę składnię:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <PropertyDataSet> ... <RoomData> <RoomID>room_ID</RoomID> <Name> <Text text="room_name" language="language_code"/> ... </Name> <Description> <Text text="room_description" language="language_code"/> ... </Description> <Capacity>max_number_of_occupants</Capacity> <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <!-- optional info about the types of guests, whether adults, children, or seniors --></OccupancyDetails> <OccupancySettings> <MinOccupancy>min_number_of_occupants</MinOccupancy> <MinAge>min_age_of_occupants</MinAge> </OccupancySettings> <PhotoURL> <Caption> <Text text="photo_description" language="language_code"/> ... </Caption> <URL>photo_location</URL> </PhotoURL> <RoomFeatures> ... </RoomFeatures> </RoomData> ... </PropertyDataSet> </Transaction>
Atrybuty
Element <RoomData>
nie ma atrybutów.
Elementy potomne
Element <RoomData>
ma te elementy podrzędne:
Element podrzędny | Wymagany? | Typ | Opis |
---|---|---|---|
<Capacity> | Optional | integer | Maksymalna liczba gości, których może pomieścić pokój. W przypadku pokoju pojemność jest większa lub równa liczbie osób.
Jeśli została określona, wartość musi być równa lub większa niż wartość elementu Wartość |
<Description> | Optional | Object | Szczegółowy opis pokoju. Ten element powinien zawierać informacje, które nie są opisane przez inne elementy lub element <Name> . Podczas podawania opisu pokoju nie używaj samych wielkich liter.
Element
Użyj osobnego elementu Poniższy przykład pokazuje wersje opisu pokoju w języku francuskim i angielskim: <Description> <Text text="Two queen-sized beds" language="en"/> <Text text="Deux lits de la reine" language="fr"/> </Description> |
<Name> | Required | string | Nazwa kategorii pokoju. Ta wartość powinna być zgodna z wartością wyświetlaną na stronie docelowej hotelu (wcześniej: punkt sprzedaży). Nie ustawiaj wartości tego elementu na same wielkie litery.
Ten element przyjmuje jeden element podrzędny,
Użyj osobnego elementu Poniższy przykład pokazuje nazwy pomieszczeń w wersji francuskiej i angielskiej: <Name> <Text text="Standard Double Room" language="en"/> <Text text="Le chambre double" language="fr"/> </Name> |
<Occupancy> | Optional | integer | Maksymalna liczba gości, dla których przeznaczony jest pokój.
Na przykład duży apartament może pomieścić 6 osób (pojemność = 6), ale jest przeznaczony tylko dla 4 osób.
Ta wartość musi być mniejsza lub równa wartości elementu Wartość
|
<OccupancySettings> | Optional | Object | Ustawienia, które mogą ograniczać lub modyfikować wymagania dotyczące zajętości pomieszczenia.
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 pakietu pokoi. Możesz określić więcej niż 1 <PhotoURL> dla pokoju lub pakietu pokoi. Każdy adres URL zdjęcia musi znajdować się w osobnym tagu <PhotoURL> .
Ten element przyjmuje te elementy podrzędne:
Przykład: <PhotoURL> <URL>https://www.example.com/static/bar/image1234.jpg</URL> <Caption> <Text text="A bright and breezy way to enjoy your mornin' cuppa tea." language="en"/> <Text text="Une façon lumineuse et aérée pour profiter de votre journée tasse de thé." language="fr"/> </Caption> </PhotoURL> <PhotoURL> <URL>https://www.foo.com/static/bar/image5678.jpg</URL> <Caption> <Text text="Or, perhaps you prefer coffee." language="en"/> <Text text="Ou peut-être préférez-vous le café." language="fr"/> </Caption> </PhotoURL> |
<RoomFeatures> | Optional | <RoomFeatures> |
Zawiera informacje o funkcjach pokoju. |
<RoomID> | Required | string | Unikalny identyfikator pokoju. Użyj tego identyfikatora, aby dopasować dane pokoju do bloków <Result> w aktualizacjach cen. Więcej informacji znajdziesz w artykule Metadane pakietu sal. (Możesz też użyć tego identyfikatora, aby odwołać się do wspólnej definicji pokoju w jednej wiadomości o transakcji podczas definiowania danych pokoju w tekście). |
Przykłady
Dane dotyczące pomieszczenia
Poniższy przykład definiuje dane pokoju:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>5440OF</RoomID>
<Name>
<Text text="Single King Bed Room" language="en"/>
<Text text="Simple Lit de Roi" language="fr"/>
</Name>
<Description>
<Text text="One king bed with pillowtop mattresses, 300-thread-count linens,
and down comforters (bedspreads). City view. 300 square feet. Desk with
rolling chair. Multi-line phone with voice mail. Cable/satellite TV with
complimentary HBO and pay movies." language="en"/>
<Text text="Un très grand lit avec matelas à plateau-coussin, ..." language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Bathroom View" language="en"/>
<Text text="La salle de baines" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Capacity>4</Capacity>
</RoomData>
</PropertyDataSet>
</Transaction>
Metadane pokoju i pakietu
W tym przykładzie zdefiniowano metadane pokoju i pakietu:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>180054</Property>
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Bed Room" language="en"/>
<Text text="Chambre single" language="fr"/>
</Name>
<Description>
<Text text="Non-smoking" language="en"/>
<Text text="Pas de fumiers" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
</RoomData>
<PackageData>
<PackageID>P54321</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
<Text text="Avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Includes a delightful array of jams and jellies." language="en"/>
<Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
</Description>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
</PropertyDataSet>
</Transaction>
Pakiety z wieloma pokojami
W przykładzie poniżej zdefiniowano metadane pokoju i pakietu dla wielu pakietów RoomBundle:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<!-- A transaction message with room types result. -->
<PropertyDataSet>
<Property>12345</Property>
<RoomData>
<RoomID>single</RoomID>
<Name>
<Text text="Single room" language="en"/>
<Text text="Chambre simple" language="fr"/>
</Name>
<Description>
<Text text="A single room" language="en"/>
<Text text="Le chambre simple" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<PhotoURL>
<URL>http://www.foo.com/static/bar/image1235.jpg</URL>
</PhotoURL>
<Capacity>2</Capacity>
</RoomData>
<RoomData>
<RoomID>double</RoomID>
<Name>
<Text text="Double room" language="en"/>
<Text text="Chambre double" language="fr"/>
</Name>
<Occupancy>1</Occupancy>
</RoomData>
<PackageData>
<PackageID>refundbreakfast</PackageID>
<Name>
<Text text="Refundable Room with Breakfast" language="en"/>
<Text text="Chambre remboursable avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Continental Breakfast" language="en"/>
<Text text="Petit déjeuner continental" language="fr"/>
</Description>
<ChargeCurrency>hotel</ChargeCurrency>
<Refundable available="1" refundable_until_days="3"/>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
<PackageData>
<PackageID>prepaid</PackageID>
<Name>
<Text text="Nonrefundable" language="en"/>
<Text text="Non remboursable" language="fr"/>
</Name>
<Description>
<Text text="Blah blah blad" language="en"/>
<Text text="Le blah blah blad" language="fr"/>
</Description>
<Occupancy>2</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="0"/>
</PackageData>
</PropertyDataSet>
</Transaction>
<RoomFeatures>
Definiuje funkcje znalezione w pomieszczeniu.
Element <RoomFeatures>
występuje w tym miejscu w hierarchii XML wiadomości o transakcji:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<RoomFeatures>
Składnia
Element <RoomFeatures>
ma tę składnię:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <PropertyDataSet ... > ... <RoomData> <RoomFeatures> <JapaneseHotelRoomStyle>[western|japanese|japanese_western]</JapaneseHotelRoomStyle> <Beds> <Bed size="[single|semi_double|double|queen|king]"> <Width unit="cm" number="width"/> <Length unit="cm" number="length"/> </Bed> <!-- Include with any additional beds. --> </Beds> <Suite/> <Capsule/> <Roomsharing>[shared|private]</Roomsharing> <Outdoor/> <MobilityAccessible/> <Smoking>[smoking|non_smoking]</Smoking> <BathAndToilet relation="[together|separate]"> <Bath bathtub="[false|true]" shower="[false|true]"/> <Toilet electronic_bidet="[false|true]" mobility_accessible="[false|true]"/> </BathAndToilet> <OpenAirBath/> <AirConditioning/> <Balcony/> <Views> <!-- (Optional) Defines the type of views from the room. --> <!-- Example: <OceanView/> --> </Views> </RoomFeatures> ... </RoomData> ... </PropertyDataSet> </Transactions>
Atrybuty
Element <RoomFeatures>
nie ma atrybutów.
Elementy potomne
Element <RoomFeatures>
ma te elementy podrzędne:
Element podrzędny | Wymagany? | Typ | Opis |
---|---|---|---|
<JapaneseHotelRoomStyle> | Optional | enum | Określa styl japońskiego pokoju hotelowego. Prawidłowe wartości to:
|
<Beds> | Optional | Object | Zawiera tyle symboli <Bed> , ile jest pokoi. Pamiętaj, że japońskie futony nie powinny być tu uwzględniane.
Każdy element
<Bed> ma te 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łowy. |
<Roomsharing> | Optional | enum | Czy ten pokój jest współdzielony z innymi osobami, np. właścicielami lub innymi gośćmi. Prawidłowe wartości to shared i private . |
<Outdoor> | Optional | empty | Podaj ten element, jeśli pokój jest miejscem noclegowym na świeżym powietrzu, które nie ma stałych ścian, instalacji wodno-kanalizacyjnej ani klimatyzacji. Na przykład pokoje hotelowe nie są obiektami noclegowymi na świeżym powietrzu, natomiast pola namiotowe, na których goście nocują w namiotach, i kempingi, na których goście przyjeżdżają własnymi kamperami, są obiektami noclegowymi na świeżym powietrzu. |
<MobilityAccessible> | Optional | empty | Podaj ten element, jeśli pokój jest przystosowany do potrzeb osób z ograniczoną mobilnością. |
<Smoking> | Optional | enum | Czy ten pokój jest dla niepalących czy dla palących. Prawidłowe wartości to non_smoking i smoking . |
<BathAndToilet> | Optional | Object | Zawiera informacje o wannie i toalecie w pokoju.
Atrybut:
Element może opcjonalnie 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 w pokoju znajduje się prywatna łaźnia na świeżym powietrzu. |
<AirConditioning> | Optional | empty | Podaj ten element, jeśli pokój jest klimatyzowany. |
<Balcony> | Optional | empty | Podaj ten element, jeśli pokój ma balkon lub werandę. |
<Views> | Optional | Object | Prawidłowe opcje:
|
Przykłady
JapaneseHotelRoomStyle
nie ma wartości domyślnej. Pominięcie wartości nie powoduje błędu XML, ale Twoja oferta nie będzie wyświetlana w wynikach wyszukiwania, gdy użytkownik będzie filtrować według stylu pokoju lub liczby łóżek.
2 łóżka pojedyncze
Poniższy przykład pokazuje, jak używać funkcji <RoomFeatures>
:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>RoomID_1</RoomID>
<RoomFeatures>
<JapaneseHotelRoomStyle>western</JapaneseHotelRoomStyle>
<Beds> <!-- Two single beds -->
<Bed size="single">
<Width unit="cm" number="97"/>
<Length unit="cm" number="195"/>
</Bed>
<Bed size="single">
<Width unit="cm" number="97"/>
<Length unit="cm" number="195"/>
</Bed>
</Beds>
<Suite/>
<Capsule/>
<Roomsharing>private</Roomsharing>
<Outdoor/>
<MobilityAccessible/>
<Smoking>non_smoking</Smoking>
<BathAndToilet relation="separate">
<Bath bathtub="1" shower="1"/>
<Toilet electronic_bidet="1" mobility_accessible="1"/>
</BathAndToilet>
<OpenAirBath/>
<AirConditioning/>
<Balcony/>
<Views>
<LakeView/>
<MarinaView/>
<BeachView/>
<ForestView/>
<MountainView/>
<NatureView/>
</Views>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
2 łóżka podwójne
Poniżej znajdziesz przykład pokoju w stylu western
z 2 łóżkami double
.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>RoomID_1</RoomID>
<RoomFeatures>
<JapaneseHotelRoomStyle>western</JapaneseHotelRoomStyle>
<Beds> <!-- Two double beds-->
<Bed size="double"></Bed>
<Bed size="double"></Bed>
</Beds>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
Pokój w stylu japońskim bez łóżka
Poniżej znajdziesz przykład pokoju w stylu japońskim bez łóżka. Informacje o łóżkach nie są wymagane w przypadku pokoju w stylu japanese
.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>RoomID_1</RoomID>
<RoomFeatures>
<JapaneseHotelRoomStyle>japanese</JapaneseHotelRoomStyle>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
Pokój japoński w stylu zachodnim z łóżkiem
Poniżej znajdziesz przykład pokoju w stylu japanese_western
z łóżkiem o rozmiarze king
.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>RoomID_1</RoomID>
<RoomFeatures>
<JapaneseHotelRoomStyle>japanese_western</JapaneseHotelRoomStyle>
<Beds>
<Bed size="king"></Bed>
</Beds>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
Jeśli partner nie ma informacji o liczbie łóżek w sekcji japanese_western
rooms, postępuj zgodnie z tym przykładem:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>RoomID_1</RoomID>
<RoomFeatures>
<JapaneseHotelRoomStyle>japanese_western</JapaneseHotelRoomStyle>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
<PackageData>
Określa niezależne od planu podróży metadane dotyczące pakietów pokoi w przypadku obiektu. Ten element zawiera informacje powiązane z partnerem i hotelem, ale nie z planem podróży. Jego celem jest jednokrotne zdefiniowanie wszystkich danych innych niż dane dotyczące planu podróży i odwoływanie się do nich z danych dotyczących planu podróży.
Element <PackageData>
występuje w tym miejscu w hierarchii XML wiadomości o transakcji:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Element <PackageData>
jest podobny do elementu <RoomData>
, ale opisuje funkcje i warunki cenowe, które nie są częścią opisu pokoju. Używasz <RoomData>
i <PackageData>
w połączeniu, aby podać szczegółowe informacje o pakietach pokoi i funkcjach cen. W przypadku pojedynczych pokoi, które nie są częścią pakietu, użyj tylko symbolu <RoomData>
.
Możesz zdefiniować elementy <RoomData>
i <PackageData>
dla tego samego pokoju lub zestawu pokoi. Gdy Google wyświetli ten pokój lub pakiet w wynikach wyszukiwania, uwzględni opisy z obu źródeł, oddzielając je łącznikiem.
Jeśli zaktualizujesz pojedynczy element <PackageData>
w przypadku usługi, musisz zaktualizować wszystkie elementy <PackageData>
i <RoomData>
w przypadku tej usługi.
Każdy <PropertyDataSet>
jest traktowany jako wszystkie dane o usłudze i zastępuje wszystkie dotychczasowe dane.
Więcej informacji znajdziesz w artykule Metadane pakietu Room Bundle.
Składnia
Element <PackageData>
ma tę składnię:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
<PropertyDataSet ... >
<PackageData>
<PackageID>package_ID</PackageID>
<Name>
<Text text="package_name" language="language_code"/>
...
</Name>
<Description>
<Text text="package_description" language="language_code"/>
...
</Description>
<Refundable available="[false|true]" refundable_until_days="number_of_days"
refundable_until_time="time"/>
<ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency>
<Occupancy>max_number_of_intended_occupants</Occupancy>
<OccupancyDetails><!-- optional info about the types of guests,
whether adults or children --></OccupancyDetails>
<!-- For these next 3 elements, boolean_value can be 0/1 or true/false -->
<BreakfastIncluded>boolean_value</BreakfastIncluded>
<InternetIncluded>boolean_value</InternetIncluded>
<ParkingIncluded>boolean_value</ParkingIncluded>
<PhotoURL>
<Caption>
<Text text="photo_description" language="language_code"/>
...
</Caption>
<URL>photo_location</URL>
</PhotoURL>
...
<Meals>
<Breakfast
included="[true|false]" buffet="[true|false]"
in_room="[true|false]" in_private_space="[true|false]"/>
<Dinner
included="[true|false]" buffet="[true|false]"
in_room="[true|false]" in_private_space="[true|false]"/>
</Meals>
<CheckinTime>checkin_time</CheckinTime>
<CheckoutTime>checkout_time</CheckoutTime>
<MembershipBenefitsIncluded>
<ProgramName>
<Text language="en" text="Special Rewards">
</ProgramName>
<ProgramLevel>
<Text language="en" text="Platinum">
</ProgramLevel>
</MembershipBenefitsIncluded>
<OnPropertyCredit>
<Amount currency="USD">123.45</Amount>
</OnPropertyCredit>
</PackageData>
<!-- a PackageID with a MilesIncluded
rate feature -->
<PackageData>
<PackageID>room_with_miles</PackageID>
<Name>
<Text text="Room with Bundled Miles" language="en">
</Name>
<ChargeCurrency>hotel </ChargeCurrency>
<MilesIncluded>
<NumberOfMiles>integer</NumberOfMiles>
<Provider>
<Text language="en" text="provider-name">
</Provider>
<!-- Add Loyalty point information -->
<LoyaltyCampaignID>campaign_ID</LoyaltyCampaignID>
</MilesIncluded>
</PackageData>
...
...
</PropertyDataSet>
...
</Transaction>
Atrybuty
Element <PackageData>
nie ma atrybutów.
Elementy potomne
Element <PackageData>
ma te elementy podrzędne:
Element podrzędny | Wymagany? | Typ | Opis |
---|---|---|---|
<BreakfastIncluded> | Optional | boolean | Określa, czy śniadanie jest wliczone w cenę pakietu.
Prawidłowe wartości to 0 (lub false ) i 1 (lub true ).
Zamiast atrybutu |
<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. Godzina musi być wcześniejsza niż 24:00 czasu lokalnego hotelu. |
<CheckoutTime> | Optional | Time | Najpóźniejsza możliwa godzina wymeldowania w lokalnej strefie czasowej hotelu. |
<Description> | Optional | Object | Szczegółowy opis pakietu. Ten element powinien zawierać informacje, które nie są opisane przez inne elementy lub element <Name> . Podczas podawania opisu pokoju nie używaj samych wielkich liter.
Element <Description> <Text text="Two breakfast buffet certificates for each night of stay." language="en"/> <Text text="Deux certificats petit-déjeuner buffet pour chaque nuit de séjour." language="fr"/> </Description> |
<InternetIncluded> | Optional | boolean | Jeśli pakiet obejmuje bezpłatny dostęp do internetu, podczas gdy inne pakiety nie obejmują tego udogodnienia. Nie ustawiaj tego elementu w przypadku pakietów pokoi w hotelu, który zapewnia bezpłatny internet we wszystkich pokojach. Ten element nie dotyczy przewodowego internetu w pokojach ani bezprzewodowego internetu, który nie jest dostępny w pokojach gości. Prawidłowe wartości to 0 (lub false ) i 1 (lub true ).
|
<Meals> | Optional | Object | Zawiera informacje o posiłkach w tym pakiecie.
Element
Atrybuty opcjonalne są używane tylko wtedy, gdy wartość 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 same wielkie litery.
Ten element przyjmuje jeden 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 pomieścić 6 osób, ale jest przeznaczony tylko dla 4 osób.
Ta wartość musi być mniejsza lub równa wartości elementu Wartość Jeśli określisz ten element zarówno w Uwaga: <Occupancy> może być uzupełniony o <OccupancyDetails> ,który określa typ gości (osoby dorosłe lub dzieci). Składnię i opis elementów podrzędnych znajdziesz w <OccupancyDetails> .
|
<PackageID> | Required | string | Unikalny identyfikator pakietu. Użyj tego identyfikatora, aby dopasować dane pakietu pokoi do bloków (Możesz też użyć tego identyfikatora, aby odwołać się do wspólnej definicji pakietu pokoi używanej w jednej wiadomości o transakcji podczas definiowania danych pakietu pokoi w treści wiadomości). |
<ParkingIncluded> | Optional | boolean | Określa, czy pakiet pokoju obejmuje bezpłatny parking, w przypadku gdy w tym hotelu parking jest usługą płatną. Nie podawaj wartości tego elementu w przypadku hotelu, który oferuje bezpłatny parking.
Prawidłowe wartości to |
<PhotoURL> | Optional | Object | (Tak samo jak <PhotoURL> w <RoomData> , ale w przypadku pakietu, np. zdjęć posiłków).
|
<Refundable> | Optional | Object | Umożliwia wyświetlanie informacji o tym, że stawka podlega pełnemu zwrotowi lub że można bezpłatnie anulować rezerwację. Jeśli nie podasz tych informacji, nie będą wyświetlane żadne informacje o zwrocie środków.
Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result> . Zasady zwrotów na poziomie <Rates> mają wyższy priorytet niż zasady zwrotów na poziomie <PackageData> . Ceny z możliwością zwrotu środków można też wyróżnić przed użytkownikami za pomocą alternatywnych opcji bez bezpośredniego modyfikowania schematu wiadomości o transakcji. Dowiedz się więcej o tych opcjach: zasady dotyczące stawek podlegających zwrotowi.
Poniższy przykład pokazuje element <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Uwaga: zalecamy ustawienie wszystkich atrybutów. Komunikat ostrzegawczy o stanie pliku danych jest generowany, gdy co najmniej 1 atrybut nie jest ustawiony. Jeśli nie ustawisz żadnych atrybutów, cena nie będzie wyświetlana jako podlegająca zwrotowi. Atrybuty to:
Podczas ustawiania atrybutów pamiętaj o tych kwestiach:
|
<MembershipBenefits |
Optional | boolean | Cena obejmuje korzyści związane ze statusem Elite przez cały okres 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 obejmują:
Uwaga: |
<OnPropertyCredit> | Optional | boolean | Cena obejmuje środki do wykorzystania w obiekcie (na jedzenie i napoje, w ośrodku wypoczynkowym, spa itp.). Parametr:
|
<AirportTransportationIncluded> | Optional | Object | Cena obejmuje bezpłatny transport na pobliskie lotnisko i z niego. Opcjonalny atrybut direction określa kierunek transportu. Prawidłowe wartości to:from : transport z lotniska do obiektu jest zapewniony. Jest to wartość domyślna, jeśli nie określono kierunku.
to : transport z obiektu na lotnisko jest zapewniony.
round_trip : transport jest zapewniony zarówno na lotnisko, jak i z lotniska.
|
Przykłady
Pakiet z pokojem jednoosobowym
W tym przykładzie zdefiniowano 1 pakiet pokoi z zakwaterowaniem dla 2 osób (1 dorosły i 1 dziecko) oraz śniadaniem:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<PackageData>
<Occupancy>2</Occupancy>
<OccupancyDetails>
<NumAdults>1</NumAdults>
<Children>
<Child age="17"/>
</Children>
</OccupancyDetails>
<PackageID>P54321</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
<Text text="Avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Two certificates for continental
breakfast will be provided." language="en"/>
<Text text="Deux certificats pour le petit déjeuner
continental seront fournis." language="fr"/>
</Description>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
</PropertyDataSet>
</Transaction>
Metadane pokoju i pakietu
W tym przykładzie zdefiniowano metadane pokoju i pakietu:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>180054</Property>
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Bed Room" language="en"/>
<Text text="Chambre single" language="fr"/>
</Name>
<Description>
<Text text="Non-smoking" language="en"/>
<Text text="Pas de fumiers" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
</RoomData>
<PackageData>
<PackageID>P54321</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
<Text text="Avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Includes a delightful array of jams and jellies." language="en"/>
<Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
</Description>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
</PropertyDataSet>
</Transaction>
Pakiety z wieloma pokojami
W przykładzie poniżej zdefiniowano metadane pokoju i pakietu dla wielu pakietów RoomBundle:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<!-- A transaction message with room types result. -->
<PropertyDataSet>
<Property>12345</Property>
<RoomData>
<RoomID>single</RoomID>
<Name>
<Text text="Single room" language="en"/>
<Text text="Chambre simple" language="fr"/>
</Name>
<Description>
<Text text="A single room" language="en"/>
<Text text="Le chambre simple" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<PhotoURL>
<URL>http://www.foo.com/static/bar/image1235.jpg</URL>
</PhotoURL>
<Capacity>2</Capacity>
</RoomData>
<RoomData>
<RoomID>double</RoomID>
<Name>
<Text text="Double room" language="en"/>
<Text text="Chambre double" language="fr"/>
</Name>
<Occupancy>1</Occupancy>
</RoomData>
<PackageData>
<PackageID>refundbreakfast</PackageID>
<Name>
<Text text="Refundable Room with Breakfast" language="en"/>
<Text text="Chambre remboursable avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Continental Breakfast" language="en"/>
<Text text="Petit déjeuner continental" language="fr"/>
</Description>
<ChargeCurrency>hotel</ChargeCurrency>
<Refundable available="1" refundable_until_days="3"/>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
<PackageData>
<PackageID>prepaid</PackageID>
<Name>
<Text text="Nonrefundable" language="en"/>
<Text text="Non remboursable" language="fr"/>
</Name>
<Description>
<Text text="Blah blah blad" language="en"/>
<Text text="Le blah blah blad" language="fr"/>
</Description>
<Occupancy>2</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="0"/>
</PackageData>
</PropertyDataSet>
</Transaction>
Pakiet z pokojem i cenami
W tym przykładzie zdefiniowano metadane pokoju i pakietu dla pakietu Room z funkcjami cenowymi:
<Transaction timestamp="2010-04-24T20:44:56-04:00" id="TXNID">
<PropertyDataSet>
<Property>12345</Property>
<RoomData>
...
</RoomData>
<!-- definitions of PackageData types including rate features -->
<PackageData>
<PackageID>room_with_addl_benefits</PackageID>
<Name>
<Text text="Acme Hotels 2017 Promotion Package" language="en"/>
</Name>
<ChargeCurrency>hotel</ChargeCurrency>
<BreakfastIncluded>1</BreakfastIncluded>
<MembershipBenefitsIncluded>
<ProgramName>
<Text language="en" text="Marriott Rewards"/>
</ProgramName>
<ProgramLevel>
<Text language="en" text="Platinum"/>
</ProgramLevel>
</MembershipBenefitsIncluded>
<OnPropertyCredit>
<Amount currency="USD">123.45</Amount>
</OnPropertyCredit>
</PackageData>
<PackageData>
<PackageID>room_with_miles</PackageID>
<Name>
<Text text="Room with Bundled Miles" language="en"/>
</Name>
<ChargeCurrency>hotel</ChargeCurrency>
<MilesIncluded>
<NumberOfMiles>1000</NumberOfMiles>
<LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
</MilesIncluded>
<AirportTransportationIncluded direction="from"/>
</PackageData>
</PropertyDataSet>
<!-- The actual list of prices -->
<Result>
…
</Result>
</Transaction>
Posiłki i zdjęcia
W przykładzie poniżej zdefiniowano metadane pokoju i pakietu dotyczące posiłków, zdjęć oraz godzin zameldowania i wymeldowania:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<PackageData>
<PackageID>PackageID_1</PackageID>
<Name>
<Text text="Meals Included" language="en"/>
</Name>
<PhotoURL>
<Caption>
<Text text="Breakfast" language="en"/>
<Text text="朝食" language="ja"/>
</Caption>
<URL>http://example.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Meals>
<!-- Guests can choose to have breakfast in their room or in another
space to avoid contact with other guests. -->
<Breakfast included="1" in_room="1" in_private_space="1"/>
<Dinner included="1" buffet="1"/>
</Meals>
<CheckinTime>15:00</CheckinTime>
<CheckoutTime>11:00</CheckoutTime>
</PackageData>
</PropertyDataSet>
</Transaction>
Śniadanie
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<PackageData>
<PackageID>PackageID_1</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
</Name>
<PhotoURL>
<Caption>
<Text text="Breakfast" language="en"/>
<Text text="朝食" language="ja"/>
</Caption>
<URL>http://example.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Meals>
<Breakfast included="true"/>
<!-- Dinner not included needs to be explicitly specified -->
<Dinner included="false"/>
</Meals>
<CheckinTime>15:00</CheckinTime>
<CheckoutTime>11:00</CheckoutTime>
</PackageData>
</PropertyDataSet>
</Transaction>
<Result>
Kontener aktualizacji cen i dostępności w <Transaction>
wiadomości.
Element <Result>
występuje w tym miejscu w hierarchii XML wiadomości o transakcji:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Użyj <Result>
, aby ustawić lub zaktualizować ceny pokoi i określić dostępne zasoby. Elementy zdefiniowane w tym elemencie zwykle odwołują się do niezależnych od planu podróży metadanych dotyczących pokoju lub pakietu (takich jak opis lub zestaw udogodnień) zdefiniowanych w elementach <PackageData>
i <RoomData>
.
Zazwyczaj bardzo często wysyłasz wiadomości o transakcjach z aktualizacjami cen. Dokładny sposób i częstotliwość tego działania zależą od trybu dostawy.
W wiadomościach o transakcjach możesz używać symbolu <Result>
, aby usuwać plany podróży, zgodnie z opisem w sekcji Usuwanie zasobów.
Więcej informacji o używaniu wiadomości transakcyjnych do aktualizowania cen i dostępności znajdziesz w artykule Dodawanie i aktualizowanie asortymentu.
Pojedyncza wiadomość transakcyjna może zawierać dowolną liczbę elementów <Result>
, o ile jej rozmiar nie przekracza 100 MB.
Składnia
Element <Result>
ma tę składnię:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> <!-- Required --> <Property>hotel_ID</Property> <!-- Required --> <Checkin>YYYY-MM-DD</Checkin> <!-- Required --> <Nights>number_of_nights</Nights> <Baserate currency="currency_code">price</Baserate> <!-- Only required when <Baserate> contains a real price --> <Tax currency="currency_code">tax_amount</Tax> <!-- Only required when <Baserate> contains a real price --> <OtherFees currency="currency_code">fee_amount</OtherFees> <Refundable available="[false|true]" refundable_until_days="number_of_days" refundable_until_time="time"/> <RoomID>room_ID</RoomID> <PackageID>package_ID</PackageID> <ExpirationTime>expiration_time</ExpirationTime> <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency> <Occupancy>max_number_of_intended_occupants</Occupancy> <!-- For Baserate, occupancy value must be greater than or equal to 2. If a value is not provided for occupancy, it defaults to 2. --> <!-- Child occupancy rates should only be sent through Live pricing with context and not through Pull or Changed pricing --> <OccupancyDetails>occupancy_info</OccupancyDetails> <Rates>...</Rates> <RoomBundle>...</RoomBundle> <AllowablePointsOfSale> <PointOfSale id="landing_page_identifier"/> ... </AllowablePointsOfSale> <MilesIncluded> <NumberOfMiles>integer</NumberOfMiles> <Provider> <Text language="en" text="provider-name"> </Provider> <!-- Add Loyalty point information --> <LoyaltyCampaignID>campaign_ID</LoyaltyCampaignID> </MilesIncluded> </Result> ... </Transaction>
Atrybuty
Element <Result>
ma te atrybuty:
Atrybut | Wymagany? | Typ | Opis |
---|---|---|---|
mergeable | Optional | boolean | Domyślnie nowe ceny dla konkretnego hotelu i planu podróży zastępują wszystkie poprzednie (nieprzeterminowane) ceny znajdujące się w pamięci podręcznej Google. Atrybut mergeable umożliwia przechowywanie dodatkowych cen w pamięci podręcznej Google bez usuwania poprzednich informacji o cenach. Odpowiedzi na zapytanie o ceny na żywo z kontekstem będą zawsze miały ten atrybut ustawiony na true
(niezależnie od odpowiedzi na wiadomość o transakcji). |
Elementy potomne
Element <Result>
ma te elementy podrzędne:
Element podrzędny | Wymagany? | Typ | Opis |
---|---|---|---|
<AllowablePointsOfSale> | Optional | Object | Co najmniej 1 strona docelowa, która kwalifikuje się do wyświetlania reklam hotelu. Strona docelowa to witryna, która może obsługiwać proces rezerwacji dla użytkownika końcowego. Aby wyraźnie uwzględnić niektóre strony docelowe (i wykluczyć inne), dodaj co najmniej 1 element <AllowablePointsOfSale> , który pasuje do atrybutu id elementu <PointOfSale> w pliku stron docelowych.
Jeśli nie uwzględnisz tego elementu, wszystkie strony docelowe zdefiniowane w pliku stron docelowych będą uznawane za kwalifikujące się do rezerwacji pokoju. Więcej informacji znajdziesz w artykule Składnia pliku stron docelowych. |
<Baserate> | Optional | float | Cena pokoju za pobyt. Wartość tego elementu powinna odzwierciedlać:
Jeśli pokój jest niedostępny w przypadku planu podróży, element Aby usunąć pakiet Room Bundle, postępuj zgodnie z instrukcjami w sekcji Usuwanie pakietu Room Bundle. Wartość <Baserate currency="USD">1200.40</Baserate> Element
|
<ChargeCurrency> | Optional | enum | Kiedy i gdzie użytkownik płaci za rezerwację. Ten element może być używany w komunikacie o transakcji w elemencie <Result> w przypadku ceny hotelu lub w bloku <PackageData> w przypadku pakietu pokoju.
Prawidłowe wartości to:
Wartością domyślną jest |
<Checkin> | Required | Date | Data zameldowania w przypadku planu podróży w formacie Date. Połączenie elementu <Nights> i elementu <Checkin> tworzy plan podróży. |
Optional | string | Wycofany: określa pole niestandardowe, którego możesz użyć do przekazywania dodatkowych danych powiązanych z hotelem. Możesz przekazywać maksymalnie 5 wartości niestandardowych z tymi nazwami elementów:
Elementy Ważne: jeśli chcesz używać zmiennych |
|
<ExpirationTime> | Optional | DateTime | Data i godzina, o której cena jest uznawana za nieaktualną (minimum 3 godziny).
Jeśli nie jest to kluczowe dla Twojej struktury cenowej, nie podawaj sygnatur czasowych wygaśnięcia. Google nie wyświetla żadnych wygasłych cen, a każdy plan podróży z wygasłą ceną będzie kwalifikował się do zapytań o ceny rzeczywiste. |
<MilesIncluded> | Optional | boolean | Cena obejmuje mile w programie lojalnościowym. Parametry obejmują:
Uwaga: |
<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 określa trzyliterowy kod waluty opłat. Na przykład: USD .
Element |
<Occupancy> | Optional | integer | Określa maksymalną liczbę osób, które mogą przebywać w obiekcie w przypadku tej ceny.
Gdy element <Occupancy> występuje bezpośrednio pod elementem <Result> , musi określać co najmniej 2 . <Occupancy> może być uzupełniony o parametr <OccupancyDetails> , który określa typ gości (osoby dorosłe lub dzieci). Jeśli typy gości nie są określone, przyjmuje się, że są to osoby dorosłe. Składnię i opis elementów podrzędnych znajdziesz w <OccupancyDetails> . Jeśli element <Occupancy> nie jest podany, domyślna wartość zajętości to 2 .
Ważne: stawki za pobyt dzieci powinny być przesyłane tylko w przypadku aktualizacji cen w czasie rzeczywistym w odpowiedzi na wyszukiwania użytkowników, a nie w przypadku pobierania danych lub zmiany cen. Uwaga: aby włączyć funkcję wysyłania cen za pokoje jednoosobowe, skontaktuj się z zespołem pomocy. |
<PackageID> | Optional | string | Unikalny identyfikator pakietu, który umożliwia powiązanie go z wstępnie zdefiniowanymi danymi pakietu.
Używana też do wypełniania zmiennej strony docelowej PACKAGE-ID.
Więcej informacji znajdziesz w artykule Metadane pakietu pokoju.
W elemencie |
<Property> | Required | string | Identyfikator hotelu, którego dotyczą powiązane dane (cena, plan podróży, pakiet pokoi lub metadane). Wartość tego elementu musi być ciągiem znaków. Wartość tego elementu musi być zgodna z ofertą<id> zdefiniowaną w pliku danych z listą hoteli.
|
<Rates> | Optional | <Rates> |
Kontener dla co najmniej 1 bloku <Rate> . Każdy symbol <Rate> w <Rates> określa inną cenę kombinacji pokoju i planu podróży.
Użyj elementu Uwaga: w ramach elementu |
<Refundable> | Optional | Object | Umożliwia wyświetlanie informacji o tym, że stawka podlega pełnemu zwrotowi lub że można bezpłatnie anulować rezerwację. Jeśli nie podasz tych informacji, nie będą wyświetlane żadne informacje o zwrocie środków.
Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result> . Zasady zwrotów na poziomie <Rates> mają wyższy priorytet niż zasady zwrotów na poziomie <PackageData> . Ceny z możliwością zwrotu środków można też wyróżnić przed użytkownikami za pomocą alternatywnych opcji bez bezpośredniego modyfikowania schematu wiadomości o transakcji. Dowiedz się więcej o zasadach dotyczących cen z możliwością zwrotu środków.
Poniższy przykład pokazuje element <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Uwaga: zalecamy ustawienie wszystkich atrybutów. Komunikat ostrzegawczy o stanie pliku danych jest generowany, gdy co najmniej 1 atrybut nie jest ustawiony. Jeśli nie ustawisz żadnych atrybutów, cena nie będzie wyświetlana jako podlegająca zwrotowi. Atrybuty to:
Podczas ustawiania atrybutów pamiętaj o tych kwestiach:
|
<RoomBundle> | Optional | <RoomBundle> |
Kontener z informacjami o wycenionych opisach fizycznych pokoju, wszelkich pakietach udogodnień i niektórych szczegółach zasad zakupu w danym hotelu i planie podróży.
Ogólnie rzecz biorąc, używaj tego elementu do określania cen pokoju podstawowego i różnych typów pokoi w tym samym obiekcie. Opisy pakietów pokoi można zdefiniować w treści wiadomości, ale zalecamy użycie osobnej wiadomości o transakcji. Google będzie przechowywać metadane, aby można było się do nich odwoływać, zamiast powtarzać je we wszystkich przyszłych aktualizacjach cen. |
<RoomID> | Optional | string | Unikalny identyfikator pokoju, który umożliwia mapowanie go na wstępnie zdefiniowane dane pokoju. Używany też do wypełniania zmiennej strony docelowej PARTNER-ROOM-ID.
Więcej informacji znajdziesz w artykule Metadane pakietu pokoju.
W elemencie |
<Tax> | Optional | float | Podatki obliczone dla ceny końcowej pokoju.
Element <Tax> przyjmuje jeden wymagany atrybut currency , który określa trzyliterowy kod waluty podatków. Na przykład: USD . Element <Tax> jest wymagany, jeśli wartość <Baserate> jest większa niż zero.
Jeśli atrybut „all_inclusive” elementu |
<Unavailable> | Optional | Object | Wskazuje, że plan podróży jest niedostępny do rezerwacji. Służy jako kontener bardziej szczegółowych przyczyn niedostępności planu podróży. Pod tagiem <Unavailable> może być zagnieżdżony co najmniej jeden z tych powodów niedostępności:
|
Przykłady
Przykład z wieloma usługami
W tym przykładzie zdefiniowano 1 plan podróży i jego ceny dla 2 obiektów:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>060773</Property>
<RoomID>RoomType101</RoomID>
<PackageID>Package101</PackageID>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">278.33</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="site1"/>
</AllowablePointsOfSale>
</Result>
<Result>
<Property>052213</Property>
<RoomID>RoomType101</RoomID>
<PackageID>Package101</PackageID>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">299.98</Baserate>
<Tax currency="USD">26.42</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="otto"/>
<PointOfSale id="simon"/>
</AllowablePointsOfSale>
<MilesIncluded>
<NumberOfMiles>1200</NumberOfMiles>
<Provider>
<Text language="en" text="United Airlines"/>
</Provider>
<LoyaltyCampaignID>my_campaign</LoyaltyCampaignID>
</MilesIncluded>
</Result>
</Transaction>
W tym przykładzie nie ma informacji o pomieszczeniu, takich jak opis, zdjęcie z podpisem, nazwa pomieszczenia i jego pojemność.
Możesz zdefiniować te informacje raz w osobnym komunikacie Transaction, który Google przechowuje. Możesz się do niego odwoływać we wszystkich kolejnych aktualizacjach cen i asortymentu. Więcej informacji znajdziesz w artykule Metadane pakietu Room Bundle.
Przykład z wieloma stawkami
W tym przykładzie zdefiniowano pojedynczy plan podróży i obiekt z wieloma stawkami dla różnych liczb osób. Element <Rates>
może służyć do podawania cen wielostawkowych dla konkretnego obiektu. Poniższy przykład jest również przydatny w przypadku kwater wakacyjnych:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-07-23T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2021-01-13</Checkin>
<Nights>9</Nights>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>2</Occupancy>
<Rates>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>1</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>3</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>4</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>5</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>6</Occupancy>
</Rate>
</Rates>
</Result>
</Transaction>
Przykład niedostępny
W tym przykładzie zdefiniowano 1 plan podróży, którego dostępności nie można było pobrać z kanałów podrzędnych, 2 plan podróży, który jest krótszy niż minimalna długość pobytu i jest już zarezerwowany na podane daty, oraz 3 plan podróży, w którym obiekt jest zamknięty w dniu przyjazdu, ale otwiera się w trakcie pobytu:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>060773</Property>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Unavailable>
<NotFetched/>
</Unavailable>
</Result>
<Result>
<Property>073313</Property>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Unavailable>
<NoVacancy/>
<MinNightStay value=3/>
</Unavailable>
</Result>
<Result>
<Property>052213</Property>
<Checkin>2018-06-10</Checkin>
<Nights>10</Nights>
<Unavailable>
<PropertyClosed first_open="2018-06-15" first_closed="2018-06-10"/>
</Unavailable>
</Result>
</Transaction>
<Rates>
Kontener dla co najmniej 1 bloku <Rate>
. Każdy symbol <Rate>
w <Rates>
określa inną cenę pokoju lub kombinacji planu podróży.
Elementu <Rates>
używaj tylko wtedy, gdy dla tej samej kombinacji pokoju lub planu podróży jest dostępnych kilka stawek. Możesz na przykład zdefiniować wiele cen dla cen warunkowych, cen prywatnych lub cen warunkowych w pakietach pokoi.
Element <Rates>
występuje w tym miejscu w hierarchii XML wiadomości o transakcji:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
(Can also contain<Rates>
) + ...
Wartości ustawione w elemencie <Rate>
zastępują wartości związane z cenami w elemencie nadrzędnym <Result>
lub <RoomBundle>
. Jeśli nie są one ustawione w <Rate>
, dziedziczą wartość z elementu nadrzędnego. Tylko element <AllowablePointsofSale> jest dziedziczony do elementu <RoomBundle>
.
Składnia
Element <Rates>
ma tę składnię:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> <Rates> <Rate rate_rule_id="rate_rule_id"> <Baserate currency="currency_code">price</Baserate> <Tax currency="currency_code">tax_amount</Tax> <OtherFees currency="currency_code">fee_amount</OtherFees> <ExpirationTime>expiration_time</ExpirationTime> <Refundable available="[false|true]" refundable_until_days="number_of_days" refundable_until_time="time"/> <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency> <AllowablePointsOfSale> <PointOfSale id="landing_page_identifier"/> </AllowablePointsOfSale> <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <!-- optional info about the types of guests, whether adults or children --></OccupancyDetails> ... <MilesIncluded> <NumberOfMiles>integer</NumberOfMiles> <Provider> <Text language="en" text="provider-name"> </Provider> <LoyaltyCampaignID>campaign_ID</LoyaltyCampaignID> </MilesIncluded> ... </Rate> ... </Rates> </Result> ... </Transaction>
Atrybuty
Element <Rates>
ma te atrybuty:
Atrybut | Wymagany? | Opis |
---|---|---|
rate_rule_id | Optional | W przypadku cen warunkowych ten identyfikator dopasowuje cenę do definicji w pliku definicji reguł dotyczących cen. Limit znaków w tym polu wynosi 40. |
Elementy potomne
Element <Rates>
ma te elementy podrzędne:
Element podrzędny | Wymagany? | Typ | Opis |
---|---|---|---|
<AllowablePointsOfSale> | Optional | Object | Co najmniej 1 strona docelowa, która kwalifikuje się do wyświetlania reklam hotelu. Ten element używa tej samej składni co element <AllowablePointsOfSale> na stronie <Result> . |
<Baserate> | Required | float | Cena pokoju za pobyt. Ten element używa tej samej składni co element <Baserate> na stronie <Result> .
Uwaga: element podrzędny |
<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> . |
Optional | string | Wycofane: pola niestandardowe, których możesz używać do przekazywania dodatkowych danych powiązanych z hotelem na stronę docelową. Ten element
używa tej samej składni co <Custom[1‑5]> w <Result> . Każde pole niestandardowe może zawierać maksymalnie 200 znaków. Więcej informacji znajdziesz w sekcji
pliki strony docelowej. Jeśli elementy <Custom> są podane w elemencie <Result> , nie są dziedziczone w elemencie <RoomBundle> i powinny być zdefiniowane oddzielnie dla każdego elementu <RoomBundle> . W razie potrzeby można je też uwzględnić w elemencie <PackageData>.
Ważne: jeśli chcesz używać zmiennych |
|
<ExpirationTime> | Optional | DateTime | Data i godzina, po których stawka jest uznawana za nieaktualną. Ten element używa tej samej składni co element <ExpirationTime> w <Result> . |
<MilesIncluded> | Optional | boolean | Cena obejmuje mile w programie lojalnościowym. Parametry obejmują:
Uwaga: |
<Occupancy> | Optional | integer | Określa maksymalną liczbę osób, które mogą przebywać w obiekcie w przypadku tej ceny. Jeśli nie zostanie określona, przyjmuje się, że jest taka sama jak stawka nadrzędna.
|
<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 <Result> .
Jeśli atrybut „all_inclusive” elementu |
<Refundable> | Optional | Object | Umożliwia wyświetlanie informacji o tym, że stawka podlega pełnemu zwrotowi lub że można bezpłatnie anulować rezerwację. Jeśli nie podasz tych informacji, nie będą wyświetlane żadne informacje o zwrocie środków.
Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result> . Zasady zwrotów na poziomie <Rates> mają wyższy priorytet niż zasady zwrotów na poziomie <PackageData> . Ceny z możliwością zwrotu środków można też wyróżnić przed użytkownikami za pomocą alternatywnych opcji bez bezpośredniego modyfikowania schematu wiadomości o transakcji. Dowiedz się więcej o tych opcjach: zasady dotyczące stawek podlegających zwrotowi.
Poniższy przykład pokazuje element <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Uwaga: zalecamy ustawienie wszystkich atrybutów. Komunikat ostrzegawczy o stanie pliku danych jest generowany, gdy co najmniej 1 atrybut nie jest ustawiony. Jeśli nie ustawisz żadnych atrybutów, cena nie będzie wyświetlana jako podlegająca zwrotowi. Atrybuty to:
Podczas ustawiania atrybutów pamiętaj o tych kwestiach:
|
<Tax> | Required | float | Podatki obliczone dla ceny końcowej pokoju. Element
używa tej samej składni co element <Tax> w <Result> . |
Przykłady
Cena podstawowa i cena warunkowa
Poniższy przykład pokazuje wiadomość o transakcji, która zawiera stawkę podstawową i stawkę warunkową:
<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2023-04-10</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">200.00</Baserate>
<Tax currency="USD">20.00</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<Rates>
<!-- The rate_rule_id is required when using conditional rates -->
<Rate rate_rule_id="mobile">
<!-- Override base rate and taxes for conditional rates -->
<Baserate currency="USD">180.00</Baserate>
<Tax currency="USD">18.00</Tax>
</Rate>
</Rates>
</Result>
</Transaction>
Wiele cen warunkowych
Poniższy przykład definiuje stawkę podstawową i wiele stawek warunkowych w ramach elementu <RoomBundle>
:
<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2023-04-10</Checkin>
<Nights>2</Nights>
<!-- When Google receives new room bundle information for an itinerary, all
previous room bundle pricing is dropped from Google's cache. Thus, if you
want to delete a specific room bundle from Google's cache, you may do so
by simply not providing that specific room bundle in subsequent transaction
messages. -->
<RoomBundle>
...
<!-- RoomID is required, PackageID is recommended. -->
<RoomID>5</RoomID>
<PackageID>ABC</PackageID>
<!-- Baserate is required. -->
<Baserate currency="USD">275.00</Baserate>
<Tax currency="USD">27.50</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<!-- RatePlanID is optional and represents the unique identifier for a
room and package data combination. We strongly recommend using RatePlanID
as a variable to build your dynamic landing page (formerly Point of Sale)
URL. For details, see Using Variables and Conditions. -->
<RatePlanID>5-ABC</RatePlanID>
<!-- Occupancy is mandatory for RoomBundle elements. -->
<!-- Elements below will get inherited to nested rate elements. -->
<Occupancy>2</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
</OccupancyDetails>
<InternetIncluded>1</InternetIncluded>
<!-- Rate rule "mobile" overrides chargeCurrency, "us_or_gb" doesn't. -->
<ChargeCurrency>web</ChargeCurrency>
<Rates>
<Rate rate_rule_id="mobile">
<Baserate currency="USD">258.33</Baserate>
<Tax currency="USD">25.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<!-- The value below overrides ChargeCurrency from roombundle. -->
<ChargeCurrency>hotel</ChargeCurrency>
</Rate>
<Rate rate_rule_id="us_or_gb">
<Baserate currency="USD">268.33</Baserate>
<Tax currency="USD">26.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
</Rate>
</Rates>
</RoomBundle>
</Result>
</Transaction>
<RoomBundle>
Określa ceny i dostępność pakietów pokoi jako element podrzędny elementu <Result>
w wiadomości <Transaction>
. Zdefiniuj osobny element dla każdej kombinacji pakietu lub planu podróży. Aby określić pakiet i warunki pakietów pokoi, użyj <RoomData>
.
Element <RoomBundle>
występuje w tym miejscu w hierarchii XML wiadomości o transakcji:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Więcej informacji znajdziesz w artykule Korzystanie z zestawów do sal.
Składnia
Element <RoomBundle>
ma tę składnię:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> ... <RoomBundle> <!-- Required unless specified inline under<RoomData>
--> <RoomID>room_ID</RoomID> <!-- Required<PackageData>
--> <PackageID>package_ID</PackageID> <!-- Add Loyalty point information --> <MilesIncluded> <NumberOfMiles>integer</NumberOfMiles> <Provider> <Text language="en" text="provider-name"> </Provider> <LoyaltyCampaignID>campaign_ID</LoyaltyCampaignID>> </MilesIncluded> <!-- Required --> <Baserate currency="currency_code">price</Baserate> <!-- Required --> <Tax currency="currency_code">taxes</Tax> <!-- Required --> <OtherFees currency="currency_code">other_fees</OtherFees> <Refundable available="[false|true]" refundable_until_days="number_of_days" refundable_until_time="time"/> <!-- Required --> <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency> <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <!-- optional info about the types of guests, whether adults or children --></OccupancyDetails> <BreakfastIncluded>boolean_value</BreakfastIncluded> <InternetIncluded>boolean_value</InternetIncluded> <ParkingIncluded>boolean_value</ParkingIncluded> <RatePlanID>rate_plan_ID</RatePlanID> <Rates>...</Rates> </RoomBundle> ... </Result> </Transaction>
Atrybuty
Element <RoomBundle>
nie ma atrybutów.
Elementy potomne
Element <RoomBundle>
ma te elementy podrzędne:
Element podrzędny | Wymagany? | Typ | Opis |
---|---|---|---|
<Baserate> | Required | float | Określa cenę pakietu pokoju za pobyt. Ten element używa tej samej składni co <Baserate> w <Result> , z tym wyjątkiem:
|
<BreakfastIncluded> | Optional | boolean | Określa, czy ten pakiet pokoju obejmuje śniadanie w cenie. |
<ChargeCurrency> | Optional | enum | Kiedy i gdzie użytkownik płaci za rezerwację. Ten element używa tej samej składni co <ChargeCurrency> w <Result> .
Wartością domyślną jest |
Optional | string | Wycofane: pola niestandardowe do przekazywania dodatkowych danych na strony docelowe pakietu pokoi. Te elementy używają tej samej składni co <Custom[1-5]> w <Result> . Każde pole niestandardowe może zawierać maksymalnie 200 znaków. Więcej informacji znajdziesz w sekcji Pliki strony docelowej.
Zmienne niestandardowe są wymienione tylko wtedy, gdy wysyłasz ceny w wiadomości o transakcji. Jeśli elementy <Custom> są podane w elemencie <Result> , nie są dziedziczone w elemencie <RoomBundle> i powinny być zdefiniowane oddzielnie dla każdego elementu <RoomBundle> . W razie potrzeby można je też uwzględnić w elemencie <PackageData>.
Ważne: jeśli chcesz używać zmiennych |
|
<InternetIncluded> | Optional | boolean | Jeśli pakiet pokoju obejmuje bezpłatny dostęp do internetu, podczas gdy inne pakiety nie obejmują tego udogodnienia. Nie ustawiaj tego elementu w przypadku pakietów pokoi w hotelu, który zapewnia bezpłatny internet we wszystkich pokojach. Ten element nie dotyczy przewodowego internetu w pokojach ani bezprzewodowego internetu, który nie jest dostępny w pokojach gości. |
<MilesIncluded> | Optional | boolean | Cena obejmuje mile w programie lojalnościowym. Parametry obejmują:
Uwaga: |
<Occupancy> | Required | integer | Określa maksymalną liczbę osób, które mogą przebywać w obiekcie w przypadku tej ceny. Na przykład duży apartament może pomieścić 6 osób, ale „Pakiet dla nowożeńców” jest przeznaczony tylko dla 2 osób.
Ta wartość musi być mniejsza lub równa Podczas określania liczby osób 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 jeden wymagany atrybut currency , który określa trzyliterowy kod waluty opłat. Na przykład w przypadku dolarów amerykańskich użyj symbolu USD . |
<PackageID> | Optional (recommended) | string | Unikalny identyfikator danych pakietu. Użyj tego identyfikatora, aby dopasować dane pakietu pomieszczeń do danych wysłanych w <PackageData> . Więcej informacji znajdziesz w artykule Metadane pakietu sal. (Możesz też użyć tego identyfikatora, aby odwołać się do wspólnej definicji pakietu pokoi używanej w jednej wiadomości o transakcji podczas definiowania danych pakietu pokoi w treści wiadomości). |
<ParkingIncluded> | Optional | boolean | Określa, czy pakiet pokoju obejmuje bezpłatny parking, w przypadku gdy w tym hotelu parking jest usługą płatną. Nie podawaj wartości tego elementu w przypadku hotelu, który oferuje bezpłatny parking.
Prawidłowe wartości to |
<RatePlanID> | Optional | string | Identyfikator planu cenowego to unikalny identyfikator kombinacji pokoju i pakietu. Jeśli na przykład wartość <RoomID> wynosi 5, a wartość <PackageID> to ABC, możesz użyć wartości 5-ABC dla <RatePlanID> . Zdecydowanie zalecamy używanie zmiennej RatePlanID do tworzenia dynamicznego adresu URL strony docelowej (wcześniej: punkt sprzedaży).
Więcej informacji znajdziesz w artykule Używanie zmiennych i warunków. |
<Rates> | Optional | <Rates> |
Stawki, które zastępują domyślne stawki dla tego pakietu pokoi. Ten element używa tej samej składni co <Rates> w <Result> . |
<Refundable> | Optional | Object | Umożliwia wyświetlanie informacji o tym, że stawka podlega pełnemu zwrotowi lub że można bezpłatnie anulować rezerwację. Jeśli nie podasz tych informacji, nie będą wyświetlane żadne informacje o zwrocie środków.
Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result> . Zasady zwrotów na poziomie <Rates> mają wyższy priorytet niż zasady zwrotów na poziomie <PackageData> . Ceny z możliwością zwrotu środków można też wyróżnić przed użytkownikami za pomocą alternatywnych opcji bez bezpośredniego modyfikowania schematu wiadomości o transakcji. Dowiedz się więcej o tych opcjach: zasady dotyczące stawek podlegających zwrotowi.
Poniższy przykład pokazuje element <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Uwaga: zalecamy ustawienie wszystkich atrybutów. Komunikat ostrzegawczy o stanie pliku danych jest generowany, gdy co najmniej 1 atrybut nie jest ustawiony. Jeśli nie ustawisz żadnych atrybutów, cena nie będzie wyświetlana jako podlegająca zwrotowi. Atrybuty to:
Podczas ustawiania atrybutów pamiętaj o tych kwestiach:
|
<RoomID> | Required | string | Unikalny identyfikator danych pokoju. Użyj tego identyfikatora, aby dopasować dane pakietu pokoi do danych przesłanych w <RoomData> .
Więcej informacji znajdziesz w sekcji
Metadane pakietu sal. (Możesz też użyć tego identyfikatora, aby odwołać się do wspólnej definicji pokoju w jednej wiadomości o transakcji podczas definiowania danych pokoju w formie wbudowanej). |
<Tax> | Required | float | Podatki obliczone dla ceny końcowej pokoju.
Element <Tax> przyjmuje jeden wymagany atrybut currency , który określa trzyliterowy kod waluty podatków. Na przykład w przypadku dolarów amerykańskich użyj USD . |
Przykłady
Pakiet dla 1 osoby
Poniższy przykład przedstawia odpowiedź z jednym pakietem dla 1 osoby.
Gdy użytkownik wybierze 1
w selektorze liczby osób, Google wyświetli najniższą kwalifikującą się cenę niezależnie od liczby osób.
Jeśli cena za pobyt 1 osoby nie jest dostępna, Google wyświetli najniższą cenę za pobyt 2 osób. Pamiętaj, że ceny za pobyt 1 osoby nie są sprawdzane na bieżąco, jeśli w przypadku danej trasy są zapisane w pamięci podręcznej ceny za pobyt 2 lub więcej osób.
Ten przykład odwołuje się do wstępnie zdefiniowanych metadanych pokoju i pakietu za pomocą elementów <RoomID>
i <PackageID>
. Aby zdefiniować te informacje, użyj elementów <RoomData>
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 rodzaje użytkowania
Poniższy przykład definiuje odpowiedź zawierającą co najmniej 2 okresy zajętości.
Ten przykład odwołuje się do wstępnie zdefiniowanych metadanych pokoju i pakietu za pomocą elementów <RoomID>
i <PackageID>
. Aby zdefiniować te informacje, użyj elementów <RoomData>
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 wieloma pokojami
Poniższy przykład ustawia wartość Occupancy w kilku pakietach Room, aby zademonstrować możliwe ceny pokoi w hostelu.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
<Result>
...
<!-- Suite Room Bundle -->
<RoomBundle>
<RoomID>suite1</RoomID>
<PackageID>standard</PackageID>
<Occupancy>2</Occupancy>
<!-- Price for room -->
<Baserate currency="USD">80.00</Baserate>
<Tax currency="USD">5.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RoomData>
<Name>
<Text text="Suite for 2" language="en"/>
</Name>
</RoomData>
</RoomBundle>
<!-- Small Dorm Room Bundle -->
<RoomBundle>
<RoomID>small_dorm</RoomID>
<PackageID>economy</PackageID>
<Occupancy>1</Occupancy>
<!-- Price per bed -->
<Baserate currency="USD">35.00</Baserate>
<Tax currency="USD">3.50</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RoomData>
<Name>
<Text text="1 bed in small dorm" language="en"/>
</Name>
</RoomData>
</RoomBundle>
<!-- Large Dorm Room Bundle -->
<RoomBundle>
<RoomID>large_dorm</RoomID>
<PackageID>economy</PackageID>
<Occupancy>1</Occupancy>
<!-- Price per bed -->
<Baserate currency="USD">20.00</Baserate>
<Tax currency="USD">2.50</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RoomData>
<Name>
<Text text="1 bed in large dorm" language="en"/>
</Name>
</RoomData>
</RoomBundle>
...
</Result>
</Transaction>
Wiele cen warunkowych
Poniższy przykład definiuje stawkę podstawową i wiele stawek warunkowych w ramach elementu <RoomBundle>
:
<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2023-04-10</Checkin>
<Nights>2</Nights>
<!-- When Google receives new room bundle information for an itinerary, all
previous room bundle pricing is dropped from Google's cache. Thus, if you
want to delete a specific room bundle from Google's cache, you may do so
by simply not providing that specific room bundle in subsequent transaction
messages. -->
<RoomBundle>
...
<!-- RoomID is required, PackageID is recommended. -->
<RoomID>5</RoomID>
<PackageID>ABC</PackageID>
<!-- Baserate is required. -->
<Baserate currency="USD">275.00</Baserate>
<Tax currency="USD">27.50</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<!-- RatePlanID is optional and represents the unique identifier for a
room and package data combination. We strongly recommend using RatePlanID
as a variable to build your dynamic landing page (formerly Point of Sale)
URL. For details, see Using Variables and Conditions. -->
<RatePlanID>5-ABC</RatePlanID>
<!-- Occupancy is mandatory for RoomBundle elements. -->
<!-- Elements below will get inherited to nested rate elements. -->
<Occupancy>2</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
</OccupancyDetails>
<InternetIncluded>1</InternetIncluded>
<!-- Rate rule "mobile" overrides chargeCurrency, "us_or_gb" doesn't. -->
<ChargeCurrency>web</ChargeCurrency>
<Rates>
<Rate rate_rule_id="mobile">
<Baserate currency="USD">258.33</Baserate>
<Tax currency="USD">25.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<!-- The value below overrides ChargeCurrency from roombundle. -->
<ChargeCurrency>hotel</ChargeCurrency>
</Rate>
<Rate rate_rule_id="us_or_gb">
<Baserate currency="USD">268.33</Baserate>
<Tax currency="USD">26.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
</Rate>
</Rates>
</RoomBundle>
</Result>
</Transaction>
<OccupancyDetails>
<Occupancy>
w wiadomości transakcyjnej określa maksymalną liczbę gości w pokoju lub pakiecie. <OccupancyDetails>
może zawierać dodatkowe informacje, takie jak liczba i rodzaj gości (osoby dorosłe lub dzieci).
Jeśli w elemencie <Rates>
w <Result>
lub <RoomBundle>
pojawią się znaczniki <Occupancy>
i <OccupancyDetails>
, oznacza to, że stawka jest ograniczona przez szczegóły dotyczące obłożenia.
Jeśli w elemencie <RoomBundle>
umieścisz element <OccupancyDetails>
wraz z zagnieżdżonym elementem <Rate>
, nie możesz wysłać podstawowego elementu <Occupancy>
w elemencie <Rate>
. Zamiast tego zalecamy jedną z tych opcji:
- Pomiń liczbę osób w przypadku
<Rate>
: w tym przypadku<Rate>
dziedziczy<OccupancyDetails>
bezpośrednio z<RoomBundle>
.
lub
- Zduplikowany element
<OccupancyDetails>
: w tym przypadku wyślij dodatkowy identyczny element<OccupancyDetails>
zarówno w elemencie<RoomBundle>
, jak i w zagnieżdżonym elemencie<Rate>
.
Składnia
Gdy pojawia się znak <OccupancyDetails>
, zawsze poprzedza go znak <Occupancy>
.
Pamiętaj o tej składni:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> ... <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <NumAdults>number_of_adults</NumAdults> <Children> <Child age=age_of_one_child_guest/> <Child age=age_of_one_child_guest/> </Children> </OccupancyDetails> </Result> </Transaction>
Elementy potomne
Element <OccupancyDetails>
ma te elementy podrzędne:
Element podrzędny | Wymagany? | Typ | Opis |
---|---|---|---|
<NumAdults> | Required | integer | Liczba dorosłych gości. Min.: 1, maks.: 20. |
<Children> | Optional | Object | Kontener dla co najmniej 1 elementu <Child> . |
<Child age> | Optional | integer | Maksymalny wiek dziecka, np. <Child age="17"> . |
Przykłady
Poniższe przykłady pokazują, jak element <OccupancyDetails>
może występować w elementach <Results>
, <RoomBundle>
lub w elemencie podrzędnym <Rates>
.
Odpowiedź z wynikami
Poniższy przykład przedstawia 1 plan podróży i jego cenę w przypadku 1 obiektu w odpowiedzi na zapytanie o ceny w czasie rzeczywistym, w którym użytkownik określił liczbę i rodzaje gości. W tym przypadku w <Result>
zwracana jest wartość <OccupancyDetails>
– 2 osoby dorosłe i 1 dziecko.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>060773</Property>
<RoomID>RoomType101</RoomID>
<PackageID>Package101</PackageID>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">278.33</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="site1"/>
</AllowablePointsOfSale>
<Occupancy>3</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
<Children>
<Child age="17"/>
</Children>
</OccupancyDetails>
</Result>
</Transaction>
Odpowiedź dotycząca stawek
Poniższy przykład pokazuje, jak zdefiniować 1 plan podróży i jego cenę dla 1 osoby dorosłej i 1 dziecka. W tym przypadku <OccupancyDetails>
są zwracane w elemencie <Rates>
.<Result>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Transaction id="Wtdj8QoQIWcAAbaTGlIAAAC4" timestamp="2018-04-18T11:27:45-04:00">
<Result>
<Property>8251</Property>
<Checkin>2018-06-20</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">62.18</Baserate>
<Tax currency="USD">2.45</Tax>
<OtherFees currency="USD">0.00</OtherFees>
<Rates>
<Rate rate_rule_id="rule-951">
<Occupancy>2</Occupancy>
<OccupancyDetails>
<NumAdults>1</NumAdults>
<Children>
<Child age="17"/>
</Children>
</OccupancyDetails>
<Baserate currency="USD">42.61</Baserate>
<Tax currency="USD">5.70</Tax>
<OtherFees currency="USD">0.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="yourhotelpartnersite.com"/>
</AllowablePointsOfSale>
</Rate>
</Rates>
</Result>
</Transaction>
Pakiet z pokojem
Poniższy przykład określa obłożenie na 2 osoby dorosłe i 1 dziecko na 2 noce z możliwością zwrotu środków. W tym przypadku <OccupancyDetails>
pojawiają się w <RoomBundle>
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>6781291</Property>
<Checkin>2017-08-05</Checkin>
<Nights>2</Nights>
...
<RoomBundle>
<RoomID>10291</RoomID>
<RatePlanID>564739</RatePlanID>
<PackageID>564739</PackageID>
<Occupancy>3</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
<Children>
<Child age="17"/>
</Children>
</OccupancyDetails>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="true" refundable_until_days="1" refundable_until_time="23:59:00" />
<Baserate currency="USD">185.34</Baserate>
<Tax currency="USD">37.06</Tax>
<OtherFees currency="USD">2.22</OtherFees>
</RoomBundle>
</Result>
</Transaction>
Pakiety z wieloma pokojami
Poniższy przykład definiuje kilka cen <RoomBundle>
, które są ograniczone do 2 osób dorosłych i 2 dzieci. W tym przypadku element <OccupancyDetails>
występuje w elemencie <Rates>
elementu <RoomBundle>
.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">275.00</Baserate>
<Tax currency="USD">27.50</Tax>
<OtherFees currency="USD">0</OtherFees>
<RoomBundle>
<RoomID>5</RoomID>
<PackageID>STD</PackageID>
<Baserate currency="USD">275.00</Baserate>
<Tax currency="USD">27.50</Tax>
<OtherFees currency="USD">0</OtherFees>
<InternetIncluded>1</InternetIncluded>
<ChargeCurrency>web</ChargeCurrency>
<Occupancy>4</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
<Children>
<Child age="17"/>
<Child age="17"/>
</Children>
</OccupancyDetails>
<Rates>
<Rate rate_rule_id="mobile">
<Baserate currency="USD">258.33</Baserate>
<Tax currency="USD">25.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<ChargeCurrency>hotel</ChargeCurrency>
</Rate>
<Rate rate_rule_id="us_or_gb">
<Baserate currency="USD">268.33</Baserate>
<Tax currency="USD">26.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
</Rate>
</Rates>
</RoomBundle>
</Result>
</Transaction>