В этом разделе содержится справочная информация по сообщениям-запросам подсказок , сообщениям-ответам подсказок и сообщениям-запросам на основе XML от Google.
<Hint> (Сообщение-ответ с подсказкой)
Корневой элемент сообщения с подсказкой. Сообщения с подсказкой указывают, какие комбинации отелей или маршрутов следует переоценить. Это ваш ответ на сообщение с подсказкой от Google.
В сообщении с подсказкой-ответом следует указать только те отели, цены на которые изменились с момента последнего успешного получения Google ответа с ваших серверов.
В ответных сообщениях с подсказками используется один из следующих методов для указания того, какие отели и маршруты Google следует пересмотреть:
Точные маршруты : сочетание даты заезда и продолжительности пребывания.
Диапазоны дат заезда : указывает диапазон дат заезда, начиная с первой даты заезда и заканчивая последней датой заезда.
Разнообразные туры (или разнообразные маршруты )
Каждый из этих методов требует разного синтаксиса для сообщения-ответа с подсказкой.
Более подробную информацию см. в сообщениях с подсказками .
Синтаксис
Элемент <Hint> использует разный синтаксис в зависимости от типа сообщения-ответа подсказки:
Точные маршруты
Ниже показан синтаксис для точных маршрутов в сообщении-подсказке:
<!-- 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>
Диапазоны регистрации
Ниже показан синтаксис для диапазонов регистрации в сообщении с подсказкой:
<!-- 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>
Дальние пребывания
Ниже показан синтаксис для дальних остановок в сообщении с подсказкой:
<!-- 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 | Диапазоны регистрации и маршруты | Первая дата диапазона дат для сообщения с подсказкой о дате заезда или пребывания. Даты указаны включительно. |
| <Item> | Required | Object | Все | Контейнер для обновления отеля/маршрута. |
| <LastDate> | Required* | Date | Диапазоны регистрации и маршруты | Последняя дата диапазона дат для сообщения с подсказкой о заезде или пребывании. Даты указаны включительно. * Этот элемент является необязательным для дальних поездок. |
| <LengthOfStay> | Required | integer | Точные маршруты | Количество ночей в маршруте, выраженное положительным целым числом. |
| <Property> | Required | string | Все | Идентификатор отеля, использующий тот же идентификатор, что и в списке отелей . Количество элементов
|
| <Stay> | Required | Object | Точные маршруты | Контейнер для элементов <CheckinDate> и <LengthOfStay> в сообщении с подсказкой для точного маршрута. Каждый <Item> может содержать только один элемент <Stay> . |
| <StaysIncludingRange> | Required | Object | Маршруты с дальними расстояниями | Контейнер для элементов <FirstDate> и <LastDate> в сообщении-ответе с подсказкой о пребывании в диапазоне. |
Примеры
Точные маршруты
В следующем примере определяются несколько маршрутов для одного объекта недвижимости в сообщении с подсказкой:
<!-- 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>
Корневой элемент сообщения с запросом подсказки. Google отправляет сообщение с запросом подсказки на ваш сервер и ожидает ответа, в котором указаны отели и маршруты, цены на которые изменились с момента последнего успешного получения Google ответа с подсказкой от вашего сервера.
Если цены изменились, Google отправляет <Query> , который извлекает обновленные данные о ценах для указанных отелей и маршрутов.
Более подробную информацию можно найти в разделе «Сообщения с запросами подсказок» .
Синтаксис
Элемент <HintRequest> использует следующий синтаксис:
Синтаксис
<?xml version="1.0" encoding="UTF-8"?>
<HintRequest>
<LastFetchTime>last_fetch_time</LastFetchTime>
</HintRequest>
Атрибуты
Элемент <HintRequest> не имеет атрибутов.
Дочерние элементы
Элемент <HintRequest> имеет следующие дочерние элементы:
| Дочерний элемент | Тип | Описание |
|---|---|---|
| <LastFetchTime> | DateTime | В последний раз Google удалось получить ответное сообщение подсказки на запрос подсказки. Если это время старше, чем последний раз, когда вы обновляли цены на своем сервере, то вам следует отправить сообщение с подсказкой, указав, какие отели изменились. Если в последнее время не было ни одной успешной выборки, будет установлен фиксированный интервал (чтобы избежать более серьёзных проблем с большими задержками). Текущее фиксированное значение интервала составляет 1000 секунд, но может быть изменено. Более подробную информацию можно найти в разделе «Сообщения-подсказки» . |
Примеры
В следующем примере показано сообщение с запросом подсказки :
Сообщение с запросом подсказки
В следующем примере показано сообщение с запросом подсказки:
<?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 на обновление цен или метаданных. Они используются как в режиме доставки «Pull», так и в режиме «Changed pricing».
Сообщения с запросами цен
В сообщениях запроса цен указываются комбинации объектов недвижимости и маршрутов, для которых вы указываете цены.
Когда ваш сервер получает сообщение с запросом цен , он должен ответить сообщением <Transaction> , содержащим запрошенную информацию о ценах.
Более подробную информацию смотрите в разделе Обзор цен .
Существует три специальных типа сообщений- Query :
Актуальное ценообразование: Google отвечает на запрос пользователя, запрашивая обновление цен в режиме реального времени. Когда партнёры получают запрос
Live pricing query, они должны отправить сообщение<Transaction>, содержащее запрошенную информацию о ценах в элементах<Result>.С контекстным ценообразованием: Google обновляет кэш цен на основе исторически популярных контекстов. При получении запроса
With Context queryнеобходимо отправить ответное сообщение<Transaction>, содержащее запрошенную информацию о ценах в элементах<Result>.С контекстными запросами для одиночного размещения
При указании тарифов в ответе на запросы With Context следует отправлять только тариф, соответствующий указанному контексту. Для базовой ставки требуется минимум 2 гостя, поэтому, если в базовой ставке указан один житель, она будет проигнорирована и по-прежнему будет считаться двухместным размещением. В этом случае следует передать базовую ставку как недоступную и использовать вложенную ставку внутри запроса на одноместное размещение. См. пример ответа With Context . Вы можете использовать функцию Changed Pricing with Context для объединения тарифов, установив атрибут
mergeableв значение"true". Подробнее .Изменено ценообразование (ранее «Pull with Hints») с учетом контекста
Когда вы отправляете ответ на сообщение
<Transaction>на запрос «Измененные цены с контекстом», Google рассматривает его как полную замену информации о ценах и наличии мест для данного отеля или маршрута, а все тарифы, зависящие от контекста, исключаются из ответа и удаляются из кэша.Чтобы предотвратить перезапись, необходимо установить атрибут
mergeableв значение"true"в элементе<Result>сообщения<Transaction>. Google добавляет к курсам текущие кэшированные курсы для указанного контекста в ответе. Если атрибут mergeable не используется, необходимо отправить все курсы для всех применимых контекстов в ответе.Запрос цен в реальном времени с контекстом
Запрос Live Pricing с контекстом по умолчанию имеет свойство mergeable (объединяемый атрибут), поэтому настраивать этот атрибут не требуется. Вам нужно отправлять ставки только для конкретных контекстов, запрошенных Google, если все остальные контексты остаются неизменными. Если другие контексты изменились, необходимо явно отправить изменения для этих контекстов; в противном случае новые ставки не будут обновлены в кэше Google.
Метаданные: Google запрашивает обновления метаданных о номерах и пакетах номеров для указанных отелей. При получении запроса
Metadata Queryнеобходимо отправить ответное сообщение<Transaction>с данными о номерах и пакетах номеров в элементах<PropertyDataSet>. Подробнее см. в разделе Метаданные пакета номеров .
Синтаксис
Элемент <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 , обратитесь к своему техническому менеджеру по работе с клиентами (TAM).
Дочерние элементы
Элемент <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> |
Примеры
Запрос цен
В следующем примере показано сообщение запроса цен, которое запрашивает обновление цен для набора отелей, доступных в течение 3 ночей и начинающихся 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> . Запрос на определение цен в режиме реального времени рассчитан на 3 взрослых гостей.
<?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>
Подробности размещения
В следующем примере показан запрос ценообразования Live с тегом <OccupancyDetails> в <Context> . Запрос цен Live предназначен для 4 гостей, двое из которых — дети, и запрашивает цену, применимую к бронированию для гостей из США с мобильного устройства:
<?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>