Спецификация метода HotelGeoTreeInitialize

Пример вызова


Протокол: HTTP POST
Адресная строка: api/HotelTreeInitialize/Execute


Метод апи: Execute
Аналогичен одноименному методу с передаваемым запросом в виде единого XML

Информация о запросе

Ниже приведены параметры запроса и их краткое описание

Параметры запроса

Название параметраОписаниеТИП
req Объект HotelGeoSearchRequest инициализации дерева поиска

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" ?>
<HotelGeoSearchRequest SecurityKey="XXX" id_Profile="XXX" IsTest="false" DateRequestStarted="2017-11-13T14:05:31.8835519+03:00" LocationName="Unknown">
  <IsTest>false</IsTest>
  <SystemInformation />
  <Adults>1</Adults>
  <Date>20.11.2017 0:00:00</Date>
  <id_ProviderGroup>6</id_ProviderGroup>
  <Nights>1</Nights>
  <ChildAges />
  <Lattitude>55.7522</Lattitude>
  <Longitude>37.6156</Longitude>
  <Radius>10000</Radius>
</HotelGeoSearchRequest>

Пример успешного ответа

<?xml version="1.0" encoding="utf-8" ?>
<Response HasErrors="false" HasWarnings="false">
  <EngineResponse>
    <HotelTreeResponse>
      <Errors />
      <HotelTree Date="2017-07-22T00:06:35.308279+03:00" TreeID="e8c1701e5609ce7138f241f1a7d937b5">
        <States />
        <Items />
      </HotelTree>
    </HotelTreeResponse>
  </EngineResponse>
  <Errors />
  <Warnings />
</Response>

В данном ответе нас интересует значение атрибута TreeID: treeId="e8c1701e5609ce7138f241f1a7d937b5" - оно будет нужно для асинхронного переопроса списка отелей.

Примеры ошибок

Системная ошибка

Выдается в случае неверного набора входных параметров, например, пропущен какой-то обязательный параметр или передан неверный тип данных

<?xml version="1.0" encoding="utf-8" ?>
<Error>
  <Message>The request is invalid.</Message>
  <MessageDetail>The parameters dictionary contains a null entry for parameter 'id_Profile' of non-nullable type 'System.Int32' for method 'System.Net.Http.HttpResponsemessage HotelTreeInitialize(Double, Double, System.DateTime, System.DateTime, Double, Int32, Int32, Int32, Int32, System.String, Boolean)' in 'HotelEngineAPI.Controllers.HotelEngineController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.</MessageDetail>
</Error>

Логическая ошибка

Возникает в том случае, если переданы неверные данные, например, передан неверный идентификатор финансового профиля.

<?xml version="1.0" encoding="utf-8" ?>
<Response HasErrors="true" HasWarnings="false">
  <EngineResponse>
    <HotelTreeResponse>
      <Errors />
    </HotelTreeResponse>
  </EngineResponse>
  <Errors>
    <Error>Дата заезда должна быть больше или равна сегодняшнего дня</Error>
  </Errors>
  <Warnings />
</Response>

Ошибка уровня движка

Возникает в том случае, если при исполнении входного запроса на уровне движка произошла какая-то ошибка

<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8" ?>
<Response HasErrors="true" HasWarnings="false">
  <EngineResponse>
    <HotelTreeResponse>
      <Errors>
        <Error>Служба поиска гостиниц временно недоступна, попробуйте повторить свой запрос позже.</Error>
      </Errors>
    </HotelTreeResponse>
  </EngineResponse>
  <Warnings />
</Response>