Если бот растёт, одних логов уже недостаточно. В какой-то момент появляется задача: сохранить историю всех Telegram-webhook событий, чтобы потом:
- разбирать ошибки
- восстанавливать цепочку действий пользователя
- считать аналитику
- “проигрывать” события заново после сбоя или обновления логики
Ниже — практичный подход, который работает и для небольших ботов, и для нагруженных систем.
Что именно сохранять
Webhook от Telegram — это JSON с update. Для аудита и replay лучше хранить не только полезные поля, а сырой оригинал события целиком.
Минимальный набор:
update_idreceived_at— время получения на сервереevent_type— message, callback_query, edited_message и т.д.chat_id,user_id,message_id— если естьpayload— полный JSONstatusобработки — new / processed / failed / replayederror_text— текст ошибки при падении обработчикаhandler_version— версия кода, обработавшая событие
Это позволяет не только искать инциденты, но и понимать, какой именно код работал в момент ошибки.
Где хранить
Для большинства проектов оптимальна связка:
- PostgreSQL — для индексов, фильтрации, аудита и выборок
- Object Storage или архивное хранилище — если payload много и нужны долгие сроки хранения
Если событий немного, можно хранить всё в PostgreSQL. Если поток большой — в БД держать метаданные, а полный JSON складывать отдельно.
Как правильно принимать webhook
Главное правило: сначала сохранить событие, потом обрабатывать.
Иначе при падении сервиса вы потеряете update навсегда.
Безопасный порядок:
- принять webhook
- быстро записать событие в хранилище
- вернуть
200 OK - отправить событие в очередь на обработку
Так вы отделяете приём от бизнес-логики и снижаете риск потерь.
Как организовать replay
Replay нужен, когда:
- исправили баг в обработчике
- меняли логику маршрутизации
- переехали на новую инфраструктуру
- хотите пересчитать аналитику
Чтобы переигрывание было безопасным:
- делайте обработчики идемпотентными
- храните признак, что событие уже обрабатывалось
- запускайте replay по диапазону времени,
update_idили типу события - отделяйте “боевую” обработку от “повторной”, чтобы не отправить пользователю дубли сообщений
Лучший вариант — replay в специальном режиме, где отключены внешние побочные эффекты или они строго контролируются.
Что это даёт аналитике
История webhook — это не просто технический архив. Это источник данных:
- воронка команд и сценариев
- точки отвалов в диалоге
- частые нажатия на кнопки
- время ответа системы
- ошибки по типам событий
- активность по пользователям, чатам, периодам
По сути, webhook-история превращает Telegram-бота из “чёрного ящика” в прозрачную систему. 🔍
Ключевая мысль
Если нужен аудит, стабильность и нормальная аналитика, храните каждый update как событие, а не только итог действий приложения.
События приходят один раз, а использовать их можно много раз: для отладки, отчётности, replay и улучшения продукта. ⚙️🧠
Посмотрите подборку Телеграм-каналов — там собраны полезные ресурсы для тех, кто развивает ботов, автоматизацию и Telegram-проекты.