Спецификация метода HotelGeoTreeInitialize
Пример вызова
Протокол: HTTP GET
Адресная строка: api/hoteltreeinitialize/index?latitude={latitude}&longitude={longitude}&dateStart={dateStart}&dateEnd={dateEnd}&radius={radius}&adults={adults}&id_Profile={id_Profile}&id_ProviderGroup={id_ProviderGroup}&securityKey={securityKey}&children={children}&childAges={childAges}&mock={mock}
Первый метод, при помощи которого следует начинать работу с отельным движком.
Производит поиск гостиниц по всем доступным агенту поставщикам, данный метод инициализирует этот поиск и возвращает только идентификатор дерева отелей - контейнера,
содержащего в себе варианты размещения с заданными параметрами.
В том случае, если пользователь менее часа назад производил поиск с указанными параметрами, система также может вернуть сформированное дерево отелей (полный
ответ метода HotelTreeResults).
Информация о запросе
Ниже приведены параметры запроса и их краткое описание
Параметры запроса
| Название параметра | Описание | ТИП |
|---|---|---|
| latitude | широта точки, относительно которой делаем поиск |
GET. |
| longitude | долгота точки, относительно которой делаем поиск |
GET. |
| dateStart | дата заезда, гггг-ММ-дд |
GET. |
| dateEnd | дата выезда, гггг-ММ-дд |
GET. |
| radius | радиус в км, в котором ищем отели |
GET. |
| adults | количество взрослых в одном номере |
GET. |
| id_Profile | идентификатор финансового профиля для применения сборов |
GET. |
| id_ProviderGroup | идентификатор агента |
GET. |
| securityKey | ключ для доступа к сервису, предоставляется по запросу на support@corteos.ru |
GET. |
| children | количество детей в номере |
GET. |
| childAges | возраст детей, числа, через запятую: например, если едет один ребенок 10 лет и один - 12, надо передать строку "10,12". Возраст детей нужно вычислять на дату выезда. |
GET. |
| mock | использовать в ответе фиктивные данные для разработки |
GET. |
Описание работы сервиса
Диаграмма бизнес-процесса
Сервис HotelTreeInitialize является первым шагом бизнес-процесса поиска гостиниц, он возвращает идентификатор отельного дерева, которое потом следует переопрашивать методом HotelTreeResults.
Пояснения к заданным вопросам
Вопрос: Сколько нужно подождать секунд после получения TreeID перед тем как отправить запрос переопроса дерева?
Ответ: Зависит от используемых поставщиков. После получения клиентом TreeID система отправляет запросы к поставщикам. Поставщики отвечают постепенно: одни выдают все результаты сразу, другие - по частям. Соответственно, как только поставщик отдаст свой ответ, он добавится в дерево, при переопросе дерева можно получить уже то, что пришло от поставщиков.
Вопрос: В случае, если у клиента не сервер не на платформе .NET, нужно ли запрашивать временную метку сервера Кортеос или это необязательно и клиент может использовать временную метку своего сервера?
Ответ: Временная метка (Timestamp) необходима для получения разницы данных (все, что пришло в дерево) с момента последнего обращения к системе Кортеос АПИ.
Вопрос: Вернутся ли все результаты или только первая их часть при первом запросе HotelTreeResults с параметром timestamp = 0?
Ответ: При первом запросе вернутся все данные, содержащиеся в дереве. В данном случае первая часть == все результаты.
Вопрос: Какое значение нужно передавать параметру timestamp при переоопросе дерева повторными запросами HotelTreeResults?
Ответ: Переопросы дерева делаются до тех пор пока параметр IsFinished = false. Можно передать значение, полученное в ответе на предыдущий запрос. Однако рекомендуется передать максимальное значения атрибута Timestamp элементов HotelTreeItem.
Вопрос: При передаче параметра timestamp с максимальным значение атрибута Timestamp элементов HotelTreeItem один и тот же отель может присутствовать в разных порциях несколько раз. При передаче timestamp = 0 дублирования результатов не наблюдается. Как это объяснить?
Ответ: например, у имеется Отель 1, который есть у Поставщика 1 (цена 1000 р) и Поставщика 2 (цена 2000 р). При инициализации поиска по дереву, делается первый переопрос — на этот момент ответил только Поставщик 1 и вернулось предложение с ценой 1000 рублей. Далее вычисляется временная метка и после паузы в Х секунд делается второй переопрос — к этому моменту Кортеос получил вариант Отеля 1 от Поставщика 2 с худшей ценой. Поскольку у Поставщика 2 цена выше — то Кортеос просто дописал его Accessor в коллекцию Accessors, после чего обновил временную метку и вернул клиенту Отель 1, который содержит уже 2 акссессора. Также имеется специфика специфика у Хотелбука. Хотелбук является агрегатором, и может вернуть тот же отель в другой порции с более высокой ценой, но тем же акссесором — в нашем случае эта цена игнорируется, тем не менее временная метка обновляется Для маппинга отелей в рамках одного поиска есть поле AccessKey, его можно использовать для корректного матчинга вариантов.
Пример успешного ответа
<?xml version="1.0" encoding="utf-8" ?>
<HotelTreeResponse>
<HotelTree Date="2024-09-16T11:33:16.8094856+03:00" TreeID="a5502c451c0f0577c2dceeab41b69453">
<States/>
<Items/>
<SearchFilterParameters Latitude="55.7522" Longitude="37.6156" id_city="0" Radius="10000"/>
</HotelTree>
</HotelTreeResponse>
В данном ответе нас интересует значение атрибута TreeID: treeId="a5502c451c0f0577c2dceeab41b69453" - оно будет нужно для асинхронного переопроса списка отелей.
Примеры ошибок
Системная ошибка
Выдается в случае неверного набора входных параметров, например, пропущен какой-то обязательный параметр или передан неверный тип данных
<?xml version="1.0" encoding="utf-8" ?>
<HotelTreeResponse>
<Errors>
<Error>Не передан идентификатор финансового профиля клиента</Error>
</Errors>
</HotelTreeResponse>
Логическая ошибка
Возникает в том случае, если переданы неверные данные, например, передан неверный идентификатор финансового профиля.
<?xml version="1.0" encoding="utf-8" ?>
<HotelTreeResponse>
<Errors>
<Error>Дата заезда должна быть больше или равна сегодняшнего дня</Error>
</Errors>
</HotelTreeResponse>
Ошибка уровня движка
Возникает в том случае, если при исполнении входного запроса на уровне движка произошла какая-то ошибка
<?xml version="1.0" encoding="utf-8" ?>
<HotelTreeResponse>
<Errors>
<Error>Служба поиска гостиниц временно недоступна, попробуйте повторить свой запрос позже.</Error>
</Errors>
</HotelTreeResponse>
Тестовая форма
Заполните недостающие данные в тестовой форме и нажмите кнопку "отправить" для проверки работы запроса.