Дубли броней при обрыве связи
Пользователь нажал кнопку дважды или соединение упало после отправки запроса — создаются две брони. Идемпотентного ключа нет, а провайдер обрабатывает оба запроса.
Выберите тему — соберём контекст
Подключаем GDS и NDC-каналы, прямые API отелей и наземных перевозчиков, держим корректный кэш availability и защищаем бронь от двойных списаний, оверселлинга и зависших платежей.
Или сразу: +7 (962) 368-39-51 Telegram
Это не гипотезы: такие дефекты мы находили и устраняли в работающих проектах туроператоров, агентских сетей и OTA.
Пользователь нажал кнопку дважды или соединение упало после отправки запроса — создаются две брони. Идемпотентного ключа нет, а провайдер обрабатывает оба запроса.
Остаток в кэше обновляется раз в сутки, поэтому клиент видит место, которого уже нет: оплата проходит, а подтверждение от поставщика не приходит.
У каждого тарифа свои правила: невозвратный, с штрафом за сутки, с удержанием сервисного сбора. Менеджер считает сумму в калькуляторе и ошибается в пользу клиента или компании.
Вебхук эквайринга не дошёл, рассрочка одобрена частично, возврат отправлен дважды. Сверка с банком превращается в ручной поиск расхождений за месяц.
Номера документов, даты рождения и контакты лежат в нескольких базах и рассылках, доступ есть у всей смены, сроки хранения не определены. Это прямые вопросы по 152-ФЗ.
Агенты бронируют по телефону, комиссия считается в таблице, а агент не видит свои брони и статусы выплат — отсюда споры и потерянные партнёры.
Можно взять весь контур или отдельный слой: например, только постпродажное обслуживание поверх существующего движка бронирования.
Единая выдача по авиа, отелям, ж/д и трансферам с нормализацией тарифов и правил от разных поставщиков.
Сердце системы: превращаем выбранное предложение в подтверждённую бронь и платёж без дублей и расхождений.
Самая дорогая в обслуживании часть: обмены, возвраты, переписка с поставщиками и перевыпуск документов.
Рабочее место менеджера, кабинет агента и отчётность, которая закрывает месяц без ручной сверки.
Интеграции — главный источник неопределённости, поэтому первый этап целиком посвящён им, а не интерфейсу.
Разбираем, что продаём и у кого покупаем: какие GDS и NDC-каналы, какие прямые договоры, кто источник истины по остаткам и ценам. Проверяем песочницы и лимиты запросов.
Собираем модель предложения, кэш availability, идемпотентный сценарий создания брони и обработку отказов поставщика. На этом этапе появляется первый сквозной сценарий покупки.
Подключаем эквайринг и рассрочку, реализуем возвраты и обмены, выгрузки в 1С и ЭДО, кабинет агента и роли. Закрываем юридически значимый документооборот.
Прогоняем высокий сезон на нагрузочном стенде, настраиваем мониторинг обменов и алерты, запускаем пилотную группу и затем открываем трафик.
GDS остаётся основой для сложных маршрутов и корпоративных сегментов, но экономика всё чаще уходит в NDC: у авиакомпаний там шире набор тарифных опций и нет исторического сбора. Мы проектируем слой поставщиков как набор адаптеров с единым внутренним контрактом, поэтому добавление нового канала не требует переписывать поиск и бронирование.
Практическая часть важнее архитектурной схемы: у каждого канала свои лимиты запросов, окна обслуживания и формат ошибок. Мы закладываем деградацию — если NDC-канал не ответил за отведённое время, выдача собирается из остальных источников и помечается, что часть предложений могла не попасть в результат.
Классический сценарий: клиент нажимает «Забронировать», запрос уходит в GDS, ответ приходит через 12 секунд, браузер к этому моменту уже отправил повтор. Без идемпотентного ключа создаются две брони, одну из которых придётся отменять со штрафом. Стоимость такой ошибки несопоставима с экономией на оптимизации запроса.
Мы используем ключ идемпотентности, генерируемый на стороне клиента и сохраняемый вместе с состоянием операции: повторный запрос с тем же ключом возвращает результат первой попытки, а не создаёт новую бронь. Тот же принцип применяем к платежам, возвратам и любым операциям, которые меняют деньги или остатки.
Обращаться к GDS на каждый поисковый запрос невозможно: лимиты и стоимость запросов делают такой сценарий нерентабельным. Поэтому остатки и цены кэшируются. Вопрос в том, как долго и что делать, когда данные устарели.
Мы разделяем кэш на слои: короткий TTL для горячих дат, длинный — для дальних направлений, отдельное правило для последних мест. Никогда не продаём из кэша напрямую: перед созданием брони выполняется revalidation у поставщика, а разница в цене или отсутствие места показывается пользователю как понятное предложение альтернативы, а не как техническая ошибка на этапе оплаты.
Минимальный рабочий продукт с одним-двумя каналами поставщиков, поиском, бронированием, оплатой и базовым back-office занимает от четырёх до шести месяцев. Полноценная платформа с несколькими GDS, прямыми API отелей, агентской сетью, возвратами и выгрузками в 1С — от девяти месяцев. Срок сильнее всего зависит от готовности договоров с поставщиками и доступа к их тестовым контурам.
Да, и часто так и стоит делать. Если у вас есть прямые договоры с отелями или наземными перевозчиками, первый релиз можно собрать на их API — это быстрее и дешевле, а GDS добавить вторым этапом. Архитектура с набором адаптеров поставщиков позволяет подключить GDS позже без переписывания поиска.
Такие ситуации мы обрабатываем как отдельный класс состояний. Бронь переходит в статус ожидания оплаты с ограниченным таймаутом, система автоматически пытается провести платёж повторно по расписанию и уведомляет менеджера. Если оплата не поступила до дедлайна, запускается автоматическая отмена у поставщика, чтобы не получить штраф за невыкупленное место.
Мы проектируем хранение документов и контактов в отдельном защищённом контуре с ограниченным доступом по ролям, шифрованием чувствительных полей и журналом обращений. Определяем сроки хранения, порядок удаления по требованию и объём данных, который реально нужен поставщику, чтобы не передавать лишнее. Это соответствует требованиям 152-ФЗ к обработке персональных данных.
Смежные задачи, которые обычно решаются в одном проекте с этой.
Расскажите, какие каналы продаж и поставщиков у вас уже есть, — предложим архитектуру и реалистичный график по этапам.
Cookie и аналитика
Мы используем необходимые cookie для работы сайта и форм. Аналитические cookie (Яндекс.Метрика, включая запись сессий) подключаем только с вашего согласия — от него можно отказаться. Подробнее: Политика использования cookie и обработка персональных данных.