Перейти к содержимому
PD
Telegram-боты

Разработка Telegram-бота с нуля: деплой и эксплуатация

Чем вебхук отличается от опроса, где размещать бота, как настроить автозапуск и мониторинг и что нужно делать при обновлениях, чтобы не терять диалоги.

Все статьи гида Telegram-боты · 13

Бот, работающий на ноутбуке, - это прототип. Разберём, что нужно, чтобы он работал постоянно.

Вебхук против поллинга

Поллинг. Бот сам периодически спрашивает у Telegram новые сообщения. Входящие соединения не нужны, домен не нужен, работает откуда угодно.

Плюсы: проще некуда, ничего не настраивать, годится для разработки и для большинства продакшена.

Минусы: постоянные запросы, чуть большая задержка, хуже держит очень высокую нагрузку.

Вебхук. Telegram сам присылает обновления на ваш адрес.

Плюсы: экономнее, отклик быстрее, лучше на нагрузке.

Минусы: нужен публичный домен с HTTPS и корректно настроенный сертификат. Плюс всё то, что относится к публичным эндпоинтам: секрет в адресе или заголовке, чтобы никто не слал вам поддельные обновления.

Что выбрать: начинайте с поллинга. Переход на вебхук - это оптимизация, которая нужна не всем, и делается она позже без переписывания логики.

Важная деталь для обоих режимов: нельзя одновременно держать вебхук и поллинг, и нельзя запускать два экземпляра с одним токеном. Симптом - бот отвечает через раз.

Хостинг

VPS закрывает большинство задач. Бот нетребователен: узкое место обычно не процессор, а память при большом числе одновременных диалогов и место под логи.

Домашний компьютер годится только для разработки: закрыли ноутбук - бот перестал отвечать.

Контейнер удобен, если вокруг бота есть база и другие сервисы: воспроизводимое окружение и простое обновление - те же принципы, что описаны для self-hosted стека.

Для вебхука дополнительно нужны домен и сертификат.

Автозапуск и надёжность

Бот - это процесс, который должен быть запущен всегда. Что нужно настроить:

Автозапуск при загрузке системы. Сервер перезагрузился - бот поднялся сам.

Перезапуск при падении. Необработанная ошибка не должна означать «бот молчит до понедельника».

Логи в файл с ротацией. Без логов разбор инцидента невозможен, а без ротации логи однажды займут весь диск.

Отдельный пользователь для процесса, а не запуск от администратора.

Бэкап базы. Пользователи, заказы и состояния восстановлению из памяти не подлежат.

Мониторинг

Минимум, который стоит иметь:

  • Жив ли процесс. Простая проверка раз в минуту.
  • Уведомление о падении. Желательно не в тот же бот, который упал.
  • Число ошибок. Рост означает, что что-то изменилось снаружи.
  • Место на диске. Логи и база растут.

Практическое наблюдение: боты чаще всего умирают тихо. Не падают, а перестают отвечать из-за исчерпанных соединений с базой, зависшего внешнего запроса или заполненного диска. Проверка «жив ли процесс» этого не покажет - полезнее проверять, что бот отвечает.

Обновления

Состояние диалогов - вне процесса. Это главное требование: при хранении в памяти каждое обновление выбрасывает всех, кто был в середине сценария - см. aiogram и состояния.

Миграции базы - до запуска новой версии, а не после.

Проверка на тестовом боте. Отдельный токен, отдельная база. Тестовое сообщение не должно уходить реальным пользователям - см. токен.

Возможность откатиться. Предыдущая версия должна запускаться, а миграции - переживать откат.

Практический совет: обновляйтесь в тихое время. Даже с состоянием в базе перезапуск - это несколько секунд, когда бот не отвечает, и лучше, чтобы в этот момент никто не оплачивал заказ.

Обзор - гид по Telegram-ботам.

Вопросы и ответы

Что выбрать - вебхук или поллинг?

Поллинг проще: бот сам спрашивает у Telegram новые сообщения, входящие соединения не нужны, работает откуда угодно. Вебхук требует публичного домена с HTTPS, но экономнее и лучше держит нагрузку. Для большинства ботов поллинга достаточно, и начинать стоит с него.

Где разместить Telegram-бота?

Недорогой VPS закрывает большинство задач: бот нетребователен к ресурсам, но должен быть запущен постоянно. Домашний компьютер годится только для разработки. Для вебхука дополнительно нужны домен и сертификат.

Как обновлять бота, не теряя диалоги пользователей?

Хранить состояние диалогов вне процесса - в базе или отдельном хранилище. Тогда перезапуск на новую версию не теряет незавершённые сценарии. Если состояние в памяти, каждое обновление выбрасывает всех, кто был в середине оформления заказа.

Ещё по теме

Сделаю под ключ

Сделаю Telegram-бота под ваш процесс

Заявки, оплата, выдача доступа, рассылки и воронка в одном боте, с админкой для вас.

от 300 $ · 3-7 дней

Похожий кейсTelegram-бот воронки продаж для онлайн-курсовTelegram-бот, который ведёт всю воронку - лид-магнит → гайд → интенсив → курс - с оплатой, автовыдачей доступа и админ-панелью.

«Действительно гуру своего дела. Узнал массу новой и полезной информации по телеграм рассылкам. До этого сжег очень много денег на оплате услуг посредников, но после общения с исполнителем буду делать все сам)»

viktorTR · Kwork