Структура ответа#
Детальное описание структуры ответа от /api/avia/seat_book.
Успешный ответ#
При успешном бронировании мест возвращается пустой объект:
1{}Ответ не содержит ни статусов мест, ни номеров сопутствующих EMD (Electronic Miscellaneous Document, если место платное) — эти данные нужно запрашивать отдельно через /api/avia/pnr_retrieve, поле pnr.seats[].
Примеры ответов#
Успешное бронирование#
1{}Ответ с ошибкой (место недоступно для типа пассажира)#
1{
2 "error": {
3 "code": "SEAT_PRICE_NOT_FOUND_FOR_PAX_TYPE",
4 "message": "One or more requested seats are not available for the passenger type",
5 "description": "One or more requested seats are not available for the passenger type",
6 "errorId": "018c5f2e-9b3a-7f4d-8e2c-1a2b3c4d5e6f"
7 }
8}Ответ с ошибкой (некорректная ссылка)#
1{
2 "error": {
3 "code": "SEAT_REF_NOT_FOUND",
4 "message": "Passenger reference 'P9' not found in booking",
5 "description": "Passenger reference 'P9' not found in booking",
6 "errorId": "018c5f2e-9b3a-7f4d-8e2c-1a2b3c4d5e6f"
7 }
8}Использование данных#
Проверка результата и статусов мест#
Сразу после seat_book запросите pnr_retrieve, чтобы увидеть итоговый статус каждого места:
1await SeatBook(bookingId, seats);
2
3var pnr = await RetrieveBooking(bookingId);
4
5foreach (var seat in pnr.Pnr.Seats)
6{
7 Console.WriteLine($"{seat.PaxRefId}, сегмент {seat.SegRefId}: место {seat.Row}{seat.Column} — {seat.Status}");
8}Обработка ошибок#
1try
2{
3 await SeatBook(bookingId, seats);
4}
5catch (ApiException ex) when (ex.Code == "SEAT_PRICE_NOT_FOUND_FOR_PAX_TYPE")
6{
7 Console.WriteLine("Место недоступно для данного типа пассажира, выберите другое");
8}
9catch (ApiException ex) when (ex.Code == "SEAT_REF_NOT_FOUND")
10{
11 Console.WriteLine("Некорректный paxRefId или segRefId, сверьте с pnr_retrieve");
12}
13catch (ApiException ex) when (ex.Code == "BOOKING_NOT_FOUND")
14{
15 Console.WriteLine("Бронирование не найдено");
16}Типичные ошибки#
| Код ошибки | Причина | Решение |
|---|---|---|
BOOKING_NOT_FOUND | Бронирование не найдено либо принадлежит другому клиенту | Проверьте bookingId |
SEAT_REF_NOT_FOUND | paxRefId или segRefId не найдены в этом бронировании | Сверьте значения с ответом pnr_retrieve |
SEAT_PRICE_NOT_FOUND_FOR_PAX_TYPE | Для места нет цены применительно к типу пассажира | Запросите актуальную карту мест и выберите другое место |
SYSTEM_ERROR | Не удалось получить данные бронирования при разрешении мест | Повторите запрос позднее |
SEAT_INVALID_REQUEST | Не заполнены bookingId, seats, либо paxRefId/segRefId внутри seats[] | HTTP 400. Проверьте состав запроса |
SEAT_INVALID_ROW | Номер ряда должен быть положительным целым числом | HTTP 400. Укажите ряд из ответа seat_map |
SEAT_INVALID_COLUMN | Буква места должна быть одной латинской буквой A-Z | HTTP 400. Укажите место из ответа seat_map |
SEAT_DUPLICATE | У пассажира указано более одного места на одном сегменте | HTTP 400. Оставьте по одному месту на пассажира и сегмент |
VALIDATION_ERROR | Прочие нарушения формата запроса | HTTP 400. Проверьте обязательные поля |
Связанные операции#
- Карта мест — получение мест и цен перед бронированием
- Получение PNR — итоговые статусы мест (
pnr.seats[]) после бронирования - Создание PNR — альтернативный способ выбрать места полем
seatsпри создании бронирования