На этой странице представлена справочная информация по сообщениям транзакций на основе XML.
<Transaction>
Корневым элементом сообщения «Транзакция» является <Transaction>
. Он представляет собой контейнер для описательной информации о номерах и пакетах, а также о ценах и наличии номеров и пакетов.
Элемент <Transaction>
появляется в следующем месте в иерархии XML-сообщения транзакции:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Сообщения, использующие <Transaction>
в качестве корневого элемента, должны иметь как минимум один дочерний элемент. Сообщения о транзакциях могут иметь любое количество дочерних элементов, при условии, что общий размер сообщения не превышает 100 МБ.
Синтаксис
Элемент <Transaction>
использует следующий синтаксис:
<?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>
Атрибуты
Элемент <Transaction>
имеет следующие атрибуты:
Атрибут | Необходимый? | Тип | Описание |
---|---|---|---|
id | Required | нить | Уникальный идентификатор для каждого сообщения о транзакции. |
partner | Optional | string | Партнёрский счёт, для которого предназначено сообщение о транзакции. Обычно используется, если ваш бэкэнд предоставляет данные о ценах для нескольких партнёрских счётов. Это строковое значение — значение «Партнёрского ключа», указанное на странице настроек счёта в Hotel Center. |
timestamp | Required | DateTime | Момент времени отправки сообщения о транзакции. Любое сообщение, отправленное с отметкой времени в течение предыдущих 24 часов, будет обработано, а те, которые не были отправлены, будут удалены. Сообщения обрабатываются в порядке их |
Дочерние элементы
Элемент <Transaction>
имеет следующие дочерние элементы:
Дочерний элемент | Необходимый? | Тип | Описание |
---|---|---|---|
<PropertyDataSet> | Optional* | <PropertyDataSet> | Описывает конкретную комнату и пакеты комнат. Обычно этот элемент используется в отдельном сообщении о транзакции для определения общих значений для пакетов комнат и сокращения размера сообщений о транзакциях. |
<Result> | Optional* | <Result> | Данные о ценах для программы бронирования номеров или элемент |
* Требуется хотя бы один из <PropertyDataSet> или <Result> . |
Примеры
Данные о комнатах
В следующем примере данные о номере определяются в сообщении транзакции:
<?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>
Данные о ценах
В следующем примере определяются данные о ценах в сообщении о транзакции:
<?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>
Ночные тарифы
В следующем примере определяются данные о ценах на период от 1 до 7 ночей, начиная с 7 июня 2023 года:
<?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>
Базовые и условные ставки
В следующем примере показано сообщение о транзакции, содержащее базовую ставку и условную ставку :
<?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>
Удалить инвентарь
В следующем примере удаляются несколько инвентарей (однодневные пребывания на разные даты) для отеля из инвентаря:
<?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>
Контейнер для информации о номере и пакете (или пакете номеров ) в сообщении <Transaction>
. Значения, заданные в отеле, переопределяют значения, заданные у партнёра. Google хранит эту информацию, чтобы вам не приходилось указывать её каждый раз при отправке обновлений цен.
Элемент <PropertyDataSet>
появляется в следующем месте в иерархии XML-сообщения транзакции:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Более подробную информацию можно найти в метаданных Room Bundle .
Синтаксис
Элемент <PropertyDataSet>
использует следующий синтаксис:
<?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>
Атрибуты
Элемент <PropertyDataSet>
не имеет атрибутов.
Дочерние элементы
Элемент <PropertyDataSet>
имеет следующие дочерние элементы:
Дочерний элемент | Необходимый? | Тип | Описание |
---|---|---|---|
<PackageData> | Optional* | <PackageData> | Описывает пакет номеров. Эти данные связаны с партнером и отелем, но не с маршрутом. Этот элемент похож на <RoomData> , но описывает удобства и условия, которые не являются частью описания физического номера.В обновлениях цен вы ссылаетесь на идентификатор пакета. Более подробную информацию можно найти в метаданных Room Bundle . |
<Property> | Required | string | Идентификатор отеля, к которому относятся связанные данные. Значение этого элемента должно быть строкой, соответствующей идентификатору <id> в вашем ленте списка отелей. |
<RoomData> | Optional* | <RoomData> | Описывает номер. Эти данные связаны с партнером и отелем, но не с маршрутом. В обновлениях цен вы указываете идентификатор номера. |
* Требуется хотя бы один из <PackageData> или <RoomData> . |
Примеры
Данные о номерах и пакетах услуг
В следующем примере показаны данные о комнатах и пакетах в <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>
При отправке информации о ценах и наличии мест для этого номера и пакета номеров вы указываете идентификаторы номера и пакета в своих сообщениях о ценах. Это значительно сокращает размер сообщений и снижает количество ошибок, которые могут возникнуть из-за дублирования данных. Подробнее см. в метаданных пакета номеров .
<RoomData>
Определяет независимые от маршрута метаданные о номерах и, соответственно, о пакетах номеров (поскольку пакеты номеров — это номера с дополнительными удобствами). Используйте <RoomData>
, чтобы сократить повторение описательных данных в вашем потоке цен.
Элемент <RoomData>
появляется в следующем месте в иерархии XML-сообщения транзакции:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Элементы <RoomData>
содержат информацию, связанную с партнером и отелем, но не с маршрутом. Они предназначены для всех данных, не относящихся к маршруту.
Элемент <RoomData>
похож на <PackageData>
, но описывает сам номер, а не удобства и условия пакета. Для предоставления информации о пакетах номеров используйте сочетание <RoomData>
и <PackageData>
. Для отдельных номеров, не входящих в пакет, используйте просто <RoomData>
.
Вы можете определить оба элемента <RoomData>
и <PackageData>
для одного и того же номера или пакета. Когда Google отображает этот номер или пакет в результатах поиска, описания обоих вариантов будут включены через дефис.
Более подробную информацию можно найти в метаданных Room Bundle .
Синтаксис
Элемент <RoomData>
использует следующий синтаксис:
<?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>
Атрибуты
Элемент <RoomData>
не имеет атрибутов.
Дочерние элементы
Элемент <RoomData>
имеет следующие дочерние элементы:
Дочерний элемент | Необходимый? | Тип | Описание |
---|---|---|---|
<Capacity> | Optional | integer | Максимальное количество гостей, которое физически может разместиться в номере. Для номера вместимость больше или равна заполняемости. Если указано это значение, оно должно быть равно или больше значения элемента Значение |
<Description> | Optional | Object | Подробное описание комнаты. Этот элемент должен содержать информацию, не описанную другими элементами или элементом <Name> . Не следует использовать заглавные буквы при указании описания комнаты. Элемент
Используйте отдельный элемент В следующем примере показаны французская и английская версии описания комнаты: <Description> <Text text="Two queen-sized beds" language="en"/> <Text text="Deux lits de la reine" language="fr"/> </Description> |
<Name> | Required | string | Название категории номера. Это значение должно совпадать с тем, что указано на целевой странице отеля (ранее — в точке продажи). Не устанавливайте значение этого элемента заглавными буквами. Этот элемент принимает один дочерний элемент
Используйте отдельный элемент В следующем примере показаны французская и английская версии названия комнаты: <Name> <Text text="Standard Double Room" language="en"/> <Text text="Le chambre double" language="fr"/> </Name> |
<Occupancy> | Optional | integer | Максимальное количество гостей, на которое рассчитан номер. Например, большой номер-люкс может физически вместить 6 гостей (вместимость = 6), но рассчитан только на 4 гостей. Это значение должно быть меньше или равно элементу Значение |
<OccupancySettings> | Optional | Object | Настройки, которые могут ограничивать или изменять требования к заполняемости помещения. Элемент
<OccupancySettings> <MinOccupancy>2</MinOccupancy> <MinAge>16</MinAge> </OccupancySettings> Не все дочерние элементы обязательно должны быть включены. |
<PhotoURL> | Optional | Object | URL-адрес и, при необходимости, подпись к фотографии данной комнаты или группы комнат. Вы можете указать несколько <PhotoURL> для комнаты или группы комнат. Каждый URL-адрес фотографии должен быть указан в отдельном теге <PhotoURL> .Этот элемент принимает следующие дочерние элементы:
Пример: <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> | Содержит информацию о характеристиках номера. |
<RoomID> | Required | string | Уникальный идентификатор номера. Используйте этот идентификатор для сопоставления данных о номере с блоками <Result> в обновлениях цен. Подробнее см. в метаданных Room Bundle . (Вы также можете использовать этот идентификатор для ссылки на общее определение номера в одном сообщении транзакции при определении данных номера в строке.) |
Примеры
Данные о комнатах
В следующем примере определяются данные о помещении:
<?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>
Метаданные комнат и пакетов
В следующем примере определяются метаданные помещения и пакета:
<?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>
Пакеты для нескольких комнат
В следующем примере определяются метаданные комнат и пакетов для нескольких пакетов комнат:
<?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>
Определяет особенности помещения.
Элемент <RoomFeatures>
появляется в следующем месте в иерархии XML-сообщения транзакции:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<RoomFeatures>
Синтаксис
Элемент <RoomFeatures>
использует следующий синтаксис:
<?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>
Атрибуты
Элемент <RoomFeatures>
не имеет атрибутов.
Дочерние элементы
Элемент <RoomFeatures>
имеет следующие дочерние элементы:
Дочерний элемент | Необходимый? | Тип | Описание |
---|---|---|---|
<JapaneseHotelRoomStyle> | Optional | enum | Обозначает стиль номера в японском отеле. Допустимые значения:
|
<Beds> | Optional | Object | Вмещает столько же <Bed> сколько в комнате. Обратите внимание, что японские футоны здесь не учитываются. Каждая
<Bed> имеет следующие дочерние элементы:
<Beds> <Bed size="double"> <Width unit="cm" number="140"/> <Length unit="cm" number="195"/> </Bed> <Bed/> <!-- Size unknown --> </Beds> |
<Suite> | Optional | empty | Предусмотрите этот элемент, если номер представляет собой люкс. |
<Capsule> | Optional | empty | Предусмотрите этот элемент, если комната представляет собой капсульную комнату. |
<Roomsharing> | Optional | enum | Используется ли эта комната совместно с другими жильцами, например, владельцами или другими гостями. Допустимые значения: shared и private . |
<Outdoor> | Optional | empty | Этот элемент следует предусмотреть, если помещение предназначено для проживания на открытом воздухе без капитальных стен, сантехники и климат-контроля. Например, гостиничные номера не относятся к категории мест для проживания на открытом воздухе, в то время как кемпинги, где гости живут в палатках, и автопарки, где гости привозят собственные автодома, относятся к таким местам. |
<MobilityAccessible> | Optional | empty | Предусмотреть этот элемент, если помещение оборудовано для людей с ограниченной подвижностью. |
<Smoking> | Optional | enum | Является ли этот номер номером для некурящих или для курящих. Допустимые значения: non_smoking smoking . |
<BathAndToilet> | Optional | Object | Содержит информацию о наличии ванны и туалета в номере. Атрибут:
Элемент может иметь следующие дочерние элементы:
Пример: <BathAndToilet relation="separate"> <Bath bathtub="1" shower="1"/> <Toilet electronic_bidet="1" mobility_accessible="1"/> </BathAndToilet> |
<OpenAirBath> | Optional | empty | Предусмотрите этот элемент, если в номере имеется собственная ванная комната под открытым небом. |
<AirConditioning> | Optional | empty | Предусмотреть этот элемент, если в комнате есть кондиционер. |
<Balcony> | Optional | empty | Предусмотрите этот элемент, если в комнате есть балкон или веранда. |
<Views> | Optional | Object | Допустимые варианты включают: |
Примеры
JapaneseHotelRoomStyle
нет значения по умолчанию. Отсутствие значения не приводит к ошибке XML, но ваш объект не отображается в результатах поиска при фильтрации по типу номера или количеству кроватей.
Две односпальные кровати
В следующем примере показано, как использовать <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>
Две двуспальные кровати
Ниже приведен пример японской комнаты western
стиле с двумя 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>
Японский стиль без кровати
Ниже представлен пример номера в японском стиле без кровати. Информация о кровати для номера 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>
Японский вестерн с кроватью
Ниже приведен пример комнаты в стиле japanese_western
с кроватью размера king
-size».
<?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>
Если у партнера нет информации о количестве кроватей в номерах japanese_western
, то следуйте примеру:
<?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>
Определяет независимые от маршрута метаданные о пакетах номеров для объекта размещения. Этот элемент содержит информацию, связанную с партнером и отелем, но не с маршрутом. Цель — единовременно определить все данные, не относящиеся к маршруту, и ссылаться на них из данных маршрута.
Элемент <PackageData>
появляется в следующем месте в иерархии XML-сообщения транзакции:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Элемент <PackageData>
аналогичен <RoomData>
, но описывает особенности тарифов и условия, которые не входят в описание физического номера. Для предоставления информации о пакетах номеров и особенностях тарифов используйте сочетание <RoomData>
и <PackageData>
. Для отдельных номеров, не входящих в пакет, используйте просто <RoomData>
.
Вы можете определить оба элемента <RoomData>
и <PackageData>
для одного и того же номера или пакета. Когда Google отображает этот номер или пакет в результатах поиска, описания обоих вариантов будут включены через дефис.
При обновлении одного элемента <PackageData>
для свойства необходимо обновить все элементы <PackageData>
и <RoomData>
для этого свойства. Каждый элемент <PropertyDataSet>
считается всеми данными о свойстве и перезаписывает любые существующие данные.
Более подробную информацию можно найти в метаданных Room Bundle .
Синтаксис
Элемент <PackageData>
использует следующий синтаксис:
<?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>
Атрибуты
Элемент <PackageData>
не имеет атрибутов.
Дочерние элементы
Элемент <PackageData>
имеет следующие дочерние элементы:
Дочерний элемент | Необходимый? | Тип | Описание |
---|---|---|---|
<BreakfastIncluded> | Optional | boolean | Указывает, включает ли этот пакет завтрак в стоимость. Допустимые значения: 0 (или false ) и 1 (или true ). Предпочтительно использовать |
<ChargeCurrency> | Optional | enum | Когда и где пользователь оплачивает бронирование. Этот элемент использует тот же синтаксис, что и <ChargeCurrency> в <Result> . Значение по умолчанию — |
<CheckinTime> | Optional | Time | Как можно более раннее время заезда. Время заезда должно быть не позднее 24:00 по местному времени отеля. |
<CheckoutTime> | Optional | Time | Наиболее позднее возможное время выезда по местному времени отеля. |
<Description> | Optional | Object | Подробное описание пакета. Этот элемент должен содержать информацию, не описанную другими элементами или элементом <Name> . Не следует использовать заглавные буквы при указании описания номера. Элемент <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 | Если пакет включает бесплатный доступ в интернет, в то время как другие пакеты не включают эту услугу. Не устанавливайте этот элемент для пакета услуг в отеле, предоставляющем бесплатный интернет во всех номерах. Этот элемент не применяется к проводному интернету в номере или беспроводному интернету, который недоступен в номерах. Допустимые значения: 0 (или false ) и 1 (или true ). |
<Meals> | Optional | Object | Содержит информацию о блюдах в этом пакете. Элемент
Необязательные атрибуты используются только в том случае, если Для работы фильтров по приему пищи ( |
<Name> | Required | string | Название пакета. Это значение должно совпадать с названием на целевой странице отеля. Не устанавливайте значение этого элемента заглавными буквами. Этот элемент принимает один дочерний элемент <Name> <Text text="Bed and Breakfast" language="en"/> <Text text="Lit et petit déjeuné" language="fr"/> </Name> |
<Occupancy> | Optional | integer | Максимальное количество гостей, на которое рассчитан пакет номеров. Например, большой номер-люкс может физически разместить 6 гостей, но рассчитан только на 4. Это значение должно быть меньше или равно элементу Значение Если вы укажете этот элемент и в Примечание : <Occupancy> может сопровождаться элементом <OccupancyDetails> , который определяет тип гостей (взрослые или дети). Синтаксис и описание дочерних элементов см. в разделе <OccupancyDetails> . |
<PackageID> | Required | string | Уникальный идентификатор пакета. Используйте этот идентификатор для сопоставления данных Room Bundle с блоками (Вы также можете использовать этот идентификатор для ссылки на общее определение Room Bundle, используемое в одном сообщении транзакции при определении данных Room Bundle в строке.) |
<ParkingIncluded> | Optional | boolean | Включает ли пакет услуг парковка бесплатно, в то время как в этом отеле парковка была бы платной. Не указывайте значение для этого элемента, если отель предлагает бесплатную парковку. Допустимые значения: |
<PhotoURL> | Optional | Object | (То же самое, что и <PhotoURL> в <RoomData> , но для пакета (например, фотографии еды).) |
<Refundable> | Optional | Object | Позволяет указать тариф как полностью возвращаемый или предлагающий бесплатную отмену. Если он не указан, информация о возврате средств не отображается. Политика возврата на уровне <PackageData> переопределяет политику возврата на уровне <Result> . Политика возврата на уровне <Rates> переопределяет политику возврата на уровне <PackageData> . Возвратные цены также можно отображать для пользователей с помощью альтернативных вариантов без непосредственного изменения схемы сообщения о транзакции. Подробнее об этих вариантах Политика возвратных тарифов . В следующем примере показан элемент <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Примечание: Мы рекомендуем настроить все атрибуты. Если один или несколько атрибутов не настроены, генерируется предупреждение о статусе фида. Если вы не укажете никаких атрибутов, тариф не будет отображаться как возвращаемый. Атрибуты следующие:
При настройке атрибутов обратите внимание на следующее:
|
<MembershipBenefits Included> | Optional | boolean | В стоимость включены привилегии элитного статуса на весь срок проживания. В стоимость входят следующие параметры:
|
<CarRentalIncluded> | Optional | boolean | В стоимость входит бесплатная аренда автомобиля на весь период проживания. |
<MilesIncluded> | Optional | boolean | Тариф включает бонусные мили для часто летающих пассажиров. Параметры включают:
Примечание: |
<OnPropertyCredit> | Optional | boolean | В стоимость входит кредит на проживание (еда и напитки, курорт, спа и т.д.). Параметры:
|
<AirportTransportationIncluded> | Optional | Object | В стоимость входит бесплатный трансфер до ближайшего аэропорта и обратно. Необязательный атрибут direction указывает направление трансфера. Допустимые значения:from : Транспорт предоставляется из аэропорта до объекта размещения. Это значение по умолчанию, если направление не указано. to : Транспорт предоставляется из объекта размещения в аэропорт. round_trip : Транспорт предоставляется как в аэропорт, так и из аэропорта. |
Примеры
Пакет одноместного номера
В следующем примере определяется пакет услуг с одним номером, рассчитанный на 2 человек (один взрослый и один ребенок), включая завтрак:
<?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>
Метаданные комнат и пакетов
В следующем примере определяются метаданные помещения и пакета:
<?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>
Пакеты для нескольких комнат
В следующем примере определяются метаданные комнат и пакетов для нескольких пакетов комнат:
<?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>
Пакет номеров с ценами
В следующем примере определяются метаданные номера и пакета для пакета номеров с функциями тарифа:
<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>
Еда и фотографии
В следующем примере определяются метаданные номера и пакета услуг для питания, фотографий, а также времени регистрации заезда и выезда:
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<PackageData>
<PackageID>PackageID_1</PackageID>
<Name>
<Text text="Meals Included" language="en"/>
</Name>
<PhotoURL>
<Caption>
<Text text="Breakfast" language="en"/>
<Text text="朝食" language="ja"/>
</Caption>
<URL>http://example.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Meals>
<!-- Guests can choose to have breakfast in their room or in another
space to avoid contact with other guests. -->
<Breakfast included="1" in_room="1" in_private_space="1"/>
<Dinner included="1" buffet="1"/>
</Meals>
<CheckinTime>15:00</CheckinTime>
<CheckoutTime>11:00</CheckoutTime>
</PackageData>
</PropertyDataSet>
</Transaction>
Завтрак
<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
<PropertyDataSet>
<Property>1234</Property>
<PackageData>
<PackageID>PackageID_1</PackageID>
<Name>
<Text text="Breakfast Included" language="en"/>
</Name>
<PhotoURL>
<Caption>
<Text text="Breakfast" language="en"/>
<Text text="朝食" language="ja"/>
</Caption>
<URL>http://example.com/static/bar/image1234.jpg</URL>
</PhotoURL>
<Meals>
<Breakfast included="true"/>
<!-- Dinner not included needs to be explicitly specified -->
<Dinner included="false"/>
</Meals>
<CheckinTime>15:00</CheckinTime>
<CheckoutTime>11:00</CheckoutTime>
</PackageData>
</PropertyDataSet>
</Transaction>
<Result>
Контейнер для обновлений цен и доступности в сообщении <Transaction>
.
Элемент <Result>
появляется в следующем месте в иерархии XML-сообщения транзакции:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
Используйте элемент <Result>
для установки или обновления цен на номера и определения доступного инвентаря. Элементы, определённые в этом элементе, обычно ссылаются на независимые от маршрута метаданные о номере или пакете (например, описание или набор удобств), определённые в элементах <PackageData>
и <RoomData>
.
Обычно вы очень часто отправляете сообщения о транзакциях с обновлениями цен. То, как именно и как часто вы это делаете, зависит от вашего способа доставки .
Вы можете использовать <Result>
в сообщении транзакции для удаления маршрутов, как описано в разделе Удаление инвентаря . Подробнее об использовании сообщений транзакции для обновления цен и наличия мест см. в разделе Добавление и обновление инвентаря .
Одно сообщение о транзакции может включать в себя любое количество элементов <Result>
, при условии, что размер сообщения не превышает 100 МБ.
Синтаксис
Элемент <Result>
использует следующий синтаксис:
<?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>
Атрибуты
Элемент <Result>
имеет следующие атрибуты:
Атрибут | Необходимый? | Тип | Описание |
---|---|---|---|
mergeable | Optional | boolean | По умолчанию новые цены для конкретной пары «отель — маршрут» перезаписывают все предыдущие (действительные) цены, присутствующие в кэше Google. Атрибут mergeable позволяет сохранять дополнительные цены в кэше Google, не удаляя предыдущую информацию о ценах. В ответах запроса Live Pricing с контекстом этот атрибут всегда будет иметь значение true (независимо от ответа на сообщение о транзакции). |
Дочерние элементы
Элемент <Result>
имеет следующие дочерние элементы:
Дочерний элемент | Необходимый? | Тип | Описание |
---|---|---|---|
<AllowablePointsOfSale> | Optional | Object | Одна или несколько целевых страниц, соответствующих требованиям отеля. Целевая страница — это веб-сайт, который может обрабатывать процесс бронирования для конечного пользователя. Чтобы явно включить определённую целевую страницу (и исключить другие), добавьте один или несколько элементов <AllowablePointsOfSale> , соответствующих атрибуту id элемента <PointOfSale> в файле целевых страниц.Если этот элемент не включен, все целевые страницы, определённые в файле целевых страниц, будут считаться подходящими для бронирования номера. Подробнее см. в разделе Синтаксис файла целевых страниц . |
<Baserate> | Optional | float | Стоимость номера для проживания. Стоимость этого элемента должна отражать следующее:
Если номер недоступен для маршрута, Чтобы удалить связку комнат, следуйте инструкциям в разделе Удаление связки комнат . <Baserate currency="USD">1200.40</Baserate> Элемент
|
<ChargeCurrency> | Optional | enum | Когда и где пользователь оплачивает бронирование. Этот элемент можно использовать в сообщении о транзакции в элементе <Result> для цены отеля или в блоке <PackageData> для пакета номеров.Допустимые значения:
Значение по умолчанию — |
<Checkin> | Required | Date | Дата заезда для маршрута в формате Date . Сочетание элементов <Nights> и <Checkin> образует маршрут. |
Optional | string | Устарело: определяет настраиваемое поле, которое можно использовать для передачи дополнительных данных, связанных с отелем. Вы можете передать до пяти настраиваемых значений со следующими именами элементов:
Элементы Важно: обратитесь к своему техническому менеджеру по работе с клиентами (TAM), если вы хотите использовать переменные | |
<ExpirationTime> | Optional | DateTime | Дата и время, когда цена считается истекшей (минимум 3 часа). Мы рекомендуем вам не указывать временные метки истечения срока действия, если это не имеет решающего значения для вашей структуры ценообразования. Google не обслуживает цены, срок действия которых истек, и любой маршрут с истекшей ценой станет доступен для запроса цен в реальном времени . |
<MilesIncluded> | Optional | boolean | Тариф включает бонусные мили для часто летающих пассажиров. Параметры включают:
Note: |
<Nights> | Required | integer | The number of nights for an itinerary. The value of the <Nights> element must be a positive integer. The combination of <Nights> and <Checkin> make up an itinerary. |
<OtherFees> | Optional | float | Fees other than the base rate and taxes that influence the final price of a room. The <OtherFees> element takes a single required attribute, currency , that defines the three-letter currency code for the fees. For example, USD . The |
<Occupancy> | Optional | integer | Specifies the maximum allowed occupants for this rate. When <Occupancy> appears directly under <Result> , it must specify 2 or more. <Occupancy> may be accompanied by <OccupancyDetails> , which specifies the type of guests (adults or children). If guest types are not specified, they are assumed to be adults. Consult <OccupancyDetails> for syntax and description of child elements. If the <Occupancy> element is not provided, occupancy is defaulted as 2 .Key Point : Child occupancy rates should only be sent through Live pricing with context and not through Pull or Changed pricing. Note: Contact your support team to enable the feature to send non-double occupancy prices. |
<PackageID> | Optional | string | The unique ID of the package to map it to predefined package data. Also used to populate the PACKAGE-ID landing page variable. For more information, refer to Room Bundle metadata . It is mandatory to include |
<Property> | Required | string | The ID of a hotel affected by the associated data (price, itinerary, Room Bundle, or metadata). The value of this element must be a string. The value of this element must match the listing <id> that you defined in your Hotel List Feed. |
<Rates> | Optional | <Rates> | A container for one or more <Rate> blocks. Each <Rate> in <Rates> defines a different price for the room/itinerary combination. Use the Note: Within |
<Refundable> | Optional | Object | Enables listing a rate as being fully refundable or providing a free cancellation. If not provided, no information about a refund is displayed. A refund policy at the <PackageData> level overrides the refund policy at the <Result> level. A refund policy at the <Rates> level overrides the refund policy at the <PackageData> level. Refundable pricing can also be highlighted to users through alternative options without directly modifying your transaction message schema. Learn more about Refundable rates policy . The following example shows the <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Note: We recommend setting all of the attributes. A feed status warning message is generated when one or more attributes are not set. If you don't set any attributes, the rate does not display as refundable. The attributes are:
When setting the attributes, note the following:
|
<RoomBundle> | Optional | <RoomBundle> | A container for information on priced physical descriptions of a room, any packaging of amenities, and some purchase policy details for the given hotel and itinerary. In general, use this element to define pricing for the base room and different types of rooms within the same property. While it is possible to define Room Bundle descriptions inline, you should use a separate Transaction message to define that information. Google will store metadata so that you can reference it, rather than repeat it, in all future pricing updates. |
<RoomID> | Optional | string | The unique ID of the room to map it to predefined room data. Also used to populate the PARTNER-ROOM-ID landing page variable. For more information, refer to Room Bundle metadata . It is mandatory to include |
<Tax> | Optional | float | The taxes that are calculated for the final price of a room. The <Tax> element takes a single required attribute, currency , that defines the three-letter currency code for the taxes. For example, USD . The <Tax> element is required if <Baserate> is greater than zero. If |
<Unavailable> | Optional | Object | Indicates that the itinerary is unavailable for booking. Serves as a container for more detailed reasons why the itinerary was unavailable. One or more of the following unavailability reasons may be nested underneath the <Unavailable> tag:
|
Примеры
Multi-property example
The following example defines one itinerary and its pricing for two properties:
<?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>
Not shown in this example are details about the room, such as a description, a picture and caption, the room's name, and its capacity.
You can define that information once in a separate Transaction message that Google stores. You can then reference it in all subsequent pricing and inventory updates. For more information, refer to Room Bundle metadata .
Multi-rate example
The following example defines a single itinerary and property with multiple rates for various occupancies. The <Rates>
element can be utilized to provide multi-rate pricing for a specific property. The following example is also useful for Vacation Rental (VR) properties:
<?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>
Unavailable example
The following example defines one itinerary whose availability couldn't be retrieved from downstream channels, a second that is both below the minimum night stay and already booked for the specified dates, and a third whose property is closed on the arrival date, but that opens during the course of the stay:
<?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>
A container for one or more <Rate>
blocks. Each <Rate>
in <Rates>
defines a different price for the room or itinerary combination.
Use the <Rates>
element only when there are multiple rates for the same room or itinerary combination. For example, you define multiple rates for conditional rates , private rates , or conditional rates in Room Bundles .
The <Rates>
element appears in the following place in the Transaction message XML hierarchy:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
(Can also contain<Rates>
) + ...
Values set in a <Rate>
override pricing-related values on the parent <Result>
or <RoomBundle>
element. If they are not set in <Rate>
, they inherit their value from the parent element. Only <AllowablePointsofSale> is inherited to the <RoomBundle>
element.
Синтаксис
The <Rates>
element uses the following syntax:
<?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>
Атрибуты
The <Rates>
element has the following attributes:
Атрибут | Необходимый? | Описание |
---|---|---|
rate_rule_id | Optional | For conditional rates , this ID matches a rate to a definition in your Rate Rule Definition file. The character limit for this field is 40 characters. |
Child elements
The <Rates>
element has the following child elements:
Дочерний элемент | Необходимый? | Тип | Описание |
---|---|---|---|
<AllowablePointsOfSale> | Optional | Object | One or more landing pages that are eligible for the hotel. This element uses the same syntax as the <AllowablePointsOfSale> on <Result> . |
<Baserate> | Required | float | The price of the room for the stay. This element uses the same syntax as the <Baserate> on <Result> . Note: The |
<ChargeCurrency> | Optional | enum | When and where the user pays for a booking. This element uses the same syntax as a <ChargeCurrency> in a <Result> . |
Optional | string | Deprecated: Custom fields that you can use to pass additional data associated with a hotel to a landing page. This element uses the same syntax as a <Custom[1‑5]> in a <Result> . There is a limit of 200 characters per custom field. For more information, refer to landing page files . If <Custom> elements are provided in the <Result> element, then they are not inherited in the <RoomBundle> element and should be defined separately for each <RoomBundle> or it can be included in <PackageData> if needed. Important: Contact your Technical Account Manager (TAM) if you want to use | |
<ExpirationTime> | Optional | DateTime | The date and time at which the rate is considered expired. This element uses the same syntax as an <ExpirationTime> in a <Result> . |
<MilesIncluded> | Optional | boolean | Rate includes frequent flyer miles. Parameters include:
Note: |
<Occupancy> | Optional | integer | Specifies the maximum allowed occupants for this rate. If not specified, it is assumed to be the same as parent rate. |
<OtherFees> | Required | float | Fees other than the base rate and taxes that influence the final price of a room. This element uses the same syntax as <OtherFees> in a <Result> . If |
<Refundable> | Optional | Object | Enables listing a rate as being fully refundable or providing a free cancellation. If not provided, no information about a refund is displayed. A refund policy at the <PackageData> level overrides the refund policy at the <Result> level. A refund policy at the <Rates> level overrides the refund policy at the <PackageData> level. Refundable pricing can also be highlighted to users through alternative options without directly modifying your transaction message schema. Learn more about these options Refundable rates policy . The following example shows the <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Note: We recommend setting all of the attributes. A feed status warning message is generated when one or more attributes are not set. If you don't set any attributes, the rate does not display as refundable. The attributes are:
When setting the attributes, note the following:
|
<Tax> | Required | float | The taxes that are calculated for the final price of a room. This element uses the same syntax as the a <Tax> in a <Result> . |
Примеры
Base rate and conditional rate
The following example shows a Transaction message that contains a base rate and a conditional rate :
<?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>
Multiple conditional rates
The following example defines a base rate and multiple conditional rates within a <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 and it should be within 50 characters in length for optimal
performance. 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>
Defines pricing and availability for Room Bundles as a child of <Result>
in a <Transaction>
message. Define a separate element for each package or itinerary combination. To define the package and terms of the Room Bundles, use <RoomData>
.
The <RoomBundle>
element appears in the following place in the Transaction message XML hierarchy:
+<Transaction>
+<PropertyDataSet>
// Room and package metadata + <Property> +<RoomData>
+<PackageData>
+<Result>
// Pricing and availability +<Rates>
+<RoomBundle>
+ ...
For more information, refer to Using Room Bundles .
Синтаксис
The <RoomBundle>
element uses the following syntax:
<?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>
Атрибуты
The <RoomBundle>
element has no attributes.
Child elements
The <RoomBundle>
element has the following child elements:
Дочерний элемент | Необходимый? | Тип | Описание |
---|---|---|---|
<Baserate> | Required | float | Defines the price of the Room Bundle for the stay. This element uses the same syntax as <Baserate> in <Result> , with the following exception:
|
<BreakfastIncluded> | Optional | boolean | Specifies whether this Room Bundle includes breakfast with the rate. |
<ChargeCurrency> | Optional | enum | When and where the user pays for a booking. This element uses the same syntax as <ChargeCurrency> in a <Result> . The default value is |
Optional | string | Deprecated: Custom fields for passing additional data to the landing pages for the Room Bundle. These elements use the same syntax as <Custom[1-5]> in <Result> . There is a limit of 200 characters per custom field. For more information, refer to landing page files . Custom variables are listed only when you send the prices in the Transaction message. If <Custom> elements are provided in the <Result> element, then they are not inherited in the <RoomBundle> element and should be defined separately for each <RoomBundle> or it can be included in <PackageData> if needed. Important: Contact your Technical Account Manager (TAM) if you want to use | |
<InternetIncluded> | Optional | boolean | If a Room Bundle includes internet access at no charge, while other bundles wouldn't include that amenity. Don't set this element for Room Bundles in a hotel that provides free internet to all rooms. This element does not apply to in-room wired internet or wireless internet that is not available in guest rooms. |
<MilesIncluded> | Optional | boolean | Rate includes frequent flyer miles. Parameters include:
Note: |
<Occupancy> | Required | integer | Specifies the maximum allowed occupants for this rate. For example, a large suite might be able to physically accommodate 6 guests, but the "Honeymoon Package" allows 2 guests only. This value must be less than or equal to the When defining occupancy in your landing page URL, use the The value of Примечания :
|
<OtherFees> | Required | float | Fees other than the base rate and taxes that influence the final price of a room. The <OtherFees> element takes a single required attribute, currency , that defines the three-letter currency code for the fees. For example, use USD for US dollars. |
<PackageID> | Optional (recommended) | string | The unique ID for the package data. Use this ID to match the Room Bundle data with what was sent in <PackageData> . For more information, refer to Room Bundle metadata . (You can also use this ID to reference a common Room Bundle definition used in a single Transaction message when defining Room Bundle data inline.) |
<ParkingIncluded> | Optional | boolean | Whether a Room Bundle includes parking at no charge, where parking would otherwise be a paid service at this hotel. Don't specify a value for this element for a hotel that offers free parking. Valid values are |
<RatePlanID> | Optional | string | The Rate Plan ID represents the unique identifier for a room and package combination. For example, given a <RoomID> value of 5 and a <PackageID> value of ABC, you could use a value of 5-ABC for <RatePlanID> . We strongly recommend using RatePlanID as a variable to build your dynamic landing page (formerly Point of Sale) URL.Note: RatePlanID should be within 50 characters in length for optimal performance. For more information, refer to Using Variables and Conditions . |
<Rates> | Optional | <Rates> | Rates that override the defaults for this Room Bundle. This element uses the same syntax as <Rates> in <Result> . |
<Refundable> | Optional | Object | Enables listing a rate as being fully refundable or providing a free cancellation. If not provided, no information about a refund is displayed. A refund policy at the <PackageData> level overrides the refund policy at the <Result> level. A refund policy at the <Rates> level overrides the refund policy at the <PackageData> level. Refundable pricing can also be highlighted to users through alternative options without directly modifying your transaction message schema. Learn more about these options Refundable rates policy . The following example shows the <Refundable available="1" refundable_until_days="7" refundable_until_time="18:00:00"/> Note: We recommend setting all of the attributes. A feed status warning message is generated when one or more attributes are not set. If you don't set any attributes, the rate does not display as refundable. The attributes are:
When setting the attributes, note the following:
|
<RoomID> | Required | string | The unique ID for the room data. Use this ID to match the Room Bundle data with what you sent in <RoomData> . For more information, refer to Room Bundle metadata . (You can also use this ID to reference a common room definition in a single Transaction message when defining room data inline.) |
<Tax> | Required | float | The taxes that are calculated for the final price of a room. The <Tax> element takes a single required attribute, currency , that defines the three-letter currency code for the taxes. For example, use USD for US dollars. |
Примеры
Single occupancy bundle
The following example defines a response with a single occupancy bundle. When a user selects 1
in the Occupancy picker, Google displays the lowest eligible price regardless of occupancy.
If a single occupancy price is not available, then Google will show the lowest double-occupancy price. Note that single occupancy prices are not live queried if double-occupancy or more prices are cached for an itinerary.
This example references predefined room and package metadata with the <RoomID>
and <PackageID>
elements. Use the <RoomData>
and <PackageData>
elements to define that information.
<!-- 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>
Two or more occupancies
The following example defines a response containing two or more occupancies.
This example references predefined room and package metadata with the <RoomID>
and <PackageID>
elements. Use the <RoomData>
and <PackageData>
elements to define that information.
<!-- 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>
Multiple room bundles
The following example sets Occupancy in multiple Room bundles to demonstrate possible hostel room pricing.
<?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>
Multiple Conditional rates
The following example defines a base rate and multiple conditional rates within a <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 and it should be within 50 characters in length for optimal
performance. 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>
in a transaction message specifies the maximum number of guests for a room or package. <OccupancyDetails>
can contain additional information such as the number and type of guests (adults or children).
When <Occupancy>
and <OccupancyDetails>
appear within the <Rates>
element of <Result>
or <RoomBundle>
, it means that the rate is constrained by the occupancy details.
If you include <OccupancyDetails>
in a <RoomBundle>
, along with a nested <Rate>
element you can't send a basic <Occupancy>
within the <Rate>
; instead one of the following options is recommended:
- Omit occupancy from
<Rate>
: In this case, the<Rate>
inherits the<OccupancyDetails>
directly from the<RoomBundle>
или,
- Duplicate
<OccupancyDetails>
: In this case, send additional identical<OccupancyDetails>
in both the<RoomBundle>
and the nested<Rate>
element
Синтаксис
When <OccupancyDetails>
appears, it is always preceded by <Occupancy>
. Note the following syntax:
<?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>
Child elements
The <OccupancyDetails>
element has the following child elements:
Дочерний элемент | Необходимый? | Тип | Описание |
---|---|---|---|
<NumAdults> | Required | integer | The number of adult guests. Min:1, Max:20. |
<Children> | Optional | Object | A container for one or more <Child> elements. |
<Child age> | Optional | integer | The maximum age for this Child—for example, <Child age="17"> . |
Примеры
The following examples show how <OccupancyDetails>
may appear within <Results>
, <RoomBundle>
, or the <Rates>
child element.
Result response
The following example defines one itinerary and its pricing for one property in response to a Live Pricing Query where the user specified the number and types of guests. Here, the <OccupancyDetails>
-- 2 adults and one child -- are returned in <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>
Rates response
The following example defines one itinerary and its pricing for 1 adult and 1 child. Here, the <OccupancyDetails>
are returned in the <Rates>
element of <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>
Room bundle
The following example defines an occupancy of 2 adults and 1 child for two nights, with a refundable rate. Here, the <OccupancyDetails>
appear inside <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>
Multiple room bundles
The following example defines multiple <RoomBundle>
rates that are restricted to an occupancy of 2 adults and 2 children. Here, the <OccupancyDetails>
appear in the <Rates>
element of <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>