Как связать сайт, Telegram-бота и систему учёта
Передача по событию против выгрузки по расписанию, что делать при недоступности принимающей системы, защита от задвоения, единый идентификатор обращения и что логировать.
Сайт собирает заявки, бот принимает обращения, учёт ведётся в третьем месте. Каждый инструмент работает, а вместе они дают расхождение: в системе учёта заявок меньше, чем пришло, и никто не может сказать, где потерялись.
Разберём, как устроена передача данных и где она рвётся.
Два способа передачи
| По событию | По расписанию | |
|---|---|---|
| Когда срабатывает | Сразу при появлении записи | Раз в N минут |
| Задержка | Секунды | До интервала запуска |
| Поведение при сбое приёмника | Запись может потеряться | Подхватится в следующий раз |
| Нагрузка | Равномерная | Пиками |
| Сложность | Выше: нужны повторы | Ниже |
| Когда выбирать | Нужна скорость реакции | Данные не срочные |
Для заявок скорость критична — менеджер должен увидеть обращение сразу. Значит, передача по событию, но с механизмом повторов, иначе преимущество превращается в потери.
Что происходит при недоступности приёмника
Самое важное место интеграции и самое часто пропускаемое. Принимающая система бывает недоступна: обновление, сбой, истёкший доступ, превышен лимит запросов.
Заявка → попытка передать → ошибка
↓
Что произошло дальше?
Плохо: ошибка записана в лог, заявка потеряна
Хорошо: заявка сохранена локально,
поставлена в очередь на повтор,
отправлено уведомление ответственномуПравило простое: источник должен сохранять запись у себя до подтверждения приёма. Если запись существует только в момент передачи, любой сбой означает потерю.
Защита от задвоения
Обратная сторона повторов. Типичный сценарий: запись передалась, ответ не дошёл из-за таймаута, источник повторил — в системе две одинаковые заявки.
Решается единым идентификатором обращения, который создаёт источник и передаёт вместе с данными.
- Источник присваивает записи идентификатор при создании.
- Передаёт его при каждой попытке — включая повторы.
- Приёмник проверяет: запись с таким идентификатором уже есть?
- Если есть — подтверждает приём и ничего не создаёт.
- Если нет — создаёт и подтверждает.
Эта схема делает повторную отправку безопасной: сколько бы раз ни пришёл один и тот же запрос, запись создастся один раз. Без неё приходится выбирать между потерями и дублями.
Про то, как разбирать дубли, которые всё-таки возникли по другим причинам, — отдельный материал.
Что передавать
Минимальный набор, без которого приёмная сторона бесполезна:
- идентификатор обращения — для защиты от задвоения;
- источник — сайт, бот, конкретная форма или рекламная кампания;
- время создания в источнике, а не время передачи;
- контактные данные в нормализованном виде;
- содержание — что человек написал или выбрал;
- служебные метки, если они есть: кампания, страница, откуда пришёл.
Третий пункт объясняет расхождения в отчётах: если фиксировать время передачи, то заявки, пролежавшие в очереди, окажутся в отчёте не за тот период.
Что логировать
Без журнала разобраться в расхождении невозможно: обе стороны будут утверждать, что у них всё в порядке.
| Записывать | Зачем |
|---|---|
| Факт и время каждой попытки передачи | Понять, отправляли ли вообще |
| Код ответа приёмника | Отличить отказ от таймаута |
| Идентификатор обращения | Связать записи на обеих сторонах |
| Номер попытки | Увидеть, что повторы работают |
| Итог: подтверждено или в очереди | Найти зависшие записи |
Персональные данные в журнал не пишут. Достаточно идентификатора, по которому запись находится в системе.
Что проверить перед запуском
- Заявка доходит и создаётся корректно — базовый случай.
- Приёмник выключен — заявка сохранилась и встала в очередь.
- Приёмник включили — очередь разобралась сама, без ручного вмешательства.
- Повторная отправка того же обращения не создала вторую запись.
- Обязательные поля не пустые с обеих сторон.
- Время в приёмнике совпадает со временем создания в источнике.
- При исчерпании повторов пришло уведомление человеку.
Пункты 2–4 — те самые, которые обычно не проверяют. Именно они отличают работающую интеграцию от такой, которая тихо теряет заявки раз в месяц.
Что запомнить
- Для заявок нужна передача по событию, но обязательно с повторами.
- Источник хранит запись до подтверждения приёма.
- Единый идентификатор обращения делает повторы безопасными.
- Передавать нужно время создания, а не время отправки.
- Проверять надо сценарии сбоя, а не только успешный путь.
Куда сводить обращения из всех источников — в материале о едином центре заявок. Что выбрать для приёма обращений — сайт или бот.