В этом разделе приведена справочная информация о сообщениях Google на основе XML: Hint Request, Hint Response и Query.
<Hint> (сообщение Hint Response)
Корневой элемент сообщения Hint Response. Сообщения Hint Response указывают, для каких отелей или маршрутов нужно обновить цены. Они отправляются в ответ на запрос подсказки от Google.
В сообщении Hint Response должны быть указаны только те гостиницы, цены которых изменились с момента последнего успешного получения Google сообщения Hint Response от ваших серверов.
В сообщениях Hint Response используется один из следующих методов, чтобы указать, для каких гостиниц и маршрутов Google должен пересчитать цены:
Точные маршруты. Сочетание даты заезда и длительности пребывания.
Диапазоны дат заезда. Указывает диапазон дат заезда, начиная с первой даты заезда и заканчивая последней датой заезда.
Диапазоны дат (или диапазоны дат в маршрутах)
Для каждого из этих методов требуется свой синтаксис сообщения Hint Response.
Подробнее о сообщениях Hint Response…
Синтаксис
Синтаксис элемента <Hint> зависит от типа сообщения Hint Response:
Точные маршруты
Ниже показан синтаксис для точных маршрутов в сообщении Hint Response.
<!-- Exact Itinerary Hint Response -->
<?xml version="1.0" encoding="UTF-8"?>
<Hint>
<Item>
<Property>hotel_ID</Property>
...
<Stay>
<CheckInDate>checkin_date</CheckInDate>
<LengthOfStay>number_of_nights</LengthOfStay>
</Stay>
</Item>
...
</Hint>
Диапазоны времени заезда
Ниже показан синтаксис для диапазонов дат заезда в сообщении Hint Response.
<!-- Check-in Ranges Hint Response -->
<?xml version="1.0" encoding="UTF-8"?>
<Hint>
<Item>
<!-- At least one is required -->
<Property>hotel_ID</Property>
[...]
<!-- Required -->
<FirstDate>first_checkin_date</FirstDate>
<!-- Required -->
<LastDate>last_checkin_date</LastDate>
</Item>
...
</Hint>
Диапазон дат проживания
Ниже показан синтаксис для диапазонов дат проживания в сообщении Hint Response.
<!-- Ranged Stay Hint Response -->
<?xml version="1.0" encoding="UTF-8"?>
<Hint>
<Item>
<!-- At least one is required -->
<Property>1458700</Property>
<Property>5418701</Property>
<StaysIncludingRange>
<!-- Required -->
<FirstDate>2025-04-28</FirstDate>
<!-- Optional -->
<LastDate>2025-04-29</LastDate>
</StaysIncludingRange>
</Item>
...
</Hint>
Атрибуты
Элемент <Hint> содержит необязательный атрибут id. Если он указан, то включается в качестве атрибута hintId в сообщения <Query>, отправленные на основе этого <Hint>.
Дочерние элементы
Элемент <Hint> содержит следующие дочерние элементы:
| Дочерний элемент | Обязательно? | Тип | Тип ответа с подсказкой | Описание |
|---|---|---|---|---|
| <CheckInDate> | Required | Date | Точные маршруты | Дата заезда. |
| <FirstDate> | Required | Date | Диапазоны дат заезда и маршруты с диапазонами дат | Первая дата диапазона дат для диапазона заезда или диапазона пребывания в сообщении Hint Response. Указанные даты включаются в диапазон. |
| <Item> | Required | Object | Все | Контейнер для гостиницы или маршрута, который нужно обновить. |
| <LastDate> | Required* | Date | Диапазоны дат заезда и маршруты с диапазонами дат | Последняя дата диапазона дат для диапазона заезда или диапазона пребывания в сообщении Hint Response. Указанные даты включаются в диапазон. * Этот элемент необязателен для проживания в течение определенного периода. |
| <LengthOfStay> | Required | integer | Точные маршруты | Количество ночей в маршруте, выраженное положительным целым числом. |
| <Property> | Required | string | Все | Идентификатор гостиницы, совпадающий с идентификатором в списке гостиниц. Количество элементов
|
| <Stay> | Required | Object | Точные маршруты | Контейнер для элементов <CheckinDate> и <LengthOfStay> в сообщении Hint Response с точным маршрутом. Каждый тег <Item> может содержать только один тег <Stay>. |
| <StaysIncludingRange> | Required | Object | Маршруты с диапазоном дат | Контейнер для элементов <FirstDate> и <LastDate> в сообщении Hint Response для диапазона дат. |
Примеры
Точные маршруты
В следующем примере в сообщении Hint Response для одного объекта задано несколько маршрутов:
<!-- Exact Itinerary Hint Response -->
<?xml version="1.0" encoding="UTF-8"?>
<Hint>
<Item>
<Property>12345</Property>
<Stay>
<CheckInDate>2018-07-03</CheckInDate>
<LengthOfStay>3</LengthOfStay>
</Stay>
</Item>
<Item>
<Property>12345</Property>
<Stay>
<CheckInDate>2018-07-03</CheckInDate>
<LengthOfStay>4</LengthOfStay>
</Stay>
</Item>
</Hint>
Диапазоны времени заезда
В примере ниже указаны две гостиницы, цены в которых изменились и должны быть получены снова. Google получает все маршруты с 3 по 6 июля для объектов 12345 и 67890:
<!-- Check-in Ranges Hint Response -->
<?xml version="1.0" encoding="UTF-8"?>
<Hint>
<Item>
<Property>12345</Property>
<Property>67890</Property>
<FirstDate>2018-07-03</FirstDate>
<LastDate>2018-07-06</LastDate>
</Item>
</Hint>
Диапазон дат проживания
В примере ниже показаны два разных варианта использования диапазонов: один для нескольких ночей, а другой – для одной.
<!-- Ranged Stay Hint Response -->
<?xml version="1.0" encoding="UTF-8"?>
<Hint>
<!-- Google fetches prices for all itineraries (first and last date are set) -->
<Item>
<Property>12345</Property>
<StaysIncludingRange>
<FirstDate>2018-07-03</FirstDate>
<LastDate>2018-07-06</LastDate>
</StaysIncludingRange>
</Item>
<!-- Google fetches prices for a single night (first date only) -->
<Item>
<Property>67890</Property>
<StaysIncludingRange>
<FirstDate>2018-07-03</FirstDate>
</StaysIncludingRange>
</Item>
</Hint>
В каждом из этих примеров Google отвечает с помощью <Query>, а вы должны ответить с помощью <Transaction>, который включает обновления цен для указанных гостиниц/маршрутов.
<HintRequest>
Корневой элемент сообщения Hint Request. Google отправляет на ваш сервер Hint Request message и ожидает ответа с указанием гостиниц и маршрутов, цены на которые изменились с момента последнего успешного получения Hint Response от вашего сервера.
Если цены изменились, Google отправляет запрос <Query>, чтобы получить обновленные данные о ценах для указанных гостиниц и маршрутов.
Подробнее о сообщениях Hint Request…
Синтаксис
Элемент <HintRequest> использует следующий синтаксис:
Синтаксис
<?xml version="1.0" encoding="UTF-8"?>
<HintRequest>
<LastFetchTime>last_fetch_time</LastFetchTime>
</HintRequest>
Атрибуты
У элемента <HintRequest> нет атрибутов.
Дочерние элементы
Элемент <HintRequest> содержит следующие дочерние элементы:
| Дочерний элемент | Тип | Описание |
|---|---|---|
| <LastFetchTime> | DateTime | Время, когда Google в последний раз удалось получить сообщение Hint Response в ответ на сообщение Hint Request.
Если это время предшествует последнему обновлению цен на вашем сервере, то вы должны отправить сообщение Hint Response с указанием гостиниц, для которых изменились цены. Если в последнее время не было успешных сканирований, будет установлено фиксированное значение интервала (чтобы избежать более серьезных проблем с большим количеством невыполненных задач). В настоящее время фиксированный интервал составляет 1000 секунд, но это значение может измениться. Дополнительную информацию можно найти в статье Сообщения Hint Response. |
Примеры
Ниже приведен пример запроса подсказки.
Hint request message
Пример Hint Request message:
<?xml version="1.0" encoding="UTF-8"?>
<HintRequest id="ABCDEF" timestamp="2018-06-07T16:20:00Z">
<LastFetchTime>2018-03-25T00:04:09Z</LastFetchTime>
</HintRequest>
<Query>
Корневой элемент сообщения Query. Сообщения Query – это запросы от Google на обновление цен или метаданных. Они используются как при запросе цен
, так и при изменении цен
.
Сообщения-запросы цен
В сообщениях-запросах цен указываются комбинации гостиниц и маршрутов, для которых вы предоставляете цены.
Когда ваш сервер получает сообщение-запрос pricing, он должен ответить сообщением <Transaction>, содержащим запрошенную информацию о ценах.
Подробнее о ценах…
Существует три специальных типа сообщений Query:
Цены в режиме реального времени. Google отвечает на определенный запрос пользователя, запрашивая обновление цены в режиме реального времени. Получив сообщение
Live pricing query, партнеры должны ответить сообщением<Transaction>, содержащим запрашиваемую информацию о ценах в элементах<Result>.С ценами в контексте. Google обновляет кеш цен на основе контекстов, которые были популярны в прошлом. Получив сообщение
With Context query, вы должны отправить ответное сообщение<Transaction>, содержащее запрашиваемую информацию о ценах в элементах<Result>.С контекстными запросами для одного гостя
В ответ на запросы с контекстом следует отправлять только тарифы, соответствующие указанному контексту. Базовый тариф предполагает размещение как минимум двух человек, поэтому если в нем указан один человек, то он будет игнорироваться и тариф будет считаться как для двух человек. В этом случае вам нужно передать базовую цену как недоступную и использовать вложенную цену для одного гостя. См. пример ответа с контекстом. Чтобы объединить тарифы, вы можете использовать измененные цены с контекстом, задав для атрибута
mergeableзначение"true". Подробнее…Измененные цены (ранее – извлекаемые цены с подсказками) с контекстом
Когда вы отправляете ответ
<Transaction>на запрос измененных цен с контекстом, Google считает, что он полностью заменяет информацию о ценах и наличии мест для определенной гостиницы или маршрута. Все тарифы, зависящие от контекста, исключаются из ответа и удаляются из кеша.Чтобы этого не произошло, задайте для атрибута
mergeableзначение"true"в элементе<Result>сообщения<Transaction>. Google добавляет ставки к существующим кешированным ставкам для предоставленного контекста в ответе. Если вы не используете атрибут mergeable, то должны отправлять в ответе все тарифы для всех подходящих контекстов.Запрос цен в режиме реального времени с контекстом
По умолчанию у запроса цен в режиме реального времени с контекстом есть атрибут mergeable, поэтому задавать его не нужно. Если все остальные контексты остаются прежними, вам нужно отправить только тарифы для определенных контекстов, запрошенных Google. Если изменились другие контексты, вы должны явно отправить изменения для этих контекстов, иначе новые цены не будут обновлены в кеше Google.
Метаданные. Google запрашивает обновления метаданных для номеров и пакетов номеров в указанных гостиницах. В ответ на сообщение
Metadata Queryвы должны отправить сообщение<Transaction>с данными о номерах и пакетах номеров в элементах<PropertyDataSet>. Подробную информацию можно найти в разделе Метаданные Room Bundle.
Синтаксис
Элемент <Query> использует следующий синтаксис:
Запрос цены
<?xml version="1.0" encoding="UTF-8"?>
<Query>
<Checkin>YYYY-MM-DD</Checkin>
<Nights>number_of_nights</Nights>
<PropertyList>
<Property>hotel_id</Property>
...
</PropertyList>
</Query>
Цены в режиме реального времени
<?xml version="1.0" encoding="UTF-8"?>
<Query latencySensitive="true_or_false">
<Checkin>YYYY-MM-DD</Checkin>
<Nights>number_of_nights</Nights>
<!-- Only for Check-in Date Range pricing queries (Changed Pricing) -->
<FirstDate>YYYY-MM-DD</FirstDate>
<LastDate>YYYY-MM-DD</LastDate>
<!-- Only for Ranged Stay pricing queries (Changed Pricing) -->
<AffectedNights>number_of_nights</AffectedNights>
<PropertyList>
<Property>hotel_id</Property>
...
</PropertyList>
<!-- See documentation below for <Context> -->
<Context>
...
</Context>
</Query>
С запросом контекста
<?xml version="1.0" encoding="UTF-8"?>
<Query>
<Checkin>YYYY-MM-DD</Checkin>
<Nights>number_of_nights</Nights>
<!-- Only for Check-in Date Range pricing queries (Changed Pricing) -->
<FirstDate>YYYY-MM-DD</FirstDate>
<LastDate>YYYY-MM-DD</LastDate>
<!-- Only for Ranged Stay pricing queries (Changed Pricing) -->
<AffectedNights>number_of_nights</AffectedNights>
<PropertyContextList>
<PropertyContext>
<Property>hotel_id</Property>
...
<!-- See documentation below for <Context> -->
<Context>
...
</Context>
</PropertyContext>
</PropertyContextList>
</Query>
Метаданные
<HotelInfoProperties>
<Property>property_ID</Property>
...
</HotelInfoProperties>
Атрибуты
Элемент <Query> может содержать один атрибут: latencySensitive.
Атрибут latencySensitive необязателен. Если указан параметр true, это означает, что запрос является Live Pricing Query. Чтобы Google отправлял запросы с атрибутом latencySensitive, обратитесь к техническому менеджеру аккаунта.
Дочерние элементы
Элемент <Query> содержит следующие дочерние элементы:
| Дочерний элемент | Тип запроса | Тип | Описание |
|---|---|---|---|
| <AffectedNights> | Pricing | integer | Количество ночей в диапазоне дат. Этот элемент используется только для запросов цен на проживание в диапазоне дат, которые применяются вместе с измененными ценами. |
| <Checkin> | Pricing | Date | Даты изменения цены. |
| <Context> | Pricing (Live Pricing Queries only) | <Context> | Для запросов цен в режиме реального времени указывает определенные параметры, в соответствии с которыми выполняется запрос. Дочерние элементы:
Элемент |
| <FirstDate> | Pricing | Date | Дата начала для диапазона маршрутов, к которым применяется цена. Этот элемент используется только для запросов цен в диапазоне дат заезда, которые применяются вместе с измененными ценами. |
| <HotelInfoProperties> | Metadata | string | Один или несколько объектов, для которых Google запрашивает обновленные метаданные номеров и пакетов номеров в сообщении Query.
Этот элемент может содержать один или несколько элементов <Property>, в которых указываются идентификаторы гостиниц. |
| <LastDate> | Pricing | Date | Дата окончания диапазона маршрутов, к которым применяется цена. Этот элемент используется только для запросов цен в диапазоне дат заезда, которые отправляются с помощью Pull + Hints. |
| <Nights> | Pricing | integer | Количество ночей для определенного маршрута (не более 30). |
| <PropertyList> | Pricing | Object | Один или несколько идентификаторов гостиниц, для которых нужно обновить цены. Каждую гостиницу следует указывать с использованием элемента <PropertyList> <Property>pid1</Property> <Property>pid2</Property> </PropertyList> |
Примеры
Запрос цены
Ниже приведен пример сообщения-запроса, в котором запрашивается обновление цен для нескольких гостиниц на три ночи с заездом 23 мая 2023 г.
<?xml version="1.0" encoding="UTF-8"?>
<Query>
<Checkin>2023-05-23</Checkin>
<Nights>3</Nights>
<PropertyList>
<Property>pid5</Property>
<Property>pid8</Property>
<Property>pid13</Property>
<Property>pid21</Property>
</PropertyList>
</Query>
Запрос цен в режиме реального времени
Ниже приведен пример запроса цен в режиме реального времени с ограничением времени ответа в 500 миллисекунд.
<?xml version="1.0" encoding="UTF-8"?>
<Query latencySensitive="true">
<Checkin>2017-06-07</Checkin>
<Nights>5</Nights>
<DeadlineMs>500</DeadlineMs>
<PropertyList>
<Property>8675309</Property>
</PropertyList>
<Context>
<Occupancy>4</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
<Children>
<Child age="8"/>
<Child age="5"/>
</Children>
</OccupancyDetails>
<UserCountry>US</UserCountry>
<UserDevice>mobile</UserDevice>
</Context>
</Query>
С контекстным запросом
<?xml version="1.0" encoding="UTF-8"?>
<Query>
<Checkin>2023-05-23</Checkin>
<Nights>2</Nights>
<PropertyContextList>
<PropertyContext>
<Property>8675309</Property>
<!-- In the future, device might be specified -->
<Context><UserCountry>US</UserCountry></Context>
<Context><UserCountry>GB</UserCountry></Context>
</PropertyContext>
<PropertyContext>
<Property>8675310</Property>
<Property>8675311</Property>
<Context><UserCountry>CA</UserCountry></Context>
</PropertyContext>
</PropertyContextList>
</Query>
С контекстным ответом
В примере ниже показано, как установить базовый тариф unavailable(-1) для одноместного размещения и вложить тарифы в элемент <Occupancy>.
<?xml version="1.0" encoding="UTF-8"
<Transaction id="Wtdj8QoQIWcAAbaTGlIAAAC4" timestamp="2025-11-19T18:36:48Z">
<Result>
<Property>6781291</Property>
<Checkin>2026-01-15</Checkin>
<Nights>1</Nights>
<!-- Base rate is set to -1 to indicate unavailability for the default (2-person) occupancy -->
<Baserate currency="USD">-1</Baserate>
<Tax currency="USD">0</Tax>
<OtherFees currency="USD">0</OtherFees>
<Rates>
<!-- Nested Rate for Single Occupancy -->
<Rate rate_rule_id="rule-951">
<Occupancy>1</Occupancy>
<OccupancyDetails>
<NumAdults>1</NumAdults>
</OccupancyDetails>
<Baserate currency="USD">150.00</Baserate>
<Tax currency="USD">15.00</Tax>
<OtherFees currency="USD">5.00</OtherFees>
</Rate>
<!-- Other nested rates for different occupancies or room types could be included here if available -->
</Rates>
</Result>
</Transaction>
Запрос метаданных
<?xml version="1.0" encoding="UTF-8"?>
<Query>
<HotelInfoProperties>
<Property>pid5</Property>
<Property>pid8</Property>
<Property>pid13</Property>
<Property>pid21</Property>
</HotelInfoProperties>
</Query>
Дополнительные примеры, в том числе запросы цен для диапазона дат проживания и диапазона дат заезда, можно найти в статье Примеры сообщений Query.
<Context>
Элемент <Context> содержит информацию о Live pricing query, в том числе о количестве и типе гостей, стране и устройстве пользователя.
Несколько значений <Context> не будут использоваться для разных стран или устройств пользователей. Если для запроса используется несколько значений <Context> для нескольких вариантов количества гостей, укажите цену для каждого варианта количества гостей в отдельном пакете услуг для номера для соответствующего объекта или программы пребывания. Для каждого объекта или маршрута должен быть один блок <Result> с ценами для разного количества гостей.
Подробные сведения об ответе на запрос <Context> можно найти в разделе <OccupancyDetails>.
Синтаксис
Элемент <Context> использует следующий синтаксис:
Синтаксис
<?xml version="1.0" encoding="UTF-8"?>
<Query latencySensitive="true_or_false">
<Checkin>date</Checkin>
<Nights>number_of_nights</Nights>
<DeadlineMs>number_of_milliseconds</DeadlineMs>
<PropertyList>
<Property>property_ID</Property>
</PropertyList>
<Context>
<Occupancy>total_number_of_guests</Occupancy>
<OccupancyDetails>
<NumAdults>number_of_adults</NumAdults>
<Children>
<Child age=age_of_one_child_guest/>
<Child age=age_of_one_child_guest/>
</Children>
</OccupancyDetails>
<UserCountry>end_user_country</UserCountry>
<UserDevice>user_device_type</UserDevice>
</Context>
</Query>
Дочерние элементы
Элемент <Context> содержит следующие дочерние элементы:
| Дочерний элемент | Тип запроса | Тип | Описание |
|---|---|---|---|
| <Occupancy> | Pricing | integer | Общее количество гостей. Хотя это и не обязательно, запросы с Примечание. |
| <OccupancyDetails> | Pricing | Object | Предшествует <Occupancy>. Указывает тип гостей, в том числе:
Хотя это и не обязательно, запросы с элементом Примечание. |
| <UserCountry> | Pricing | string | Фильтрация тарифов по стране, в которой находится пользователь. Значение представляет собой двухбуквенный код страны, например Запросы с определенным элементом |
| <UserDevice> | Pricing | string | Фильтрация цен по типу устройства, с которого пользователь выполняет поиск. Возможные значения:
Запросы с определенным элементом |
Примеры
Вместимость
Ниже приведен пример запроса цен в режиме реального времени для <Occupancy> в <Context>. Запрос цен в режиме реального времени отправлен для трех взрослых гостей.
<?xml version="1.0" encoding="UTF-8"?>
<Query latencySensitive="true">
<Checkin>2017-06-07</Checkin>
<Nights>4</Nights>
<DeadlineMs>500</DeadlineMs>
<PropertyList>
<Property>45617</Property>
</PropertyList>
<Context>
<Occupancy>3</Occupancy>
<UserCountry>US</UserCountry>
<UserDevice>mobile</UserDevice>
</Context>
</Query>
Сведения о количестве гостей
В примере ниже показан запрос цен в режиме реального времени с элементом <OccupancyDetails> внутри <Context>.
Запрос цен в режиме реального времени отправлен для четырех гостей, двое из которых дети. Требуется цена для гостя из США, который бронирует номер с мобильного устройства.
<?xml version="1.0" encoding="UTF-8"?>
<Query latencySensitive="true">
<Checkin>2017-06-07</Checkin>
<Nights>5</Nights>
<DeadlineMs>500</DeadlineMs>
<PropertyList>
<Property>8675309</Property>
</PropertyList>
<Context>
<Occupancy>4</Occupancy>
<OccupancyDetails>
<NumAdults>2</NumAdults>
<Children>
<Child age="4"/>
<Child age="12"/>
</Children>
</OccupancyDetails>
<UserCountry>US</UserCountry>
<UserDevice>mobile</UserDevice>
</Context>
</Query>
Несколько контекстов
В примере ниже показано, как использовать дополнительный элемент <Context> в запросе цен в режиме реального времени.
<?xml version="1.0" encoding="UTF-8"?>
<Query latencySensitive="true">
<Checkin>2017-06-07</Checkin>
<Nights>4</Nights>
<DeadlineMs>500</DeadlineMs>
<PropertyList>
<Property>45617</Property>
</PropertyList>
<Context>
<Occupancy>3</Occupancy>
<UserCountry>US</UserCountry>
<UserDevice>mobile</UserDevice>
</Context>
<Context>
<Occupancy>6</Occupancy>
<OccupancyDetails>
<NumAdults>4</NumAdults>
<Children>
<Child age="6"/>
<Child age="10"/>
</Children>
</OccupancyDetails>
<UserCountry>US</UserCountry>
<UserDevice>mobile</UserDevice>
</Context>
</Query>