Ta strona zawiera odniesienie do opartych na formacie XML komunikatów o transakcjach.
<Transaction>
Głównym elementem komunikatu dotyczącego transakcji jest <Transaction>
. To kontener na opisowe informacje
o pokojach i pakietach oraz o cenach i dostępności pokoi i pakietów.
Element <Transaction>
występuje w hierarchii XML komunikatu transakcji w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Wiadomości, których głównym elementem jest <Transaction>
, wymagają co najmniej 1 elementu podrzędnego. Wiadomości dotyczące transakcji mogą mieć dowolną liczbę elementów podrzędnych, pod warunkiem że łączny rozmiar wiadomości nie przekracza 100 MB.
Składnia
Element <Transaction>
ma taką składnię:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="timestamp" id="transaction_ID">
<!-- Defines data about a room or package (Room Bundle) -->
<PropertyDataSet>
...
</PropertyDataSet>
<!-- Updates/sets prices and availability for rooms and Room Bundles -->
<!-- (Also removes itineraries from inventory) -->
<Result>
...
</Result>
</Transaction>
Atrybuty
Element <Transaction>
ma te atrybuty:
Atrybut | Wymagana? | Typ | Opis |
---|---|---|---|
id | Required | ciąg znaków | Unikalny identyfikator każdej wiadomości dotyczącej transakcji. |
partner | Optional | string | Konto partnera, którego dotyczy wiadomość dotycząca transakcji. Zwykle jest on używany, jeśli Twój backend dostarcza pliki danych z cenami dla wielu kont partnerów. Ta wartość ciągu znaków to wartość „Klucz partnera” podana na stronie Ustawienia konta w Hotel Center. |
timestamp | Required | DateTime | Moment wysłania wiadomości dotyczącej transakcji. Wszystkie wiadomości z sygnaturą czasową w ciągu ostatnich 24 godzin zostaną przetworzone, a te, które nie zostały odrzucone, zostaną odrzucone. Wiadomości są przetwarzane w kolejności |
Elementy potomne
Element <Transaction>
ma te elementy podrzędne:
Element podrzędny | Wymagana? | Typ | Opis |
---|---|---|---|
<PropertyDataSet> | Optional* | <PropertyDataSet> |
Opisuje konkretny pokój i pakiety pokojów. Zwykle używasz tego elementu w osobnej wiadomości dotyczącej transakcji, aby zdefiniować wspólne wartości dla pakietów pokojów i zmniejszyć rozmiar wiadomości dotyczących transakcji. |
<Result> | Optional* | <Result> |
Dane o cenach w planie podróży pokoju lub element |
* Trzeba określić co najmniej jedną z tych właściwości: <PropertyDataSet> lub <Result> . |
Przykłady
Dane o pokojach
Ten przykład definiuje dane pokoju w wiadomości transakcji:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>5440OF</RoomID>
<Name>
<Text text="Single King Bed Room" language="en"/>
<Text text="Simple Lit de Roi" language="fr"/>
</Name>
<Description>
<Text text="One king bed with pillowtop mattresses, 300-thread-count linens,
and down comforters (bedspreads). City view. 300 square feet. Desk with
rolling chair. Multi-line phone with voice mail. Cable/satellite TV with
complimentary HBO and pay movies." language="en"/>
<Text text="Un très grand lit avec matelas à plateau-coussin, ..." language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Bathroom View" language="en"/>
<Text text="La salle de baines" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Capacity>4</Capacity>
</RoomData>
</PropertyDataSet>
</Transaction>
Dane dotyczące cen
Ten przykład definiuje dane o cenach w komunikacie transakcji:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>060773</Property>
<RoomID>RoomType101</RoomID>
<PackageID>Package101</PackageID>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">278.33</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="site1"/>
</AllowablePointsOfSale>
</Result>
<Result>
<Property>052213</Property>
<RoomID>RoomType101</RoomID>
<PackageID>Package101</PackageID>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">299.98</Baserate>
<Tax currency="USD">26.42</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="otto"/>
<PointOfSale id="simon"/>
</AllowablePointsOfSale>
</Result>
</Transaction>
Ceny za noc
Ten przykład przedstawia ceny za pobyt od 1 do 7 nocy od 7 czerwca 2023 r.:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-08-24T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">209.99</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">419.98</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>3</Nights>
<Baserate currency="USD">614.97</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>4</Nights>
<Baserate currency="USD">819.96</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>5</Nights>
<Baserate currency="USD">999.95</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>6</Nights>
<Baserate currency="USD">1193.94</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
<Result>
<Property>1234</Property>
<Checkin>2018-06-07</Checkin>
<Nights>7</Nights>
<Baserate currency="USD">1259.93</Baserate>
<Tax currency="USD">21.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
</Result>
</Transaction>
Ceny podstawowe i warunkowe
Poniższy przykład pokazuje komunikat transakcji, który zawiera stawkę podstawową i stawkę warunkową:
<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2023-04-10</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">200.00</Baserate>
<Tax currency="USD">20.00</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<Rates>
<!-- The rate_rule_id is required when using conditional rates -->
<Rate rate_rule_id="mobile">
<!-- Override base rate and taxes for conditional rates -->
<Baserate currency="USD">180.00</Baserate>
<Tax currency="USD">18.00</Tax>
<!-- NOTE: OtherFees is inherited from the above setting -->
<Custom1>ratecode123</Custom1>
</Rate>
</Rates>
</Result>
</Transaction>
Usuń asortyment
Ten przykład pokazuje usunięcie z zasobów reklamowych kilku rodzajów zasobów reklamowych (pobyt 1 noclegu w kilku różnych dniach):
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-05-23T16:20:00-04:00" id="42">
<Result>
<Property>1123581321</Property>
<Checkin>2023-05-23</Checkin>
<Nights>1</Nights>
<Unavailable>
<NoVacancy/>
</Unavailable>
<Tax currency="USD">0</Tax>
<OtherFees currency="USD">0</OtherFees>
</Result>
<Result>
<Property>1123581321</Property>
<Checkin>2023-05-24</Checkin>
<Nights>1</Nights>
<Unavailable>
<NoVacancy/>
</Unavailable>
<Tax currency="USD">0</Tax>
<OtherFees currency="USD">0</OtherFees>
</Result>
<!---Sending <Baserate> is optional with <Unavailable> -->
<Result>
<Property>1123581321</Property>
<Checkin>2023-05-25</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">-1</Baserate>
<Unavailable>
<NoVacancy/>
</Unavailable>
<Tax currency="USD">0</Tax>
<OtherFees currency="USD">0</OtherFees>
</Result>
</Transaction>
<PropertyDataSet>
Kontener na informacje o pomieszczeniu i pakiecie (lub pakiecie sal) w wiadomości <Transaction>
. Wartości ustawione na poziomie partnera zastępują wartości hoteli.
Google przechowuje te informacje, dzięki czemu nie musisz ich określać za każdym razem, gdy wysyłasz aktualizacje cen.
Element <PropertyDataSet>
występuje w hierarchii XML komunikatu transakcji w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Więcej informacji znajdziesz w artykule Metadane pakietu sal.
Składnia
Element <PropertyDataSet>
ma taką składnię:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <PropertyDataSet> <!-- (Required) ID that matches the Hotel List Feed --> <Property>hotel_ID</Property> <!-- (Optional) Defines metadata about a room --> <RoomData> ... </RoomData> <!-- (Optional) Defines package metadata to be paired with rooms (Room Bundles) --> <PackageData> ... </PackageData> </PropertyDataSet> ... </Transaction>
Atrybuty
Element <PropertyDataSet>
nie ma atrybutów.
Elementy potomne
Element <PropertyDataSet>
ma te elementy podrzędne:
Element podrzędny | Wymagana? | Typ | Opis |
---|---|---|---|
<PackageData> | Optional* | <PackageData> |
Opisuje zestaw pokojów. Te dane są powiązane z partnerem i hotelem, ale nie z planem podróży. Ten element jest podobny do elementu <RoomData> , ale opisuje udogodnienia i warunki, które nie są częścią opisu fizycznego pokoju.
Identyfikator pakietu odnosi się do aktualizacji cen. Więcej informacji znajdziesz w artykule o metadanych pakietu sal. |
<Property> | Required | string | Identyfikator hotelu, którego dotyczą powiązane dane. Wartość tego elementu musi być ciągiem znaków odpowiadającym atrybutowi <id> w pliku danych z listą hoteli.
|
<RoomData> | Optional* | <RoomData> |
Opisuje pomieszczenie. Te dane są powiązane z partnerem i hotelem, ale nie z planem podróży.
Identyfikator pokoju podany jest w aktualizacjach cen. |
* Trzeba określić co najmniej jedną z tych właściwości: <PackageData> lub <RoomData> . |
Przykłady
Dane dotyczące pomieszczeń i pakietów
Ten przykład pokazuje dane dotyczące zarówno pomieszczenia, jak i pakietu w <PropertyDataSet>
:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>180054</Property>
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Bed Room" language="en"/>
<Text text="Chambre single" language="fr"/>
</Name>
<Description>
<Text text="Non-smoking" language="en"/>
<Text text="Pas de fumiers" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
</RoomData>
<PackageData>
<PackageID>P54321</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
<Text text="Avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Includes a delightful array of jams and jellies." language="en"/>
<Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
</Description>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
</PropertyDataSet>
</Transaction>
Wysyłając informacje o cenach i dostępności danego pokoju i pakietu pokojów, w wiadomościach o cenach odwołujesz się do identyfikatorów pokoju i pakietu. W efekcie znacznie zmniejszasz rozmiar wiadomości i zmniejszasz liczbę błędów, które mogą wystąpić w wyniku zduplikowania danych. Więcej informacji znajdziesz w artykule Metadane pakietu sal.
<RoomData>
Określa niezależne od planu podróży metadane dotyczące pokojów, a także pakiety sal (ponieważ pakiety pokoi to pokoje z dodatkowymi udogodnieniami). Używaj właściwości <RoomData>
, aby ograniczyć powtarzanie danych opisowych w pliku danych z cenami.
Element <RoomData>
występuje w hierarchii XML komunikatu transakcji w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Elementy <RoomData>
zawierają informacje powiązane z partnerem i hotelem, ale nie z planem podróży. Przeznaczone jest ono tylko dla
wszystkich danych nieplanowanych.
Element <RoomData>
jest podobny do elementu <PackageData>
, ale opisuje pomieszczenie, a nie udogodnienia i warunki dostawy. Aby podać szczegółowe informacje o pakietach pokoi, użyj kombinacji właściwości <RoomData>
i <PackageData>
. W przypadku pokoi, które nie są częścią pakietu, użyj po prostu <RoomData>
.
Zarówno elementy <RoomData>
, jak i <PackageData>
możesz zdefiniować dla tego samego pokoju lub zestawu pokoi. Gdy Google wyświetli ten pokój lub pakiet w wynikach wyszukiwania, będzie zawierać opisy obu tych obiektów rozdzielone łącznikiem.
Więcej informacji znajdziesz w artykule Metadane pakietu sal.
Składnia
Element <RoomData>
ma taką składnię:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <PropertyDataSet> ... <RoomData> <RoomID>room_ID</RoomID> <Name> <Text text="room_name" language="language_code"/> ... </Name> <Description> <Text text="room_description" language="language_code"/> ... </Description> <Capacity>max_number_of_occupants</Capacity> <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <!-- optional info about the types of guests, whether adults, children, or seniors --></OccupancyDetails> <OccupancySettings> <MinOccupancy>min_number_of_occupants</MinOccupancy> <MinAge>min_age_of_occupants</MinAge> </OccupancySettings> <PhotoURL> <Caption> <Text text="photo_description" language="language_code"/> ... </Caption> <URL>photo_location</URL> </PhotoURL> <RoomFeatures> ... </RoomFeatures> </RoomData> ... </PropertyDataSet> </Transaction>
Atrybuty
Element <RoomData>
nie ma atrybutów.
Elementy potomne
Element <RoomData>
ma te elementy podrzędne:
Element podrzędny | Wymagana? | Typ | Opis |
---|---|---|---|
<Capacity> | Optional | integer | Maksymalna liczba gości, która może fizycznie pomieścić w sali. W przypadku sali pojemność pojemność jest co najmniej taka sama jak liczba osób.
Jeśli podasz tę wartość, musi ona być równa lub większa od wartości elementu Wartość |
<Description> | Optional | Object | Szczegółowy opis pokoju. Ten element powinien zawierać informacje, które nie zostały opisane przez inne elementy ani element <Name> . W opisie pokoju nie używaj samych wielkich liter.
Element
Użyj osobnego elementu Ten przykład przedstawia francuską i angielską wersję opisu pokoju: <Description> <Text text="Two queen-sized beds" language="en"/> <Text text="Deux lits de la reine" language="fr"/> </Description> |
<Name> | Required | string | Nazwa kategorii pokoju. Ta wartość powinna być zgodna z informacjami wyświetlanymi na stronie docelowej hotelu (dawniej – w punkcie sprzedaży). Nie ustawiaj wartości tego elementu na wielkie litery.
Ten element przyjmuje pojedynczy element podrzędny (
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 pomieścić do 6 osób, ale jest przeznaczony tylko dla 4 osób.
Ta wartość nie może być większa od wartości elementu Wartość
|
<OccupancySettings> | Optional | Object | Ustawienia, które mogą ograniczać lub modyfikować wymagania dotyczące liczby osób w sali.
Element
<OccupancySettings> <MinOccupancy>2</MinOccupancy> <MinAge>16</MinAge> </OccupancySettings> Nie trzeba uwzględniać wszystkich elementów podrzędnych. |
<PhotoURL> | Optional | Object | Adres URL i opcjonalny podpis zdjęcia danego pokoju lub zestawu pokoi. Dla pokoju lub zestawu pokoi możesz określić więcej niż 1 <PhotoURL> . Każdy adres URL zdjęcia musi mieć własną właściwość <PhotoURL> .
Ten element przyjmuje te elementy podrzędne:
Przykład: <PhotoURL> <URL>https://www.example.com/static/bar/image1234.jpg</URL> <Caption> <Text text="A bright and breezy way to enjoy your mornin' cuppa tea." language="en"/> <Text text="Une façon lumineuse et aérée pour profiter de votre journée tasse de thé." language="fr"/> </Caption> </PhotoURL> <PhotoURL> <URL>https://www.foo.com/static/bar/image5678.jpg</URL> <Caption> <Text text="Or, perhaps you prefer coffee." language="en"/> <Text text="Ou peut-être préférez-vous le café." language="fr"/> </Caption> </PhotoURL> |
<RoomFeatures> | Optional | <RoomFeatures> |
Zawiera informacje o funkcjach pokoju. |
<RoomID> | Required | string | Unikalny identyfikator pokoju. Użyj tego identyfikatora, aby dopasować dane sal do blokad <Result> w aktualizacjach cen. Więcej informacji znajdziesz w artykule Metadane pakietu sal. Korzystając z tego identyfikatora, możesz też odwoływać się do definicji pokoju wspólnego w pojedynczej wiadomości transakcji podczas definiowania wbudowanych danych pokojów. |
Przykłady
Dane o pokojach
Ten przykład definiuje dane pokoju:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>5440OF</RoomID>
<Name>
<Text text="Single King Bed Room" language="en"/>
<Text text="Simple Lit de Roi" language="fr"/>
</Name>
<Description>
<Text text="One king bed with pillowtop mattresses, 300-thread-count linens,
and down comforters (bedspreads). City view. 300 square feet. Desk with
rolling chair. Multi-line phone with voice mail. Cable/satellite TV with
complimentary HBO and pay movies." language="en"/>
<Text text="Un très grand lit avec matelas à plateau-coussin, ..." language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Bathroom View" language="en"/>
<Text text="La salle de baines" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Capacity>4</Capacity>
</RoomData>
</PropertyDataSet>
</Transaction>
Metadane pokoju i pakietu
Ten przykład określa metadane pokoju i pakietu:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>180054</Property>
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Bed Room" language="en"/>
<Text text="Chambre single" language="fr"/>
</Name>
<Description>
<Text text="Non-smoking" language="en"/>
<Text text="Pas de fumiers" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
</RoomData>
<PackageData>
<PackageID>P54321</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
<Text text="Avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Includes a delightful array of jams and jellies." language="en"/>
<Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
</Description>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
</PropertyDataSet>
</Transaction>
Pakiety pokojów
Ten przykład określa metadane pokoju i pakietu w przypadku wielu pakietów pomieszczeń:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<!-- A transaction message with room types result. -->
<PropertyDataSet>
<Property>12345</Property>
<RoomData>
<RoomID>single</RoomID>
<Name>
<Text text="Single room" language="en"/>
<Text text="Chambre simple" language="fr"/>
</Name>
<Description>
<Text text="A single room" language="en"/>
<Text text="Le chambre simple" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<PhotoURL>
<URL>http://www.foo.com/static/bar/image1235.jpg</URL>
</PhotoURL>
<Capacity>2</Capacity>
</RoomData>
<RoomData>
<RoomID>double</RoomID>
<Name>
<Text text="Double room" language="en"/>
<Text text="Chambre double" language="fr"/>
</Name>
<Occupancy>1</Occupancy>
</RoomData>
<PackageData>
<PackageID>refundbreakfast</PackageID>
<Name>
<Text text="Refundable Room with Breakfast" language="en"/>
<Text text="Chambre remboursable avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Continental Breakfast" language="en"/>
<Text text="Petit déjeuner continental" language="fr"/>
</Description>
<ChargeCurrency>hotel</ChargeCurrency>
<Refundable available="1" refundable_until_days="3"/>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
<PackageData>
<PackageID>prepaid</PackageID>
<Name>
<Text text="Nonrefundable" language="en"/>
<Text text="Non remboursable" language="fr"/>
</Name>
<Description>
<Text text="Blah blah blad" language="en"/>
<Text text="Le blah blah blad" language="fr"/>
</Description>
<Occupancy>2</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="0"/>
</PackageData>
</PropertyDataSet>
</Transaction>
<RoomFeatures>
Określa elementy znalezione w pokoju.
Element <RoomFeatures>
występuje w hierarchii XML komunikatu transakcji w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<RoomFeatures>
Składnia
Element <RoomFeatures>
ma taką składnię:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <PropertyDataSet ... > ... <RoomData> <RoomFeatures> <JapaneseHotelRoomStyle>[western|japanese|japanese_western]</JapaneseHotelRoomStyle> <Beds> <Bed size="[single|semi_double|double|queen|king]"> <Width unit="cm" number="width"/> <Length unit="cm" number="length"/> </Bed> <!-- Include with any additional beds. --> </Beds> <Suite/> <Capsule/> <Roomsharing>[shared|private]</Roomsharing> <Outdoor/> <MobilityAccessible/> <Smoking>[smoking|non_smoking]</Smoking> <BathAndToilet relation="[together|separate]"> <Bath bathtub="[false|true]" shower="[false|true]"/> <Toilet electronic_bidet="[false|true]" mobility_accessible="[false|true]"/> </BathAndToilet> <OpenAirBath/> <AirConditioning/> <Balcony/> <Views> <!-- (Optional) Defines the type of views from the room. --> <!-- Example: <OceanView/> --> </Views> </RoomFeatures> ... </RoomData> ... </PropertyDataSet> </Transactions>
Atrybuty
Element <RoomFeatures>
nie ma atrybutów.
Elementy potomne
Element <RoomFeatures>
ma te elementy podrzędne:
Element podrzędny | Wymagana? | Typ | Opis |
---|---|---|---|
<JapaneseHotelRoomStyle> | Optional | enum | Wskazuje styl japońskiego pokoju hotelowego. Prawidłowe wartości to:
|
<Beds> | Optional | Object | Zawiera tyle elementów typu <Bed> , ile jest w sali. Pamiętaj, że japońskie futony nie powinny tu być uwzględniane.
Każdy element
<Bed> ma te 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 jest to pokój typu suite. |
<Capsule> | Optional | empty | Podaj ten element, jeśli jest to pokój kapsułowy. |
<Roomsharing> | Optional | enum | Określa, czy pokój jest udostępniany innym osobom, np. właścicielom lub gościom. Prawidłowe wartości to shared i private . |
<Outdoor> | Optional | empty | Wybierz ten element, jeśli jest to pokój hotelowy na świeżym powietrzu, który nie ma stałych ścian, instalacji hydraulicznych ani klimatyzacji. Na przykład pokoje hotelowe nie są przeznaczone do zakwaterowania na świeżym powietrzu, natomiast kempingi, w przypadku których goście zatrzymują się w namiotach, oraz parkingi dla kamperów, do których goście przynoszą swój kamper, znajdują się na świeżym powietrzu. |
<MobilityAccessible> | Optional | empty | Stosuj ten element, jeśli pomieszczenie jest dostosowane do potrzeb osób poruszających się. |
<Smoking> | Optional | enum | Określa, czy jest to pokój dla niepalących czy dla palących. Prawidłowe wartości to non_smoking i smoking . |
<BathAndToilet> | Optional | Object | Zawiera informacje o łazience i toalecie w pokoju.
Ten atrybut to:
Element opcjonalnie przyjmuje 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 | Użyj tego elementu, jeśli pokój ma prywatną łaźnię na świeżym powietrzu. |
<AirConditioning> | Optional | empty | Użyj tego elementu, jeśli pokój jest klimatyzowany. |
<Balcony> | Optional | empty | Użyj tego elementu, jeśli pokój ma balkon lub werandę. |
<Views> | Optional | Object | Możliwe opcje to:
|
Przykłady
JapaneseHotelRoomStyle
nie ma wartości domyślnej. Pominięcie wartości nie powoduje błędu XML, ale wizytówka nie wyświetla się w wynikach wyszukiwania, gdy użytkownik filtruje według stylu pokoju lub łóżek.
2 łóżka pojedyncze
Poniższy przykład pokazuje, jak używać atrybutu <RoomFeatures>
:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>RoomID_1</RoomID>
<RoomFeatures>
<JapaneseHotelRoomStyle>western</JapaneseHotelRoomStyle>
<Beds> <!-- Two single beds -->
<Bed size="single">
<Width unit="cm" number="97"/>
<Length unit="cm" number="195"/>
</Bed>
<Bed size="single">
<Width unit="cm" number="97"/>
<Length unit="cm" number="195"/>
</Bed>
</Beds>
<Suite/>
<Capsule/>
<Roomsharing>private</Roomsharing>
<Outdoor/>
<MobilityAccessible/>
<Smoking>non_smoking</Smoking>
<BathAndToilet relation="separate">
<Bath bathtub="1" shower="1"/>
<Toilet electronic_bidet="1" mobility_accessible="1"/>
</BathAndToilet>
<OpenAirBath/>
<AirConditioning/>
<Balcony/>
<Views>
<LakeView/>
<MarinaView/>
<BeachView/>
<ForestView/>
<MountainView/>
<NatureView/>
</Views>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
2 łóżka podwójne
Poniżej znajdziesz przykład pokoju w stylu western
z 2 łóżkami double
w stylu japońskim.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>RoomID_1</RoomID>
<RoomFeatures>
<JapaneseHotelRoomStyle>western</JapaneseHotelRoomStyle>
<Beds> <!-- Two double beds-->
<Bed size="double"></Bed>
<Bed size="double"></Bed>
</Beds>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
Japoński styl bez łóżka
Poniżej znajdziesz przykład pokoju w stylu japońskim bez łóżka. W pokoju typu japanese
nie są wymagane informacje o łóżku.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>RoomID_1</RoomID>
<RoomFeatures>
<JapaneseHotelRoomStyle>japanese</JapaneseHotelRoomStyle>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
Japoński western z łóżkiem
Poniżej znajdziesz przykład pokoju w stylu japanese_western
z łóżkiem o rozmiarze king
.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>RoomID_1</RoomID>
<RoomFeatures>
<JapaneseHotelRoomStyle>japanese_western</JapaneseHotelRoomStyle>
<Beds>
<Bed size="king"></Bed>
</Beds>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
Jeśli partner nie ma informacji o liczbie łóżek w japanese_western
pokoju, skorzystaj z tego przykładu:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2023-07-23T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<RoomData>
<RoomID>RoomID_1</RoomID>
<RoomFeatures>
<JapaneseHotelRoomStyle>japanese_western</JapaneseHotelRoomStyle>
</RoomFeatures>
</RoomData>
</PropertyDataSet>
</Transaction>
<PackageData>
Definiuje niezależne od planu podróży metadane dotyczące pakietów pokojów w obiekcie. Ten element zawiera informacje powiązane z partnerem i hotelem, ale nie z planem podróży. Celem jest jednorazowe zdefiniowanie wszystkich danych nieplanowanych i odwoływanie się do nich w danych planu podróży.
Element <PackageData>
występuje w hierarchii XML komunikatu transakcji w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Element <PackageData>
jest podobny do elementu <RoomData>
, ale opisuje właściwości ceny i warunki, które nie są częścią opisu fizycznego pokoju. Użycie kombinacji atrybutów <RoomData>
i <PackageData>
pozwala podać szczegółowe informacje o pakietach pokojów i funkcjach związanych z cenami. W przypadku pokoi, które nie są częścią pakietu, wpisz tylko <RoomData>
.
Elementy <RoomData>
i <PackageData>
możesz zdefiniować dla tego samego pokoju lub zestawu pokoi. Gdy Google wyświetli ten pokój lub pakiet w wynikach wyszukiwania, będzie zawierać opisy obu tych obiektów rozdzielone łącznikiem.
Jeśli zaktualizujesz pojedynczy element <PackageData>
danej usługi, musisz też zaktualizować wszystkie jej elementy <PackageData>
i <RoomData>
.
Każdy symbol <PropertyDataSet>
będzie uznawany za wszystkie dane o usłudze i zastępuje wszystkie dotychczasowe dane.
Więcej informacji znajdziesz w artykule Metadane pakietu sal.
Składnia
Element <PackageData>
ma taką składnię:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
<PropertyDataSet ... >
<PackageData>
<PackageID>package_ID</PackageID>
<Name>
<Text text="package_name" language="language_code"/>
...
</Name>
<Description>
<Text text="package_description" language="language_code"/>
...
</Description>
<Refundable available="[false|true]" refundable_until_days="number_of_days"
refundable_until_time="time"/>
<ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency>
<Occupancy>max_number_of_intended_occupants</Occupancy>
<OccupancyDetails><!-- optional info about the types of guests,
whether adults or children --></OccupancyDetails>
<!-- For these next 3 elements, boolean_value can be 0/1 or true/false -->
<BreakfastIncluded>boolean_value</BreakfastIncluded>
<InternetIncluded>boolean_value</InternetIncluded>
<ParkingIncluded>boolean_value</ParkingIncluded>
<PhotoURL>
<Caption>
<Text text="photo_description" language="language_code"/>
...
</Caption>
<URL>photo_location</URL>
</PhotoURL>
...
<Meals>
<Breakfast
included="[true|false]" buffet="[true|false]"
in_room="[true|false]" in_private_space="[true|false]"/>
<Dinner
included="[true|false]" buffet="[true|false]"
in_room="[true|false]" in_private_space="[true|false]"/>
</Meals>
<CheckinTime>checkin_time</CheckinTime>
<CheckoutTime>checkout_time</CheckoutTime>
<MembershipBenefitsIncluded>
<ProgramName>
<Text language="en" text="Special Rewards">
</ProgramName>
<ProgramLevel>
<Text language="en" text="Platinum">
</ProgramLevel>
</MembershipBenefitsIncluded>
<OnPropertyCredit>
<Amount currency="USD">123.45</Amount>
</OnPropertyCredit>
</PackageData>
<!-- a PackageID with a MilesIncluded
rate feature -->
<PackageData>
<PackageID>room_with_miles</PackageID>
<Name>
<Text text="Room with Bundled Miles" language="en">
</Name>
<ChargeCurrency>hotel </ChargeCurrency>
<MilesIncluded>
<NumberOfMiles>1000 </NumberOfMiles>
<Provider>
<Text language="en" text="United Airlines">
</Provider>
</MilesIncluded>
</PackageData>
...
...
</PropertyDataSet>
...
</Transaction>
Atrybuty
Element <PackageData>
nie ma atrybutów.
Elementy potomne
Element <PackageData>
ma te elementy podrzędne:
Element podrzędny | Wymagana? | Typ | Opis |
---|---|---|---|
<BreakfastIncluded> | Optional | boolean | Określa, czy ten pakiet obejmuje śniadanie w cenie.
Prawidłowe wartości to 0 (lub false ) i 1 (lub true ).
Zalecamy używanie |
<ChargeCurrency> | Optional | enum | Kiedy i gdzie użytkownik płaci za rezerwację. Ten element ma tę samą składnię co <ChargeCurrency> w <Result> .
Wartością domyślną jest |
<CheckinTime> | Optional | Time | Najwcześniejsza godzina zameldowania. Godzina musi być mniejsza niż 24:00 według czasu lokalnego w hotelu. |
<CheckoutTime> | Optional | Time | Najpóźniejszy możliwy czas wymeldowania według lokalnego czasu hotelu. |
<Description> | Optional | Object | Szczegółowy opis pakietu. Ten element powinien zawierać informacje, które nie zostały opisane przez inne elementy ani element <Name> . W opisie pokoju nie używaj samych wielkich liter.
Element <Description> <Text text="Two breakfast buffet certificates for each night of stay." language="en"/> <Text text="Deux certificats petit-déjeuner buffet pour chaque nuit de séjour." language="fr"/> </Description> |
<InternetIncluded> | Optional | boolean | Jeśli pakiet obejmuje bezpłatny dostęp do internetu, w pozostałych pakietach nie obejmuje tego udogodnień. Nie ustawiaj tego elementu w przypadku pakietów pokojowych w hotelach, w których wszystkie pokoje mają bezpłatny dostęp do internetu. Ten element nie dotyczy przewodowego i bezprzewodowego internetu w pokoju, które nie są dostępne w pokojach dla gości. Prawidłowe wartości to 0 (lub false ) i 1 (lub true ).
|
<Meals> | Optional | Object | Zawiera informacje o posiłkach w tej paczce.
Element
Atrybuty opcjonalne są używane tylko wtedy, gdy Aby filtry posiłków ( |
<Name> | Required | string | Nazwa pakietu. Ta wartość powinna być zgodna z informacjami wyświetlanymi na stronie docelowej hotelu. Nie ustawiaj wartości tego elementu na wielkie litery.
Ten element przyjmuje pojedynczy element podrzędny ( <Name> <Text text="Bed and Breakfast" language="en"/> <Text text="Lit et petit déjeuné" language="fr"/> </Name> |
<Occupancy> | Optional | integer | Maksymalna liczba gości, dla których przeznaczony jest pakiet pokoi.
Na przykład duży apartament może pomieścić do 6 osób, ale jest przeznaczony tylko dla 4 osób.
Ta wartość nie może być większa od wartości elementu Wartość Jeśli podasz ten element zarówno w polu Uwaga: <Occupancy> może towarzyszyć atrybut <OccupancyDetails> ,który określa rodzaj gości (dorośli lub dzieci). Składnia i opis elementów podrzędnych znajdziesz <OccupancyDetails> .
|
<PackageID> | Required | string | Unikalny identyfikator pakietu. Użyj tego identyfikatora, aby dopasować dane pakietu pokoi do blokad Korzystając z tego identyfikatora, możesz też odwoływać się do wspólnej definicji pakietu pokoi używanej w pojedynczej wiadomości transakcji podczas definiowania wbudowanych danych pakietu pokoi. |
<ParkingIncluded> | Optional | boolean | Określa, czy pakiet pokoi obejmuje wliczony w cenę parking, jeśli parking w innym przypadku byłby płatną usługą w tym hotelu. Nie określaj wartości tego elementu w przypadku hotelu z bezpłatnym parkingiem.
Prawidłowe wartości to |
<PhotoURL> | Optional | Object | (Tak samo jak <PhotoURL> w <RoomData> , ale w przypadku opakowania (np. zdjęć posiłków).
|
<Refundable> | Optional | Object | Umożliwia wyświetlanie informacji o cenie jako objętej pełnym zwrotem lub bezpłatne anulowanie. Jeśli jej nie podasz, nie pojawią się żadne informacje o zwrocie środków.
Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result> . Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData> . Ceny podlegające zwrotom mogą być też wyróżnione za pomocą alternatywnych opcji bez konieczności bezpośredniego modyfikowania schematu wiadomości transakcji. Dowiedz się więcej o tych zasadach dotyczących zwrotów.
Poniższy przykład pokazuje element <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Uwaga: zalecamy skonfigurowanie wszystkich atrybutów. Jeśli nie ustawisz co najmniej jednego atrybutu, pojawi się komunikat z ostrzeżeniem o stanie pliku danych. Jeśli nie ustawisz żadnych atrybutów, stawka nie będzie wyświetlana jako podlegająca zwrotowi. Te atrybuty:
Podczas ustawiania atrybutów pamiętaj o tych kwestiach:
|
<MembershipBenefits |
Optional | boolean | Cena uwzględnia korzyści ze statusu Elite za pobyt. Zawiera te parametry:
|
<CarRentalIncluded> | Optional | boolean | Cena obejmuje bezpłatne wypożyczenie samochodu na czas pobytu. |
<MilesIncluded>> | Optional | boolean | Cena obejmuje mile w ramach programu lojalnościowego linii lotniczej. Dostępne parametry:
|
<OnPropertyCredit> | Optional | boolean | W cenę wliczone są środki do wykorzystania na terenie obiektu (żywność i wyżywienie, ośrodek wypoczynkowy, spa itp.). Parametr:
|
<AirportTransportationIncluded> | Optional | Object | Cena obejmuje bezpłatny transport z pobliskiego lotniska i z powrotem. Opcjonalny atrybut direction określa kierunek transportu. Prawidłowe wartości to:
from – transport z lotniska do miejsca zakwaterowania zapewniany. Jest to wartość domyślna, jeśli nie określono kierunku.
to : zapewnia transport na lotnisko.
round_trip : zapewniany jest transport z lotniska i na lotnisko.
|
Przykłady
Pakiet z pokojem jednoosobowym
Poniższy przykład definiuje pakiet z pokojem dla 2 osób (1 dorosły i 1 dziecko) obejmujący śniadanie:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<PackageData>
<Occupancy>2</Occupancy>
<OccupancyDetails>
<NumAdults>1</NumAdults>
<Children>
<Child age="17"/>
</Children>
</OccupancyDetails>
<PackageID>P54321</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
<Text text="Avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Two certificates for continental
breakfast will be provided." language="en"/>
<Text text="Deux certificats pour le petit déjeuner
continental seront fournis." language="fr"/>
</Description>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
</PropertyDataSet>
</Transaction>
Metadane pokoju i pakietu
Ten przykład określa metadane pokoju i pakietu:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>180054</Property>
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Bed Room" language="en"/>
<Text text="Chambre single" language="fr"/>
</Name>
<Description>
<Text text="Non-smoking" language="en"/>
<Text text="Pas de fumiers" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
</RoomData>
<PackageData>
<PackageID>P54321</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
<Text text="Avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Includes a delightful array of jams and jellies." language="en"/>
<Text text="Comprend une délicieuse gamme de confitures et gelées." language="fr"/>
</Description>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
</PropertyDataSet>
</Transaction>
Pakiety pokojów
Ten przykład określa metadane pokoju i pakietu w przypadku wielu pakietów pomieszczeń:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<!-- A transaction message with room types result. -->
<PropertyDataSet>
<Property>12345</Property>
<RoomData>
<RoomID>single</RoomID>
<Name>
<Text text="Single room" language="en"/>
<Text text="Chambre simple" language="fr"/>
</Name>
<Description>
<Text text="A single room" language="en"/>
<Text text="Le chambre simple" language="fr"/>
</Description>
<PhotoURL>
<Caption>
<Text text="Living area" language="en"/>
<Text text="Le chambre" language="fr"/>
</Caption>
<URL>http://www.foo.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<PhotoURL>
<URL>http://www.foo.com/static/bar/image1235.jpg</URL>
</PhotoURL>
<Capacity>2</Capacity>
</RoomData>
<RoomData>
<RoomID>double</RoomID>
<Name>
<Text text="Double room" language="en"/>
<Text text="Chambre double" language="fr"/>
</Name>
<Occupancy>1</Occupancy>
</RoomData>
<PackageData>
<PackageID>refundbreakfast</PackageID>
<Name>
<Text text="Refundable Room with Breakfast" language="en"/>
<Text text="Chambre remboursable avec le petit déjeuner" language="fr"/>
</Name>
<Description>
<Text text="Continental Breakfast" language="en"/>
<Text text="Petit déjeuner continental" language="fr"/>
</Description>
<ChargeCurrency>hotel</ChargeCurrency>
<Refundable available="1" refundable_until_days="3"/>
<BreakfastIncluded>1</BreakfastIncluded>
</PackageData>
<PackageData>
<PackageID>prepaid</PackageID>
<Name>
<Text text="Nonrefundable" language="en"/>
<Text text="Non remboursable" language="fr"/>
</Name>
<Description>
<Text text="Blah blah blad" language="en"/>
<Text text="Le blah blah blad" language="fr"/>
</Description>
<Occupancy>2</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="0"/>
</PackageData>
</PropertyDataSet>
</Transaction>
Pakiet pokojów i ceny
Ten przykład określa metadane pokoju i pakietu w przypadku pakietu pokoi z funkcjami dotyczącymi ceny:
<Transaction timestamp="2010-04-24T20:44:56-04:00" id="TXNID">
<PropertyDataSet>
<Property>12345</Property>
<RoomData>
...
</RoomData>
<!-- definitions of PackageData types including rate features -->
<PackageData>
<PackageID>room_with_addl_benefits</PackageID>
<Name>
<Text text="Acme Hotels 2017 Promotion Package" language="en"/>
</Name>
<ChargeCurrency>hotel</ChargeCurrency>
<BreakfastIncluded>1</BreakfastIncluded>
<MembershipBenefitsIncluded>
<ProgramName>
<Text language="en" text="Marriott Rewards"/>
</ProgramName>
<ProgramLevel>
<Text language="en" text="Platinum"/>
</ProgramLevel>
</MembershipBenefitsIncluded>
<OnPropertyCredit>
<Amount currency="USD">123.45</Amount>
</OnPropertyCredit>
</PackageData>
<PackageData>
<PackageID>room_with_miles</PackageID>
<Name>
<Text text="Room with Bundled Miles" language="en"/>
</Name>
<ChargeCurrency>hotel</ChargeCurrency>
<MilesIncluded>
<NumberOfMiles>1000</NumberOfMiles>
<Provider>
<Text language="en" text="United Airlines"/>
</Provider>
</MilesIncluded>
<AirportTransportationIncluded direction="from"/>
</PackageData>
</PropertyDataSet>
<!-- The actual list of prices -->
<Result>
…
</Result>
</Transaction>
Posiłki i zdjęcia
Poniższy przykład zawiera metadane dotyczące pokoju i pakietu posiłków, zdjęć oraz godzin zameldowania i wymeldowania:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<PackageData>
<PackageID>PackageID_1</PackageID>
<Name>
<Text text="Meals Included" language="en"/>
</Name>
<PhotoURL>
<Caption>
<Text text="Breakfast" language="en"/>
<Text text="朝食" language="ja"/>
</Caption>
<URL>http://example.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Meals>
<!-- Guests can choose to have breakfast in their room or in another
space to avoid contact with other guests. -->
<Breakfast included="1" in_room="1" in_private_space="1"/>
<Dinner included="1" buffet="1"/>
</Meals>
<CheckinTime>15:00</CheckinTime>
<CheckoutTime>11:00</CheckoutTime>
</PackageData>
</PropertyDataSet>
</Transaction>
Śniadanie
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<PackageData>
<PackageID>PackageID_1</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
</Name>
<PhotoURL>
<Caption>
<Text text="Breakfast" language="en"/>
<Text text="朝食" language="ja"/>
</Caption>
<URL>http://example.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Meals>
<Breakfast included="true"/>
<!-- Dinner not included needs to be explicitly specified -->
<Dinner included="false"/>
</Meals>
<CheckinTime>15:00</CheckinTime>
<CheckoutTime>11:00</CheckoutTime>
</PackageData>
</PropertyDataSet>
</Transaction>
<Result>
Kontener do aktualizacji cen i dostępności w wiadomości <Transaction>
.
Element <Result>
występuje w hierarchii XML komunikatu transakcji w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Użyj narzędzia <Result>
, aby ustawiać lub aktualizować ceny za pokoje i określać dostępne zasoby reklamowe. Elementy zdefiniowane w tym elemencie zazwyczaj odnoszą się do niezależnych od planu podróży metadanych dotyczących pomieszczenia lub pakietu (np. opisu lub zestawu udogodnień) zdefiniowanych w <PackageData>
i <RoomData>
.
Wiadomości „Transakcje” z aktualizacją cen są zwykle wysyłane bardzo często. To, jak i jak często będziesz to robić, zależy od trybu wyświetlania.
Aby usunąć plany podróży, w wiadomości dotyczącej transakcji możesz użyć polecenia <Result>
zgodnie z opisem w sekcji Usuwanie zasobów reklamowych.
Więcej informacji o używaniu wiadomości o transakcjach do aktualizowania cen i dostępności znajdziesz w artykule Dodawanie i aktualizowanie asortymentu.
Pojedyncza wiadomość dotycząca transakcji może zawierać dowolną liczbę elementów <Result>
, o ile jej rozmiar nie przekracza 100 MB.
Składnia
Element <Result>
ma taką składnię:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> <!-- Required --> <Property>hotel_ID</Property> <!-- Required --> <Checkin>YYYY-MM-DD</Checkin> <!-- Required --> <Nights>number_of_nights</Nights> <Baserate currency="currency_code">price</Baserate> <!-- Only required when <Baserate> contains a real price --> <Tax currency="currency_code">tax_amount</Tax> <!-- Only required when <Baserate> contains a real price --> <OtherFees currency="currency_code">fee_amount</OtherFees> <Refundable available="[false|true]" refundable_until_days="number_of_days" refundable_until_time="time"/> <RoomID>room_ID</RoomID> <PackageID>package_ID</PackageID> <ExpirationTime>expiration_time</ExpirationTime> <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency> <Occupancy>max_number_of_intended_occupants</Occupancy> <!-- For Baserate, occupancy value must be greater than or equal to 2. If a value is not provided for occupancy, it defaults to 2. --> <OccupancyDetails>occupancy_info</OccupancyDetails> <Rates>...</Rates> <RoomBundle>...</RoomBundle> <AllowablePointsOfSale> <PointOfSale id="landing_page_identifier"/> ... </AllowablePointsOfSale> <Custom[1-5]>custom_value</Custom[1-5]> </Result> ... </Transaction>
Atrybuty
Element <Result>
ma te atrybuty:
Atrybut | Wymagana? | Typ | Opis |
---|---|---|---|
mergeable | Optional | boolean | Domyślnie nowe ceny dla określonej pary hotelu i planu podróży zastępują wszystkie poprzednie (niewygasłe) ceny znajdujące się w pamięci podręcznej Google. Atrybut scalany pozwala przechowywać dodatkowe ceny w pamięci podręcznej Google bez usuwania poprzednich informacji o cenach. Zapytanie o cenę w czasie rzeczywistym z odpowiedziami kontekstowymi zawsze ma ten atrybut ustawiony na true (niezależnie od odpowiedzi w wiadomości dotyczącej transakcji). |
Elementy potomne
Element <Result>
ma te elementy podrzędne:
Element podrzędny | Wymagana? | Typ | Opis |
---|---|---|---|
<AllowablePointsOfSale> | Optional | Object | Co najmniej jedna strona docelowa odpowiednia dla
hotelu. Strona docelowa to witryna, która może obsługiwać proces rezerwacji dla użytkownika. Aby wyraźnie uwzględnić konkretną stronę docelową (i wykluczyć inne), dodaj w pliku stron docelowych co najmniej 1 element <AllowablePointsOfSale> pasujący do atrybutu id elementu <PointOfSale> .
Jeśli nie umieścisz tego elementu, wszystkie strony docelowe zdefiniowane w pliku stron docelowych będą mogły być wykorzystane do rezerwacji sali. Więcej informacji znajdziesz w artykule o składni plików stron docelowych. |
<Baserate> | Optional | float | Cena pokoju za pobyt. Wartość tego elementu powinna odzwierciedlać:
Jeśli sala jest niedostępna w planie podróży, pole Aby usunąć pakiet pokoi, wykonaj czynności opisane w artykule Usuwanie pakietu pokoi. Pole <Baserate currency="USD">1200.40</Baserate> Element
|
<ChargeCurrency> | Optional | enum | Kiedy i gdzie użytkownik płaci za rezerwację. Tego elementu można użyć w wiadomości o transakcji w elemencie <Result> w przypadku ceny hotelu lub w bloku <PackageData> w przypadku pakietu pokoi.
Prawidłowe wartości to:
Wartością domyślną jest |
<Checkin> | Required | Date | Data zameldowania w planie podróży podana w formacie Data. Kombinacja elementu <Nights> i elementu <Checkin> tworzy plan podróży. |
<Custom[1‑5]> | Optional | string | Określa pole niestandardowe, którego możesz używać do przekazywania dodatkowych danych związanych z hotelem. Możesz przekazać maksymalnie 5 wartości niestandardowych o tych nazwach elementów:
Elementy Elementy <Custom> zawarte w elemencie |
<ExpirationTime> | Optional | DateTime | Data i godzina, w której uznaliśmy, że cena wygasła (co najmniej 3 godziny).
Zalecamy niepodawanie sygnatur czasowych wygaśnięcia, jeśli nie ma to znaczenia dla struktury cen. Google nie wyświetla cen, które wygasły, a każdy plan podróży, którego cena straciła ważność, będzie kwalifikować się do zapytań o ceny w czasie rzeczywistym. |
<Nights> | Required | integer | Liczba nocy w planie podróży. Wartość elementu <Nights> musi być dodatnią liczbą całkowitą.
Kombinacja właściwości <Nights> i <Checkin> tworzy plan podróży. |
<OtherFees> | Optional | float | Opłaty inne niż stawka podstawowa i podatki, które mają wpływ na ostateczną cenę pokoju. Element <OtherFees> przyjmuje pojedynczy wymagany atrybut currency , który określa trzyliterowy kod waluty używany do naliczania opłat. Na przykład: USD .
Element |
<Occupancy> | Optional | integer | Określa maksymalną dozwoloną liczbę osób w przypadku tej ceny.
Gdy <Occupancy> pojawia się bezpośrednio pod polem <Result> , musi zawierać wartość 2 lub większą. <Occupancy> może towarzyszyć atrybut <OccupancyDetails> , który określa rodzaj gości (dorośli lub dzieci). Jeśli nie podasz typów gości, zakładamy, że są to osoby dorosłe. Informacje o składni i opisie elementów podrzędnych znajdziesz na stronie <OccupancyDetails> . Jeśli nie podano elementu <Occupancy> , domyślnie jest to 2 .
Uwaga: skontaktuj się z zespołem pomocy, aby włączyć funkcję wysyłania innych niż podwójne ceny za obłożenie. |
<PackageID> | Optional | string | Unikalny identyfikator pakietu służący do zmapowania go na wstępnie zdefiniowane dane pakietu. Służy również do wypełniania zmiennej strony docelowej PACKAGE-ID. Więcej informacji znajdziesz w metadanych pakietu sal. |
<Property> | Required | string | Identyfikator hotelu, którego dotyczą powiązane dane (cena, plan podróży, pakiet pokoi lub metadane). Wartość tego elementu musi być ciągiem znaków. Wartość tego elementu musi odpowiadać wartości atrybutu <id> produktu zdefiniowanego w pliku danych z listą hoteli.
|
<Rates> | Optional | <Rates> |
Kontener na co najmniej 1 blok <Rate> . Każdy obiekt <Rate> w obiekcie <Rates> określa inną cenę dla kombinacji pokoju i planu podróży.
Użyj elementu Uwaga: w |
<Refundable> | Optional | Object | Umożliwia wyświetlanie informacji o cenie jako objętej pełnym zwrotem lub bezpłatne anulowanie. Jeśli jej nie podasz, nie pojawią się żadne informacje o zwrocie środków.
Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result> . Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData> . Ceny podlegające zwrotom mogą być też wyróżnione za pomocą alternatywnych opcji bez konieczności bezpośredniego modyfikowania schematu wiadomości transakcji. Dowiedz się więcej o zasadach dotyczących zwrotów.
Poniższy 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 nie ustawisz co najmniej jednego atrybutu, pojawi się komunikat z ostrzeżeniem o stanie pliku danych. Jeśli nie ustawisz żadnych atrybutów, stawka nie będzie wyświetlana jako podlegająca zwrotowi. Te atrybuty:
Podczas ustawiania atrybutów pamiętaj o tych kwestiach:
|
<RoomBundle> | Optional | <RoomBundle> |
Kontener na informacje o fizycznych opisach pokojów, opakowaniu udogodnień oraz zasadach zakupu dotyczących danego hotelu i planu podróży.
Ogólnie rzecz biorąc, tego elementu należy używać do określania cen za pokój podstawowy i różne typy pomieszczeń w tej samej usłudze. Choć opisy pakietów pokoi możesz zdefiniować bezpośrednio, do zdefiniowania tych informacji użyj osobnego komunikatu transakcji. Google będzie przechowywać metadane, aby umożliwić Ci odwoływanie się do nich, zamiast ich powtarzania podczas wszystkich przyszłych aktualizacji cen. |
<RoomID> | Optional | string | Unikalny identyfikator pokoju służący do zmapowania go na wstępnie zdefiniowane dane pokoju. Służy też do wypełniania zmiennej strony docelowej ID sali PARTNERA. Więcej informacji znajdziesz w metadanych pakietu sal. |
<Tax> | Optional | float | Podatki obliczane od ostatecznej ceny pokoju.
Element <Tax> przyjmuje 1 wymagany atrybut currency , który określa 3-literowy kod waluty na potrzeby podatków. Na przykład: USD . Element <Tax> jest wymagany, jeśli <Baserate> ma wartość większą niż 0. |
<Unavailable> | Optional | Object | oznacza, że nie można zarezerwować planu podróży. Służy jako kontener z bardziej szczegółowymi przyczynami niedostępności planu podróży. Pod tagiem <Unavailable> może znajdować się co najmniej jedna z tych przyczyn niedostępności:
|
Przykłady
Przykład dotyczący wielu usług
Ten przykład określa 1 plan podróży i jego ceny dla 2 usług:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>060773</Property>
<RoomID>RoomType101</RoomID>
<PackageID>Package101</PackageID>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">278.33</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="site1"/>
</AllowablePointsOfSale>
</Result>
<Result>
<Property>052213</Property>
<RoomID>RoomType101</RoomID>
<PackageID>Package101</PackageID>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">299.98</Baserate>
<Tax currency="USD">26.42</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="otto"/>
<PointOfSale id="simon"/>
</AllowablePointsOfSale>
</Result>
</Transaction>
W tym przykładzie nie są pokazane informacje o pomieszczeniu, takie jak opis, zdjęcie i podpis, nazwa pokoju i jego pojemność.
Możesz zdefiniować te informacje raz w osobnej wiadomości transakcji przechowywanej przez Google. Możesz się do nich odwoływać przy kolejnych aktualizacjach cen i zasobów reklamowych. Więcej informacji znajdziesz w artykule Metadane pakietu sal.
Przykład z wieloma stawkami
Poniższy przykład określa 1 plan podróży i obiekt z wieloma stawkami za różne liczby osób. Elementu <Rates>
można użyć, aby podać ceny dla wielu stawek za określoną usługę. Ten przykład jest też przydatny w przypadku usług związanych z kwaterami wakacyjnymi (VR):
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2020-07-23T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2021-01-13</Checkin>
<Nights>9</Nights>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>2</Occupancy>
<Rates>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>1</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>3</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>4</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>5</Occupancy>
</Rate>
<Rate>
<Baserate currency="USD">3196.1</Baserate>
<Tax currency="USD">559.49</Tax>
<OtherFees currency="USD">543.34</OtherFees>
<Occupancy>6</Occupancy>
</Rate>
</Rates>
</Result>
</Transaction>
Przykład niedostępny
Ten przykład wskazuje jeden plan podróży, którego dostępności nie udało się pobrać z kanałów niższego szczebla, drugi, który jest poniżej minimalnej liczby noclegów i jest już zarezerwowany w określonych dniach, oraz trzeci, którego obiekt jest zamknięty w dniu przyjazdu, ale otwiera się w trakcie pobytu:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>060773</Property>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Unavailable>
<NotFetched/>
</Unavailable>
</Result>
<Result>
<Property>073313</Property>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Unavailable>
<NoVacancy/>
<MinNightStay value=3/>
</Unavailable>
</Result>
<Result>
<Property>052213</Property>
<Checkin>2018-06-10</Checkin>
<Nights>10</Nights>
<Unavailable>
<PropertyClosed first_open="2018-06-15" first_closed="2018-06-10"/>
</Unavailable>
</Result>
</Transaction>
<Rates>
Kontener na co najmniej 1 blok <Rate>
. Każdy obiekt <Rate>
w usłudze <Rates>
określa inną cenę dla kombinacji pokoju lub planu podróży.
Elementu <Rates>
używaj tylko wtedy, gdy istnieje kilka stawek za ten sam pokój lub plan podróży. Możesz na przykład zdefiniować wiele stawek cen warunkowych, cen prywatnych lub cen warunkowych w pakiecie pokoi.
Element <Rates>
występuje w hierarchii XML komunikatu transakcji w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
(Can also contain<Rates>
) + ...
Wartości ustawione w <Rate>
zastępują wartości związane z cenami w nadrzędnym elemencie <Result>
lub <RoomBundle>
. Jeśli nie zostaną ustawione w <Rate>
, dziedziczą wartość z elementu nadrzędnego. Element <RoomBundle>
jest dziedziczony tylko przez wartość <AllowablePointsofSale>.
Składnia
Element <Rates>
ma taką składnię:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> <Rates> <Rate rate_rule_id="rate_rule_id"> <Baserate currency="currency_code">price</Baserate> <Tax currency="currency_code">tax_amount</Tax> <OtherFees currency="currency_code">fee_amount</OtherFees> <ExpirationTime>expiration_time</ExpirationTime> <Refundable available="[false|true]" refundable_until_days="number_of_days" refundable_until_time="time"/> <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency> <AllowablePointsOfSale> <PointOfSale id="landing_page_identifier"/> </AllowablePointsOfSale> <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <!-- optional info about the types of guests, whether adults or children --></OccupancyDetails> ... <Custom[1-5]>custom_value</Custom[1-5]> </Rate> ... </Rates> </Result> ... </Transaction>
Atrybuty
Element <Rates>
ma te atrybuty:
Atrybut | Wymagana? | Opis |
---|---|---|
rate_rule_id | Optional | W przypadku cen warunkowych ten identyfikator dopasowuje stawkę do definicji w pliku definicji reguły dotyczącej stawek. Limit znaków w tym polu to 40 znaków. |
Elementy potomne
Element <Rates>
ma te elementy podrzędne:
Element podrzędny | Wymagana? | Typ | Opis |
---|---|---|---|
<AllowablePointsOfSale> | Optional | Object | Co najmniej jedna strona docelowa odpowiednia dla
hotelu. Ten element ma tę samą składnię co <AllowablePointsOfSale> w <Result> . |
<Baserate> | Required | float | Cena pokoju za pobyt. Ten element używa tej samej składni co <Baserate> w <Result> .
Uwaga: elementu podrzędnego |
<ChargeCurrency> | Optional | enum | Kiedy i gdzie użytkownik płaci za rezerwację. Ten element używa tej samej składni co <ChargeCurrency> w <Result> . |
<Custom[1‑5]> | Optional | string | Pola niestandardowe, których możesz używać do przekazywania na stronę docelową dodatkowych danych związanych z hotelem. Ten element ma tę samą składnię co <Custom[1‑5]> w <Result> . Każde pole niestandardowe może mieć maksymalnie 200 znaków. Więcej informacji znajdziesz w
plikach stron docelowych.
Jeśli w elemencie |
<ExpirationTime> | Optional | DateTime | Data i godzina, kiedy stawka jest uznawana za nieaktualną. Ten element ma tę samą składnię co <ExpirationTime> w <Result> . |
<Occupancy> | Optional | integer | Określa maksymalną dozwoloną liczbę osób w przypadku tej ceny. Jeśli nie podasz żadnej wartości, zakłada się, że będzie ona taka sama jak stawka nadrzędna.
|
<OtherFees> | Required | float | Opłaty inne niż stawka podstawowa i podatki, które mają wpływ na ostateczną cenę pokoju. Ten element ma tę samą składnię co <OtherFees> w <Result> . |
<Refundable> | Optional | Object | Umożliwia wyświetlanie informacji o cenie jako objętej pełnym zwrotem lub bezpłatne anulowanie. Jeśli jej nie podasz, nie pojawią się żadne informacje o zwrocie środków.
Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result> . Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData> . Ceny podlegające zwrotom mogą być też wyróżnione za pomocą alternatywnych opcji bez konieczności bezpośredniego modyfikowania schematu wiadomości transakcji. Dowiedz się więcej o tych zasadach dotyczących zwrotów.
Poniższy przykład pokazuje element <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Uwaga: zalecamy skonfigurowanie wszystkich atrybutów. Jeśli nie ustawisz co najmniej jednego atrybutu, pojawi się komunikat z ostrzeżeniem o stanie pliku danych. Jeśli nie ustawisz żadnych atrybutów, stawka nie będzie wyświetlana jako podlegająca zwrotowi. Te atrybuty:
Podczas ustawiania atrybutów pamiętaj o tych kwestiach:
|
<Tax> | Required | float | Podatki obliczane od ostatecznej ceny pokoju. Ten element ma tę samą składnię co <Tax> w <Result> . |
Przykłady
Stawka podstawowa i cena warunkowa
Poniższy przykład pokazuje komunikat o transakcji, który zawiera stawkę podstawową i cenę warunkową:
<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2023-04-10</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">200.00</Baserate>
<Tax currency="USD">20.00</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<Rates>
<!-- The rate_rule_id is required when using conditional rates -->
<Rate rate_rule_id="mobile">
<!-- Override base rate and taxes for conditional rates -->
<Baserate currency="USD">180.00</Baserate>
<Tax currency="USD">18.00</Tax>
<!-- NOTE: OtherFees is inherited from the above setting -->
<Custom1>ratecode123</Custom1>
</Rate>
</Rates>
</Result>
</Transaction>
Wiele cen warunkowych
Ten przykład określa stawkę podstawową i kilka cen warunkowych w <RoomBundle>
:
<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2023-04-10</Checkin>
<Nights>2</Nights>
<!-- When Google receives new room bundle information for an itinerary, all
previous room bundle pricing is dropped from Google's cache. Thus, if you
want to delete a specific room bundle from Google's cache, you may do so
by simply not providing that specific room bundle in subsequent transaction
messages. -->
<RoomBundle>
...
<!-- RoomID is required, PackageID is recommended. -->
<RoomID>5</RoomID>
<PackageID>ABC</PackageID>
<!-- Baserate is required. -->
<Baserate currency="USD">275.00</Baserate>
<Tax currency="USD">27.50</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<!-- RatePlanID is optional and represents the unique identifier for a
room and package data combination. We strongly recommend using RatePlanID
as a variable to build your dynamic landing page (formerly Point of Sale)
URL. For details, see Using Variables and Conditions. -->
<RatePlanID>5-ABC</RatePlanID>
<!-- Occupancy is mandatory for RoomBundle elements. -->
<!-- Elements below will get inherited to nested rate elements. -->
<Occupancy>2</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
</OccupancyDetails>
<InternetIncluded>1</InternetIncluded>
<!-- Rate rule "mobile" overrides chargeCurrency, "us_or_gb" doesn't. -->
<ChargeCurrency>web</ChargeCurrency>
<Custom1>ratebasic</Custom1>
<!-- Neither rate overrides Custom2. -->
<Custom2>ratebasic</Custom2>
<Rates>
<Rate rate_rule_id="mobile">
<Baserate currency="USD">258.33</Baserate>
<Tax currency="USD">25.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<!-- The value below overrides ChargeCurrency from roombundle. -->
<ChargeCurrency>hotel</ChargeCurrency>
<!-- The value below overrides Custom1 from roombundle. -->
<Custom1>ratecode321</Custom1>
<!-- Custom2 is inherited from roombundle. -->
</Rate>
<Rate rate_rule_id="us_or_gb">
<Baserate currency="USD">268.33</Baserate>
<Tax currency="USD">26.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<!-- The value below overrides Custom1 from roombundle. -->
<Custom1>ratecode432</Custom1>
<!-- Custom2 is inherited from roombundle. -->
</Rate>
</Rates>
</RoomBundle>
</Result>
</Transaction>
<RoomBundle>
Określa ceny i dostępność pakietów pokojów w elemencie podrzędnym obiektu <Result>
w wiadomości <Transaction>
. Zdefiniuj osobny element
dla każdej kombinacji pakietu lub planu podróży. Aby zdefiniować pakiet i warunki pakietów sal, użyj narzędzia <RoomData>
.
Element <RoomBundle>
występuje w hierarchii XML komunikatu transakcji w tym miejscu:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Więcej informacji znajdziesz w artykule Korzystanie z pakietów pokojów.
Składnia
Element <RoomBundle>
ma taką składnię:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> ... <RoomBundle> <!-- Required unless specified inline under<RoomData>
--> <RoomID>room_ID</RoomID> <!-- Required<PackageData>
--> <PackageID>package_ID</PackageID> <!-- Required --> <Baserate currency="currency_code">price</Baserate> <!-- Required --> <Tax currency="currency_code">taxes</Tax> <!-- Required --> <OtherFees currency="currency_code">other_fees</OtherFees> <Refundable available="[false|true]" refundable_until_days="number_of_days" refundable_until_time="time"/> <!-- Required --> <ChargeCurrency>[deposit|hotel|installments|web]</ChargeCurrency> <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <!-- optional info about the types of guests, whether adults or children --></OccupancyDetails> <BreakfastIncluded>boolean_value</BreakfastIncluded> <InternetIncluded>boolean_value</InternetIncluded> <ParkingIncluded>boolean_value</ParkingIncluded> <RatePlanID>rate_plan_ID</RatePlanID> <Rates>...</Rates> <Custom1>custom_value_1</Custom1> <Custom2>custom_value_2</Custom2> <Custom3>custom_value_3</Custom3> <Custom4>custom_value_4</Custom4> <Custom5>custom_value_5</Custom5> </RoomBundle> ... </Result> </Transaction>
Atrybuty
Element <RoomBundle>
nie ma atrybutów.
Elementy potomne
Element <RoomBundle>
ma te elementy podrzędne:
Element podrzędny | Wymagana? | Typ | Opis |
---|---|---|---|
<Baserate> | Required | float | Określa cenę pakietu pokoi za pobyt. Ten element używa tej samej składni co <Baserate> w <Result> z tym wyjątkiem:
|
<BreakfastIncluded> | Optional | boolean | Określa, czy ten pakiet pokoi obejmuje śniadanie w cenie. |
<ChargeCurrency> | Optional | enum | Kiedy i gdzie użytkownik płaci za rezerwację. Ten element ma tę samą składnię co <ChargeCurrency> w <Result> .
Wartością domyślną jest |
<Custom[1‑5]> | Optional | string | Pola niestandardowe do przekazywania dodatkowych danych na strony docelowe zestawu pokoi. Te elementy mają tę samą składnię co <Custom[1-5]> w <Result> . Obowiązuje limit 200 znaków na pole niestandardowe. Więcej informacji znajdziesz w plikach stron docelowych.
Jeśli w elemencie |
<InternetIncluded> | Optional | boolean | Jeśli pakiet pokoi obejmuje bezpłatny dostęp do internetu, a pozostałe pakiety nie obejmują tego udogodnień, Nie ustawiaj tego elementu w przypadku pakietów pokojowych w hotelach, w których wszystkie pokoje mają bezpłatny dostęp do internetu. Ten element nie dotyczy przewodowego i bezprzewodowego internetu w pokoju, które nie są dostępne w pokojach dla gości. |
<Occupancy> | Required | integer | Określa maksymalną dozwoloną liczbę osób w przypadku tej ceny. Na przykład duży apartament może pomieścić do 6 osób, ale „Pakiet podróżny” tylko dla 2 osób.
Ta wartość nie może być większa od Do definiowania 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 mają wpływ na ostateczną cenę pokoju. Element <OtherFees> przyjmuje pojedynczy wymagany atrybut currency , który określa trzyliterowy kod waluty używany do naliczania opłat. np. USD w przypadku dolara amerykańskiego. |
<PackageID> | Optional (recommended) | string | Unikalny identyfikator danych pakietu. Użyj tego identyfikatora, aby dopasować dane pakietu pokoi do danych wysłanych w <PackageData> . Więcej informacji znajdziesz w metadanych pakietu sal. Korzystając z tego identyfikatora, możesz też odwoływać się do wspólnej definicji pakietu pokoi używanej w pojedynczej wiadomości transakcji podczas definiowania wbudowanych danych pakietu pokoi. |
<ParkingIncluded> | Optional | boolean | Określa, czy pakiet pokoi obejmuje wliczony w cenę parking, jeśli parking w innym przypadku byłby płatną usługą w tym hotelu. Nie określaj wartości tego elementu w przypadku hotelu z bezpłatnym parkingiem.
Prawidłowe wartości to |
<RatePlanID> | Optional | string | Identyfikator abonamentu to unikalny identyfikator kombinacji pomieszczenia i pakietu. Na przykład dla <RoomID> wartości 5 i wartości <PackageID> ABC możesz użyć wartości 5-ABC dla elementu <RatePlanID> . Zdecydowanie zalecamy używanie RatePlanID jako zmiennej do tworzenia dynamicznego adresu URL strony docelowej (dawniej punktu sprzedaży).
Więcej informacji znajdziesz w artykule Korzystanie ze zmiennych i warunków. |
<Rates> | Optional | <Rates> |
Stawki, które zastępują domyślne stawki dla tego pakietu pokoi. Ten element używa tej samej składni co <Rates> w <Result> . |
<Refundable> | Optional | Object | Umożliwia wyświetlanie informacji o cenie jako objętej pełnym zwrotem lub bezpłatne anulowanie. Jeśli jej nie podasz, nie pojawią się żadne informacje o zwrocie środków.
Zasady zwrotów na poziomie <PackageData> zastępują zasady zwrotów na poziomie <Result> . Zasady zwrotów na poziomie <Rates> zastępują zasady zwrotów na poziomie <PackageData> . Ceny podlegające zwrotom mogą być też wyróżnione za pomocą alternatywnych opcji bez konieczności bezpośredniego modyfikowania schematu wiadomości transakcji. Dowiedz się więcej o tych zasadach dotyczących zwrotów.
Poniższy przykład pokazuje element <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Uwaga: zalecamy skonfigurowanie wszystkich atrybutów. Jeśli nie ustawisz co najmniej jednego atrybutu, pojawi się komunikat z ostrzeżeniem o stanie pliku danych. Jeśli nie ustawisz żadnych atrybutów, stawka nie będzie wyświetlana jako podlegająca zwrotowi. Te atrybuty:
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 wysłanych w <RoomData> .
Więcej informacji znajdziesz w
metadanych pakietu pokoi. (Możesz też użyć tego identyfikatora, aby odwołać się do definicji pokoju wspólnego w pojedynczej wiadomości transakcji podczas definiowania wbudowanych danych pokoju). |
<Tax> | Required | float | Podatki obliczane od ostatecznej ceny pokoju.
Element <Tax> przyjmuje 1 wymagany atrybut currency , który określa 3-literowy kod waluty na potrzeby podatków. np. USD w przypadku dolara amerykańskiego. |
Przykłady
Pakiet dla 1 osoby
Poniższy przykład zawiera odpowiedź z pakietem dla 1 osoby.
Gdy użytkownik wybierze 1
w selektorze liczby obłożenia, Google wyświetli najniższą możliwą cenę niezależnie od liczby osób.
Jeśli cena za 1 osobę nie jest dostępna, Google wyświetli najniższą cenę za 2 osoby. Pamiętaj, że ceny za 1 osobę nie są wysyłane w odpowiedzi na zapytania, jeśli plan podróży zawiera ceny dla co najmniej 2 osób.
Ten przykład odwołuje się do wstępnie zdefiniowanych metadanych pokoju i pakietu za pomocą elementów <RoomID>
i <PackageID>
. Aby określić te informacje, użyj elementów <RoomData>
i <PackageData>
.
<!-- Efficient method of defining Room Bundles-->
<!----- Occupancy of 1 example ----->
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="12345678">
<!-- Part1: Define RoomData and PackageData in PropertyDataSet -->
<!-- Note: Once defined it does not have to be repeated for future
Transaction Messages.
PropertyDataSets can also be defined and sent in their own
Transaction Message separately from pricing. Google can be
configured to pull just PropertyDataSets once per day
(or on a predefined frequency). -->
<PropertyDataSet>
<Property>180054</Property>
<!-- Can be reused by multiple Room Bundles -->
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Queen Room - Non-Smoking" language="en"/>
<Text text="Chambre de la Roi Premium - Pas de Fumeurs" language="fr"/>
</Name>
<!-- Room can accommodate up to 4, but package data specifies occupancy
between 1 to 4 -->
<Capacity>4</Capacity>
</RoomData>
<RoomData>
<RoomID>436233</RoomID>
<Name>
<Text text="Premium King Room - Non-Smoking" language="en"/>
<Text text="Chambre de le Roi Premium - Pas de Fumeurs" language="fr"/>
</Name>
<Capacity>4</Capacity>
</RoomData>
<!-- Can be reused by multiple Room Bundles -->
<PackageData>
<PackageID>P11111</PackageID>
<Occupancy>1</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>
<ParkingIncluded>1</ParkingIncluded>
<InternetIncluded>1</InternetIncluded>
</PackageData>
<PackageData>
<PackageID>P54321</PackageID>
<Occupancy>2</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>
<ParkingIncluded>1</ParkingIncluded>
<InternetIncluded>1</InternetIncluded>
</PackageData>
<PackageData>
<PackageID>P12345</PackageID>
<Occupancy>4</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="1" refundable_until_days="1"
refundable_until_time="18:00:00"/>
<ParkingIncluded>1</ParkingIncluded>
<InternetIncluded>1</InternetIncluded>
</PackageData>
</PropertyDataSet>
<!-- Efficient method of defining Room Bundles -->
<!-- Part 2: Reference RoomData and PackageData through ID -->
<Result>
<!-- Single occupancy pricing will be specified in a room bundle below -->
<Property>180054</Property>
<Checkin>2017-10-07</Checkin>
<Nights>2</Nights>
<!-- Base Room Bundle -->
<RoomBundle>
<RoomID>060773</RoomID>
<PackageID>P54321</PackageID>
<Baserate currency="USD">199.99</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RatePlanID>060773-P54321</RatePlanID>
</RoomBundle>
<RoomBundle>
<RoomID>060773</RoomID>
<PackageID>P11111</PackageID>
<!-- Price for 1 ("occupancy") is the lowest price and will be
displayed -->
<Baserate currency="USD">174.99</Baserate>
<Tax currency="USD">22.08</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RatePlanID>060773-P11111</RatePlanID>
</RoomBundle>
<!-- Premium Room Bundle -->
<RoomBundle>
<RoomID>436233</RoomID>
<PackageID>P12345</PackageID>
<!-- Price for 4 ("occupancy"), any eligible room bundle with 1 or more
occupancy will be displayed-->
<Baserate currency="USD">298.88</Baserate>
<Tax currency="USD">42.12</Tax>
<OtherFees currency="USD">10.00</OtherFees>
<RatePlanID>436233-P12345</RatePlanID>
</RoomBundle>
<!-- ..Continue providing all available RoomBundle rates under matched
property for 1 or more occupancies..-->
</Result>
</Transaction>
Co najmniej 2 osoby
Poniższy przykład zdefiniowano odpowiedź zawierającą co najmniej 2 osoby.
Ten przykład odwołuje się do wstępnie zdefiniowanych metadanych pokoju i pakietu za pomocą elementów <RoomID>
i <PackageID>
. Aby określić te informacje, użyj elementów <RoomData>
i <PackageData>
.
<!-- Efficient method of defining Room Bundles-->
<!----- Occupancy of 3 example ----->
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="12345678">
<!-- Efficient method of defining Room Bundles-->
<!-- Part1: Define RoomData and PackageData in PropertyDataSet -->
<PropertyDataSet>
<Property>180054</Property>
<!-- Can be reused by multiple Room Bundles -->
<RoomData>
<RoomID>060773</RoomID>
<Name>
<Text text="Single Queen Room - Non-Smoking" language="en"/>
<Text text="Chambre de la Roi Premium - Pas de Fumeurs" language="fr"/>
</Name>
<!-- Room can accommodate up to 4, but package data specifies occupancy
between 1 to 4 -->
<Capacity>4</Capacity>
</RoomData>
<RoomData>
<RoomID>436233</RoomID>
<Name>
<Text text="Premium King Room - Non-Smoking" language="en"/>
<Text text="Chambre de le Roi Premium - Pas de Fumeurs" language="fr"/>
</Name>
<Capacity>4</Capacity>
</RoomData>
<!-- Can be reused by multiple Room Bundles -->
<PackageData>
<PackageID>P33333</PackageID>
<Occupancy>3</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="1" refundable_until_days="7"
refundable_until_time="18:00:00"/>
<ParkingIncluded>1</ParkingIncluded>
<InternetIncluded>1</InternetIncluded>
</PackageData>
<PackageData>
<PackageID>P12345</PackageID>
<Occupancy>4</Occupancy>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="1" refundable_until_days="1"
refundable_until_time="18:00:00"/>
<ParkingIncluded>1</ParkingIncluded>
<InternetIncluded>1</InternetIncluded>
</PackageData>
</PropertyDataSet>
<Result>
<Property>180054</Property>
<Checkin>2017-10-07</Checkin>
<Nights>2</Nights>
<!-- Efficient method of defining Room Bundles -->
<!-- Part 2: Reference RoomData and PackageData through ID -->
<!-- Base Room Bundle -->
<RoomBundle>
<!-- Baserate above and attributes must match atleast one room bundle
below -->
<RoomID>060773</RoomID>
<PackageID>P33333</PackageID>
<Baserate currency="USD">499.99</Baserate>
<Tax currency="USD">55.12</Tax>
<OtherFees currency="USD">22.00</OtherFees>
</RoomBundle>
<!-- Premium Room Bundle -->
<RoomBundle>
<RoomID>436233</RoomID>
<PackageID>P12345</PackageID>
<!-- Lowest price for 3 ("occupancy"), shown below, will be displayed -->
<Baserate currency="USD">598.88</Baserate>
<Tax currency="USD">62.12</Tax>
<OtherFees currency="USD">30.00</OtherFees>
</RoomBundle>
<!-- ..Continue providing all available RoomBundle rates under matched
property for 2 or more occupancies..-->
</Result>
</Transaction>
Pakiety pokojów
Poniższy przykład pokazuje liczbę obłożenia w wielu pakietach pokoi, aby zademonstrować możliwe ceny za pokoje hostelowe.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction ... >
<Result>
...
<!-- Suite Room Bundle -->
<RoomBundle>
<RoomID>suite1</RoomID>
<PackageID>standard</PackageID>
<Occupancy>2</Occupancy>
<!-- Price for room -->
<Baserate currency="USD">80.00</Baserate>
<Tax currency="USD">5.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RoomData>
<Name>
<Text text="Suite for 2" language="en"/>
</Name>
</RoomData>
</RoomBundle>
<!-- Small Dorm Room Bundle -->
<RoomBundle>
<RoomID>small_dorm</RoomID>
<PackageID>economy</PackageID>
<Occupancy>1</Occupancy>
<!-- Price per bed -->
<Baserate currency="USD">35.00</Baserate>
<Tax currency="USD">3.50</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RoomData>
<Name>
<Text text="1 bed in small dorm" language="en"/>
</Name>
</RoomData>
</RoomBundle>
<!-- Large Dorm Room Bundle -->
<RoomBundle>
<RoomID>large_dorm</RoomID>
<PackageID>economy</PackageID>
<Occupancy>1</Occupancy>
<!-- Price per bed -->
<Baserate currency="USD">20.00</Baserate>
<Tax currency="USD">2.50</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<RoomData>
<Name>
<Text text="1 bed in large dorm" language="en"/>
</Name>
</RoomData>
</RoomBundle>
...
</Result>
</Transaction>
Wiele cen warunkowych
Ten przykład określa stawkę podstawową i kilka cen warunkowych w <RoomBundle>
:
<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2023-05-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2023-04-10</Checkin>
<Nights>2</Nights>
<!-- When Google receives new room bundle information for an itinerary, all
previous room bundle pricing is dropped from Google's cache. Thus, if you
want to delete a specific room bundle from Google's cache, you may do so
by simply not providing that specific room bundle in subsequent transaction
messages. -->
<RoomBundle>
...
<!-- RoomID is required, PackageID is recommended. -->
<RoomID>5</RoomID>
<PackageID>ABC</PackageID>
<!-- Baserate is required. -->
<Baserate currency="USD">275.00</Baserate>
<Tax currency="USD">27.50</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<!-- RatePlanID is optional and represents the unique identifier for a
room and package data combination. We strongly recommend using RatePlanID
as a variable to build your dynamic landing page (formerly Point of Sale)
URL. For details, see Using Variables and Conditions. -->
<RatePlanID>5-ABC</RatePlanID>
<!-- Occupancy is mandatory for RoomBundle elements. -->
<!-- Elements below will get inherited to nested rate elements. -->
<Occupancy>2</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
</OccupancyDetails>
<InternetIncluded>1</InternetIncluded>
<!-- Rate rule "mobile" overrides chargeCurrency, "us_or_gb" doesn't. -->
<ChargeCurrency>web</ChargeCurrency>
<Custom1>ratebasic</Custom1>
<!-- Neither rate overrides Custom2. -->
<Custom2>ratebasic</Custom2>
<Rates>
<Rate rate_rule_id="mobile">
<Baserate currency="USD">258.33</Baserate>
<Tax currency="USD">25.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<!-- The value below overrides ChargeCurrency from roombundle. -->
<ChargeCurrency>hotel</ChargeCurrency>
<!-- The value below overrides Custom1 from roombundle. -->
<Custom1>ratecode321</Custom1>
<!-- Custom2 is inherited from roombundle. -->
</Rate>
<Rate rate_rule_id="us_or_gb">
<Baserate currency="USD">268.33</Baserate>
<Tax currency="USD">26.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<!-- The value below overrides Custom1 from roombundle. -->
<Custom1>ratecode432</Custom1>
<!-- Custom2 is inherited from roombundle. -->
</Rate>
</Rates>
</RoomBundle>
</Result>
</Transaction>
<OccupancyDetails>
<Occupancy>
w wiadomości transakcji określa maksymalną liczbę gości za pokój lub pakiet. <OccupancyDetails>
może zawierać dodatkowe informacje,
np. liczbę i typ gości (dorośli lub dzieci).
Gdy w elemencie <Rates>
w <Result>
lub <RoomBundle>
znajdują się <Occupancy>
i <OccupancyDetails>
, oznacza to, że cena jest ograniczona przez informacje o obłożeniu.
Składnia
Jeśli występuje ciąg <OccupancyDetails>
, jest on zawsze poprzedzony znakiem <Occupancy>
.
Zwróć uwagę na tę składnię:
<?xml version="1.0" encoding="UTF-8"?> <Transaction ... > <Result> ... <Occupancy>max_number_of_intended_occupants</Occupancy> <OccupancyDetails> <NumAdults>number_of_adults</NumAdults> <Children> <Child age=age_of_one_child_guest/> <Child age=age_of_one_child_guest/> </Children> </OccupancyDetails> </Result> </Transaction>
Elementy potomne
Element <OccupancyDetails>
ma te elementy podrzędne:
Element podrzędny | Wymagana? | Typ | Opis |
---|---|---|---|
<NumAdults> | Required | integer | Liczba dorosłych gości. min. 1, maks. 20 r. |
<Children> | Optional | Object | Kontener na co najmniej 1 element <Child> . |
<Child age> | Optional | integer | Maksymalny wiek tego dziecka, na przykład <Child age="17"> . |
Przykłady
Poniższe przykłady pokazują, jak <OccupancyDetails>
może wyglądać w elemencie <Results>
, <RoomBundle>
lub w elemencie podrzędnym <Rates>
.
Odpowiedź dotycząca wyniku
Ten przykład określa 1 plan podróży i cenę jednej usługi w odpowiedzi na zapytanie o cenę w czasie rzeczywistym, w którym użytkownik określił liczbę i rodzaje gości. W tym przypadku <OccupancyDetails>
– 2 dorosłe osoby i 1 dziecko –
zwracane są za <Result>
.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>060773</Property>
<RoomID>RoomType101</RoomID>
<PackageID>Package101</PackageID>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">278.33</Baserate>
<Tax currency="USD">25.12</Tax>
<OtherFees currency="USD">2.00</OtherFees>
<AllowablePointsOfSale>
<PointOfSale id="site1"/>
</AllowablePointsOfSale>
<Occupancy>3</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
<Children>
<Child age="17"/>
</Children>
</OccupancyDetails>
</Result>
</Transaction>
Odpowiedź dotycząca stawek
Ten przykład określa 1 plan podróży i cenę dla 1 osoby dorosłej i 1 dziecka. W tym przypadku <OccupancyDetails>
są zwracane w elemencie <Rates>
elementu <Result>
.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Transaction id="Wtdj8QoQIWcAAbaTGlIAAAC4" timestamp="2018-04-18T11:27:45-04:00">
<Result>
<Property>8251</Property>
<Checkin>2018-06-20</Checkin>
<Nights>1</Nights>
<Baserate currency="USD">62.18</Baserate>
<Tax currency="USD">2.45</Tax>
<OtherFees currency="USD">0.00</OtherFees>
<Rates>
<Rate rate_rule_id="rule-951">
<Occupancy>2</Occupancy>
<OccupancyDetails>
<NumAdults>1</NumAdults>
<Children>
<Child age="17"/>
</Children>
</OccupancyDetails>
<Baserate currency="USD">42.61</Baserate>
<Tax currency="USD">5.70</Tax>
<OtherFees currency="USD">0.00</OtherFees>
<Custom1>abc4</Custom1>
<AllowablePointsOfSale>
<PointOfSale id="yourhotelpartnersite.com"/>
</AllowablePointsOfSale>
</Rate>
</Rates>
</Result>
</Transaction>
Pakiet pokojów
W przykładzie poniżej określono pobyt 2 dorosłych i 1 dziecko na 2 noce i opłata podlegająca zwrotowi. Tutaj <OccupancyDetails>
są widoczne
wewnątrz elementu <RoomBundle>
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-23T16:20:00-04:00" id="42">
<Result>
<Property>6781291</Property>
<Checkin>2017-08-05</Checkin>
<Nights>2</Nights>
...
<RoomBundle>
<RoomID>10291</RoomID>
<RatePlanID>564739</RatePlanID>
<PackageID>564739</PackageID>
<Occupancy>3</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
<Children>
<Child age="17"/>
</Children>
</OccupancyDetails>
<ChargeCurrency>web</ChargeCurrency>
<Refundable available="true" refundable_until_days="1" refundable_until_time="23:59:00" />
<Baserate currency="USD">185.34</Baserate>
<Tax currency="USD">37.06</Tax>
<OtherFees currency="USD">2.22</OtherFees>
</RoomBundle>
</Result>
</Transaction>
Pakiety pokojów
W poniższym przykładzie zdefiniowano wiele stawek <RoomBundle>
, które są przeznaczone tylko dla 2 dorosłych i 2 dzieci. W tym przypadku <OccupancyDetails>
występuje w elemencie <Rates>
elementu <RoomBundle>
.
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<Result>
<Property>1234</Property>
<Checkin>2018-06-10</Checkin>
<Nights>2</Nights>
<Baserate currency="USD">275.00</Baserate>
<Tax currency="USD">27.50</Tax>
<OtherFees currency="USD">0</OtherFees>
<RoomBundle>
<RoomID>5</RoomID>
<PackageID>STD</PackageID>
<Baserate currency="USD">275.00</Baserate>
<Tax currency="USD">27.50</Tax>
<OtherFees currency="USD">0</OtherFees>
<InternetIncluded>1</InternetIncluded>
<ChargeCurrency>web</ChargeCurrency>
<Custom1>ratebasic</Custom1>
<Custom2>ratebasic</Custom2>
<Occupancy>4</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
<Children>
<Child age="17"/>
<Child age="17"/>
</Children>
</OccupancyDetails>
<Rates>
<Rate rate_rule_id="mobile">
<Baserate currency="USD">258.33</Baserate>
<Tax currency="USD">25.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<ChargeCurrency>hotel</ChargeCurrency>
<Custom1>ratecode321</Custom1>
</Rate>
<Rate rate_rule_id="us_or_gb">
<Baserate currency="USD">268.33</Baserate>
<Tax currency="USD">26.83</Tax>
<OtherFees currency="USD">1.00</OtherFees>
<Custom1>ratecode432</Custom1>
</Rate>
</Rates>
</RoomBundle>
</Result>
</Transaction>