Подробнее можно узнать в нашей специальной статье [http://support.nemo.travel/ru/%D0%90%D0%B3%D0%B5%D0%BD%D1%82%D1%81%D0%BA%D0%B8%D0%B9_API_%D0%9E%D1%82%D0%B5%D0%BB%D0%B5%D0%B9 Агентский АПИ отелей]
==== Бронирование ====
<div class="toccolours mw-collapsible mw-collapsed" style="width:1000px">
===== Запрос =====
<div class="mw-collapsible-content">
Схема запроса позволяет указывать несколько услуг для бронирования сразу. Это было сделано с заделом на возможность расширения функциональности в будущем при сохранении совместимости.
Сейчас же необходимо указывать только 1 услугу-отель (элемент Item) в запросе на бронирование.
Для успешного запроса нужно указать:
#Услугу. В запросе не требуется перечислять все параметры из результатов поиска, достаточно указать уникальный ID результата.
#Информация о клиентах. Все клиенты перечисляются в отдельной ветке и нумеруются по порядку. Указатели (элементы с номером клиента), также добавляются в описание услуги.
#Заказчик. Указатель на одну персону.
'''WSDL''' (тестовый сервер): http://tst.nemo-ibe.com/wsdev/wsdl.php?for=Booking
<syntaxhighlight lang="xml" line enclose="div" style="font-size:9pt;background: #F9F9F9; border: 1px dashed #2F6FAB; padding: 10px 5px; margin: 10px 0;">
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ver="http://tst.nemo-ibe.com/wsdev/?version%3D1.0%26for%3DBooking">
<soapenv:Header/>
<soapenv:Body>
<ver:booking>
<RequestBin>
<Request>
<Booking>
<Items>
<!--Zero or more repetitions:-->
<Item>
<!--You have a CHOICE of the next 3 items at this level-->
<HotelBookData>
<CacheId>1872666</CacheId>
<CategoryId>1</CategoryId>
<Rooms>
<!--Zero or more repetitions:-->
<Room Id="2">
<Persons>
<!--Zero or more repetitions:-->
<Person Number="1"/>
<Person Number="2"/>
</Persons>
</Room>
<Room Id="1">
<Persons>
<!--Zero or more repetitions:-->
<Person Number="3"/>
</Persons>
</Room>
</Rooms>
</HotelBookData>
<Customer>
<Person Number="1"/>
</Customer>
</Item>
</Items>
<Persons>
<!--Zero or more repetitions:-->
<Person Number="1" Type="ADT">
<!--Optional:-->
<Lastname>IVANOV</Lastname>
<!--Optional:-->
<Name>IVAN</Name>
<!--Optional:-->
<Middlename>IVANOVICH</Middlename>
<!--Optional:-->
<DateOfBirth>1987-12-12</DateOfBirth>
<!--Optional:-->
<Phone>+79871231212</Phone>
<!--Optional:-->
<Email>m.rudenko@mute-lab.com</Email>
<!--Optional:-->
<Gender>MR</Gender>
<!--Optional:-->
<Document Type="P">
<Series>1811</Series>
<Number>912219</Number>
<!--Optional:-->
<IssueDate>2012-12-12</IssueDate>
<!--Optional:-->
<ExpiryDate>2014-12-12</ExpiryDate>
</Document>
</Person>
<Person Number="2" Type="CHD">
<!--Optional:-->
<Lastname>PETROV</Lastname>
<!--Optional:-->
<Name>IVAN</Name>
<!--Optional:-->
<Middlename>MIKHAILOVICH</Middlename>
<!--Optional:-->
<DateOfBirth>2008-12-12</DateOfBirth>
<!--Optional:-->
<Phone>+79871231212</Phone>
<!--Optional:-->
<Email>m.rudenko@mute-lab.com</Email>
<!--Optional:-->
<Gender>MR</Gender>
<!--Optional:-->
<Document Type="P">
<Series>1866</Series>
<Number>913319</Number>
<!--Optional:-->
<IssueDate>2012-12-12</IssueDate>
<!--Optional:-->
<ExpiryDate>2014-12-12</ExpiryDate>
</Document>
</Person>
<Person Number="3" Type="ADT">
<!--Optional:-->
<Lastname>SIDOROV</Lastname>
<!--Optional:-->
<Name>IVAN</Name>
<!--Optional:-->
<Middlename>SERGEEVICH</Middlename>
<!--Optional:-->
<DateOfBirth>1987-12-12</DateOfBirth>
<!--Optional:-->
<Phone>+79871231212</Phone>
<!--Optional:-->
<Email>m.rudenko@mute-lab.com</Email>
<!--Optional:-->
<Gender>MR</Gender>
<!--Optional:-->
<Document Type="P">
<Series>1866</Series>
<Number>913319</Number>
<!--Optional:-->
<IssueDate>2012-12-12</IssueDate>
<!--Optional:-->
<ExpiryDate>2014-12-12</ExpiryDate>
</Document>
</Person>
</Persons>
</Booking>
</Request>
<Source>
<ClientId></ClientId>
<APIKey></APIKey>
<Language>ru</Language>
<Currency>RUB</Currency>
</Source>
</RequestBin>
</ver:booking>
</soapenv:Body>
</soapenv:Envelope>
</syntaxhighlight>
Элемент '''Booking'''
{| style="width: 800px" class="wikitable"
|-
! scope="col" width="200" | Элемент
! scope="col" width="300" | Описание
! scope="col" width="300" | Допустимые значения
|-
| Items
| Обязательный. Массив элементов Item.
| Элемент Item
|-
| Customer
| Обязательный. Элемент установки заказчика.
|
|-
| Persons
| Обязательный. Массив клиентов.
|
|}
Данные об услугах записываются в элементы <Item>.
Элемент '''Item'''
{| style="width: 800px" class="wikitable"
|-
! scope="col" width="200" | Элемент
! scope="col" width="300" | Описание
! scope="col" width="300" | Допустимые значения
|-
| HotelBookData
| Обязательный. В зависимости от типа объекта бронирования. В данный момент возможно указать только данные для отеля.
|
|-
| Persons
| Необязательный. Привязка клиентов к услуге. Если не указаны, будут привязаны все из указанных в главном элементе Booking.
| [<Person Number=''"1"'' />]
|}
<u>Бронирование отеля.</u>
Для бронирования отеля необходимы следующие параметры:
# ID результата поиска - один отель
# ID выбранной категории этого отеля
# Распределение клиентов по комнатам.
Элемент '''HotelBookData'''
{| style="width: 800px" class="wikitable"
|-
! scope="col" width="200" | Элемент
! scope="col" width="300" | Описание
! scope="col" width="300" | Допустимые значения
|-
| CacheId
| Обязательный. Идентификатор результата поиска для данного отеля в системе Nemo.
| Целое число
|-
| CategoryId
| Обязательный. Идентификатор категории.
| Целое число
|-
| Rooms
| Обязательный. Распределение клиентов по комнатам.
| Список элементов Room
|-
| Room
| Атрибут Id
Ид комнаты из результата поиска
Элемент Persons
| Целое число
|-
| Persons
| Обязательный.
Список людей
| Список элементов Person
|-
| Person
| Обязательный.
Атрибут Number
Номер пассажира из Booking ->Persons->Person->Number
|
Целое число
|}
<u>Информация о клиентах.</u>
Для успешного завершения бронирования нужно указать как минимум одного клиента. Максимальное число клиентов в текущей версии не ограничено.
Набор обязательных данных может меняться в зависимости от типов услуг в бронировании. Рекомендуемый набор обязательных параметров: Lastname, Name, DateOfBirth. Остальные обязательные параметры будут устанавливаться индивидуально при подключении к сервису.
Элемент '''Person'''
{| style="width: 800px" class="wikitable"
|-
! scope="col" width="200" | Элемент
! scope="col" width="300" | Описание
! scope="col" width="300" | Допустимые значения
|-
| Атрибут Number
| Обязательный. Номер клиента, необходим для правильной привязки к услугам.
| Целое число
|-
| Type
| Обязательный.
Тип пассажира.
| Строка.
Возможные значения:
ADT
CLD
INF
|-
| Lastname
| Фамилия.
| Строка в произвольном формате.
|-
| Name
| Имя.
| Строка в произвольном формате.
|-
| Middlename
| Отчество.
| Строка в произвольном формате.
|-
| DateOfBirth
| Дата рождения.
| Формат гггг-мм-дд.
|-
| Phone
| Телефон.
Рекомендуемый формат:
+79871234567
| Строка
|-
| Email
| Электронный адрес.
| Строка
|-
| Gender
| Пол.
| MR - мужчина,
MS - женщина.
|-
| Document
| Документ
| Элемент Document
|}
Для некоторых услуг может потребоваться информация о документах.
Элемент '''Document'''
{| style="width: 800px" class="wikitable"
|-
! scope="col" width="200" | Элемент
! scope="col" width="300" | Описание
! scope="col" width="300" | Допустимые значения
|-
| Атрибут Type
| Обязательный. Тип документа.
| P - загранпаспорт
C - внутренний гражданский паспорт
B - свидетельство о рождении
|-
| Series
| Необязательный. Серия документа. Можно указать слитно с номером в Number.
| Строка в произвольном формате
|-
| Number
| Обязательный. Номер документа.
| Строка в произвольном формате
|-
| IssueDate
| Необязательный. Дата выдачи документа.
| Формат гггг-мм-дд
|-
| ExpiryDate
| Необязательный. Дата истечения срока действия документа.
| Формат гггг-мм-дд
|}
Элемент '''Source'''
{| style="width: 800px" class="wikitable"
|-
! scope="col" width="200" | Элемент
! scope="col" width="300" | Описание
! scope="col" width="300" | Допустимые значения
|-
| ClientID
| Обязательный. ID клиента в системе Nemo.
Можно посмотреть/добавить в "Администрирование" ⇨ "Веб-служба. Авторизация".
| Целое число.
|-
| APIKey
| Обязательный. APIKey - секретный ключ доступа к API Nemo.
Можно посмотреть/добавить в "Администрирование" ⇨ "Веб-служба. Авторизация".
| Латинские буквы и цифры. Всего 32 символа.
|}
</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed" style="width:1000px">
===== Ответ =====
<div class="mw-collapsible-content">
После выполнения запроса сразу поступит информация о бронировании. В первую очередь нужно внимательно проверить статусы <Status> всех услуг в бронировании. Если бронировалась услуга со статусом в результатах поиска RQ (по запросу), то статус скорее всего будет не равен «booked». Через некоторое время проверять реальный статус бука отправляя запрос на чтение данных о бронировании.
<syntaxhighlight lang="xml" line enclose="div" style="font-size:9pt;background: #F9F9F9; border: 1px dashed #2F6FAB; padding: 10px 5px; margin: 10px 0;">
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://tst.nemo-ibe.com/wsdev/?version%3D1.0%26for%3DBooking"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<ns1:bookingResponse>
<ResponseBin>
<Response>
<Booking>
<Items>
<Item Id="386610">
<Hotel Id="1872666">
<Supplier>GTA</Supplier>
<CityId>22046</CityId>
<DateBegin>2013-10-15</DateBegin>
<DateEnd>2013-10-18</DateEnd>
<CacheId>1872666</CacheId>
<Name>ADLON KEMPINSKI</Name>
<Categories>
<Category Id="1">
<Rooms>
<Room Count="1" Id="1" ServiceId="1"/>
<Room Count="1" Id="2" ServiceId="2"/>
</Rooms>
<TotalPrice Currency="RUB">74733.84</TotalPrice>
</Category>
</Categories>
<Services>
<Service Id="1" Status="OK">
<Desc>Standard Twin</Desc>
<Meal>Full Breakfast</Meal>
<Price Currency="RUB">37366.92</Price>
</Service>
<Service Id="2" Status="OK">
<Desc>Standard Twin</Desc>
<Meal>Full Breakfast</Meal>
<Price Currency="RUB">37366.92</Price>
</Service>
</Services>
<Rooms>
<Room Id="1" Type="TWIN"/>
<Room Id="2" Type="SNGL"/>
</Rooms>
</Hotel>
<Type>HOTELS</Type>
<Status>waiting</Status>
<Prices>
<Price Currency="RUB">74733.84</Price>
<Charges Currency="RUB">0</Charges>
<Commission Currency="RUB">0</Commission>
<Penalty Currency="RUB">0</Penalty>
<TotalPrice Currency="RUB">74733.84</TotalPrice>
</Prices>
<Dates>
<BookingDate>2013-08-01 19:49:56</BookingDate>
<UpdateDate>2013-08-01 19:49:57</UpdateDate>
<CancelDate xsi:nil="true"/>
<PenaltyDate>2013-07-31 19:10:37</PenaltyDate>
<AutoCancelDate>2013-08-01 19:51:56</AutoCancelDate>
<ConfirmationLimit/>
</Dates>
<Statuses>
<PaymentStatus>1</PaymentStatus>
<DocumentStatus>1</DocumentStatus>
<DeliveryStatus>1</DeliveryStatus>
<InvoiceStatus>1</InvoiceStatus>
<ProblemStatus>1</ProblemStatus>
</Statuses>
<Customer>
<Person Number="1"/>
</Customer>
<Persons>
<Person Number="1"/>
<Person Number="2"/>
<Person Number="3"/>
</Persons>
</Item>
</Items>
<Persons>
<Person Number="1">
<Lastname>IVANOV</Lastname>
<Name>IVAN</Name>
<Middlename>IVANOVICH</Middlename>
<DateOfBirth xsi:nil="true"/>
<Phone>+79871231212</Phone>
<Email>m.rudenko@mute-lab.com</Email>
<Gender xsi:nil="true"/>
<Document Type="P">
<Series>1811</Series>
<Number>912219</Number>
<IssueDate>2012-12-12 00:00:00</IssueDate>
<ExpiryDate>2014-12-12 00:00:00</ExpiryDate>
</Document>
</Person>
<Person Number="2">
<Lastname>PETROV</Lastname>
<Name>IVAN</Name>
<Middlename>MIKHAILOVICH</Middlename>
<DateOfBirth xsi:nil="true"/>
<Phone>+79871231212</Phone>
<Email>m.rudenko@mute-lab.com</Email>
<Gender xsi:nil="true"/>
<Document Type="P">
<Series>1866</Series>
<Number>913319</Number>
<IssueDate>2012-12-12 00:00:00</IssueDate>
<ExpiryDate>2014-12-12 00:00:00</ExpiryDate>
</Document>
</Person>
<Person Number="3">
<Lastname>SIDOROV</Lastname>
<Name>IVAN</Name>
<Middlename>SERGEEVICH</Middlename>
<DateOfBirth xsi:nil="true"/>
<Phone>+79871231212</Phone>
<Email>m.rudenko@mute-lab.com</Email>
<Gender xsi:nil="true"/>
<Document Type="P">
<Series>1866</Series>
<Number>913319</Number>
<IssueDate>2012-12-12 00:00:00</IssueDate>
<ExpiryDate>2014-12-12 00:00:00</ExpiryDate>
</Document>
</Person>
</Persons>
</Booking>
</Response>
</ResponseBin>
</ns1:bookingResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
</syntaxhighlight>
Структура ответа очень похожа на запрос. Выделяются те же основные элементы.
Элемент '''Booking'''
{| style="width: 800px" class="wikitable"
|-
! scope="col" width="200" | Элемент
! scope="col" width="300" | Описание
! scope="col" width="300" | Допустимые значения
|-
| Items
| Обязательный. Содержит элемент(ы) Item.
| Элемент Item
|-
| Persons
| Обязательный. Здесь перечислены все клиенты заказа.
| Элемент Person
|}
В элементах Item раскрывается подробнейшая информация об одной услуге в бронировании.
Элемент '''Item'''
{| style="width: 800px" class="wikitable"
|-
! scope="col" width="200" | Элемент
! scope="col" width="300" | Описание
! scope="col" width="300" | Допустимые значения
|-
| Атрибут Id
| Обязательный.
Номер заказа в системе Nemo.
| Целое число
|-
| Type
| Обязательный.
Тип объекта бронирования.
| HOTELS
|-
| Status
| Обязательный. Статус объекта бронирования .
| booked - забронирован
cancelled - аннулирован
pending confirmation - в процессе подтверждения
pending – произошла попытка бронирования, которое не было завершено
waiting – ожидается результат запроса на бронирование
|-
| Prices
| Обязательный. Данные о ценах.
| см. Элемент Prices
|-
| Dates
| Обязательный. Данные о датах.
| см. Элемент Dates
|-
| Statuses
| Обязательный. Различные дополнительные статусы заказанной услуги.
| см. Элемент Statuses
|-
| Persons
| Обязательный. Содержит клиентов привязанных к услуге.
| элементы Person
|-
| Hotel
| Необязательный. Элемент с данными об отеле.
| см. элемент Hotel (результат поиска отеля)
|}
Информация о цене услуги вынесена в отдельную ветку:
Элемент '''Prices'''
{| style="width: 800px" class="wikitable"
|-
! scope="col" width="200" | Элемент
! scope="col" width="300" | Описание
! scope="col" width="300" | Допустимые значения
|-
| Price
| Обязательный. Базовая цена услуги.
| Вещественное число.
Атрибут Currency - код валюты.
|-
| Charges
| Необязательный. Сумма дополнительных сборов.
| Вещественное число.
Атрибут Currency - код валюты.
|-
| Commission
| Необязательный. Сумма комиссий (вычитается из общей стоимости).
| Вещественное число.
Атрибут Currency - код валюты.
|-
| Penalty
| Необязательный. Сумма штрафов.
| Вещественное число.
Атрибут Currency - код валюты.
|-
| TotalPrice
| Обязательный. Итоговая стоимость.
= Price + Charges + Commission
| Вещественное число.
Атрибут Currency - код валюты.
|}
Информация о датах услуги также вынесена в отдельную ветку:
Элемент '''Dates'''
{| style="width: 800px" class="wikitable"
|-
! scope="col" width="200" | Элемент
! scope="col" width="300" | Описание
! scope="col" width="300" | Допустимые значения
|-
| BookingDate
| Обязательный. Дата бронирования.
| Формат гггг-мм-дд чч:мм:сс
|-
| UpdateDate
| Необязательный. Дата обновления.
| Формат гггг-мм-дд чч:мм:сс
|-
| CancelDate
| Необязательный. Дата аннуляции.
| Формат гггг-мм-дд чч:мм:сс
|-
| PenaltyDate
| Необязательный. Дата наступления штрафов.
| Формат гггг-мм-дд чч:мм:сс
|-
| AutoCancelDate
| Необязательный. Дата автоаннулирования.
| Формат гггг-мм-дд чч:мм:сс
|}
Дополнительные статусы:
Элемент '''Statuses'''
{| style="width: 800px" class="wikitable"
|-
! scope="col" width="200" | Элемент
! scope="col" width="300" | Описание
! scope="col" width="300" | Допустимые значения
|-
| PaymentStatus
| Необязательный.
Статус оплаты.
| Целое число
1 - неоплачено
2 - частично оплачено
3 - оплачено
|-
| DocumentStatus
| Необязательный.
Статус ваучера.
| Целое число
1 - документ не сформирован
2 - документ сформирован
|-
| DeliveryStatus
| Необязательный.
Статус доставки.
| Целое число
1 - не доставлен
2 - доставлен
|-
| InvoiceStatus
| Необязательный.
Статус счета.
| Целое число
1 - счет выставлен.
2 - счет не выставлен.
|}
Информация о клиентах заказа полностью повторяет структуру запроса.
</div>
</div>