Интеграции
Интеграция Telegram-бота с внешними API
Опубликовано
Задача
Боту нужно получать события внешней системы и отдавать ей заказ, статус и отказ. Адрес и признак события называют заранее.
Проблема
Сервис ответил сбоем, запрос отправили ещё раз, и в учёте появилось два заказа. Потерянный ответ неотличим от заказа, которого нет.
Реальный сценарий
Внешняя система сообщает на адрес бота: заказ оплачен. Сервер находит заказ по номеру и меняет статус один раз. То же сообщение приходит снова — второй заказ не создаётся. Если ответа API нет, запрос повторяют и не показывают успех раньше ответа.
Как устроен обмен
Входящий вызов называют вебхуком: система сама сообщает о факте, бот не опрашивает её каждую секунду. Нет ответа или он временный — запрос повторяют. Идемпотентность значит: у события есть номер, повтор не меняет результат. Контур относится к интеграциям.
Что можно и чего нельзя
Можно принять событие, повторить запрос и не создать дубль. Нельзя строить обмен без номера, по которому повтор отличим от нового факта. Нельзя считать молчание внешней системы успехом.
Польза
Сбой сети не превращается в два документа и не прячет потерянный статус. Сотрудник видит, на каком шаге обмен остановился.
Шаги внедрения
Описывают события, адрес и секрет проверки подписи. На тестовом контуре шлют одно событие, то же событие ещё раз, обрыв ответа и отказ. После этого включают боевой адрес и смотрят журнал первых суток.
Вопросы
Что такое вебхук простыми словами?
Это адрес, на который внешняя система сама присылает событие, например «заказ оплачен».
Почему повтор создал второй заказ?
У события не было номера, по которому повтор можно отличить от нового факта.
Молчание API значит, что заказ создан?
Нет. Пока нет ответа об успехе, бот не показывает клиенту, что заказ принят.