Разработка Telegram-бота с нуля: деплой и эксплуатация
Чем вебхук отличается от опроса, где размещать бота, как настроить автозапуск и мониторинг и что нужно делать при обновлениях, чтобы не терять диалоги.
Все статьи гида Telegram-боты · 13
Бот, работающий на ноутбуке, - это прототип. Разберём, что нужно, чтобы он работал постоянно.
Вебхук против поллинга
Поллинг. Бот сам периодически спрашивает у Telegram новые сообщения. Входящие соединения не нужны, домен не нужен, работает откуда угодно.
Плюсы: проще некуда, ничего не настраивать, годится для разработки и для большинства продакшена.
Минусы: постоянные запросы, чуть большая задержка, хуже держит очень высокую нагрузку.
Вебхук. Telegram сам присылает обновления на ваш адрес.
Плюсы: экономнее, отклик быстрее, лучше на нагрузке.
Минусы: нужен публичный домен с HTTPS и корректно настроенный сертификат. Плюс всё то, что относится к публичным эндпоинтам: секрет в адресе или заголовке, чтобы никто не слал вам поддельные обновления.
Что выбрать: начинайте с поллинга. Переход на вебхук - это оптимизация, которая нужна не всем, и делается она позже без переписывания логики.
Важная деталь для обоих режимов: нельзя одновременно держать вебхук и поллинг, и нельзя запускать два экземпляра с одним токеном. Симптом - бот отвечает через раз.
Хостинг
VPS закрывает большинство задач. Бот нетребователен: узкое место обычно не процессор, а память при большом числе одновременных диалогов и место под логи.
Домашний компьютер годится только для разработки: закрыли ноутбук - бот перестал отвечать.
Контейнер удобен, если вокруг бота есть база и другие сервисы: воспроизводимое окружение и простое обновление - те же принципы, что описаны для self-hosted стека.
Для вебхука дополнительно нужны домен и сертификат.
Автозапуск и надёжность
Бот - это процесс, который должен быть запущен всегда. Что нужно настроить:
Автозапуск при загрузке системы. Сервер перезагрузился - бот поднялся сам.
Перезапуск при падении. Необработанная ошибка не должна означать «бот молчит до понедельника».
Логи в файл с ротацией. Без логов разбор инцидента невозможен, а без ротации логи однажды займут весь диск.
Отдельный пользователь для процесса, а не запуск от администратора.
Бэкап базы. Пользователи, заказы и состояния восстановлению из памяти не подлежат.
Мониторинг
Минимум, который стоит иметь:
- Жив ли процесс. Простая проверка раз в минуту.
- Уведомление о падении. Желательно не в тот же бот, который упал.
- Число ошибок. Рост означает, что что-то изменилось снаружи.
- Место на диске. Логи и база растут.
Практическое наблюдение: боты чаще всего умирают тихо. Не падают, а перестают отвечать из-за исчерпанных соединений с базой, зависшего внешнего запроса или заполненного диска. Проверка «жив ли процесс» этого не покажет - полезнее проверять, что бот отвечает.
Обновления
Состояние диалогов - вне процесса. Это главное требование: при хранении в памяти каждое обновление выбрасывает всех, кто был в середине сценария - см. aiogram и состояния.
Миграции базы - до запуска новой версии, а не после.
Проверка на тестовом боте. Отдельный токен, отдельная база. Тестовое сообщение не должно уходить реальным пользователям - см. токен.
Возможность откатиться. Предыдущая версия должна запускаться, а миграции - переживать откат.
Практический совет: обновляйтесь в тихое время. Даже с состоянием в базе перезапуск - это несколько секунд, когда бот не отвечает, и лучше, чтобы в этот момент никто не оплачивал заказ.
Обзор - гид по Telegram-ботам.
Вопросы и ответы
Что выбрать - вебхук или поллинг?
Поллинг проще: бот сам спрашивает у Telegram новые сообщения, входящие соединения не нужны, работает откуда угодно. Вебхук требует публичного домена с HTTPS, но экономнее и лучше держит нагрузку. Для большинства ботов поллинга достаточно, и начинать стоит с него.
Где разместить Telegram-бота?
Недорогой VPS закрывает большинство задач: бот нетребователен к ресурсам, но должен быть запущен постоянно. Домашний компьютер годится только для разработки. Для вебхука дополнительно нужны домен и сертификат.
Как обновлять бота, не теряя диалоги пользователей?
Хранить состояние диалогов вне процесса - в базе или отдельном хранилище. Тогда перезапуск на новую версию не теряет незавершённые сценарии. Если состояние в памяти, каждое обновление выбрасывает всех, кто был в середине оформления заказа.
Ещё по теме
- Telegram-боты на Python: полный практический гидГид
- Кнопки в Telegram-боте: обычные и инлайнЧем обычная клавиатура отличается от инлайн-кнопок, когда какая нужна, как обрабатывать нажатия и почему обязательно подтверждать callback.
- Конструкторы Telegram-ботов против кода: что выбратьКакие задачи закрывают конструкторы ботов, где они упираются в потолок, из чего складывается стоимость владения и как выбрать между конструктором и кодом.
- Оплата в Telegram-боте: приём платежей по шагамКакие есть способы принимать оплату в боте, чем они отличаются, как обрабатывать подтверждение платежа и почему идемпотентность здесь обязательна.
Сделаю под ключ
Сделаю Telegram-бота под ваш процесс
Заявки, оплата, выдача доступа, рассылки и воронка в одном боте, с админкой для вас.
от 300 $ · 3-7 дней
«Действительно гуру своего дела. Узнал массу новой и полезной информации по телеграм рассылкам. До этого сжег очень много денег на оплате услуг посредников, но после общения с исполнителем буду делать все сам)»