РуководстваЗапустите Telegram-бота

Запуск Telegram-бота

Бот с long polling — это фоновый рабочий процесс: он запрашивает обновления у Telegram и не требует публичного HTTP-эндпоинта. Запустите его с containerPort=0 и одной репликой на токен бота.

Статус тестов: семь локальных тестов с имитированными ответами Telegram проходят. Мы не проверяли это руководство с реальным ботом в облаке. Используйте отдельного тестового бота и выполните проверки сообщений и перезапуска ниже перед тем, как полагаться на него. См. результаты сценарийных тестов.

Перед началом

Создайте бота через BotFather и храните его токен в секрете. Вам понадобятся Python 3.13, Lizard CLI и проект, в который можно выполнить деплой. Бот, использующий long polling, не должен иметь активный вебхук; проверьте текущую конфигурацию перед изменением способа получения обновлений.

В примере файлов входят worker.py, Dockerfile и локальные модульные тесты. Тесты не обращаются к Telegram. Обработчик эха хранит смещение в памяти; это не система ровно-однократной обработки.

Локальная проверка

Из директории примера:

python3 -m unittest -v

Проверки охватывают текстовые ответы, игнорируемые обновления, пустые опросы и неудачные отправки. Запустите бота локально с TELEGRAM_BOT_TOKEN, только если планируете отправлять ответы. Остановите этот локальный процесс перед запуском размещённого рабочего процесса.

Деплой как рабочий процесс

lizard init --name telegram-bot
lizard add --service bot

Выполните вход через lizard login, если команда сообщает, что требуется аутентификация. Установите TELEGRAM_BOT_TOKEN в сервисе бота перед деплоем. Можно использовать редактор переменных в панели управления или поместить значение в локальный файл .env и импортировать его:

lizard secrets import --service bot < .env
lizard run --service bot -- python3 check_bot.py
lizard up --service bot --port 0

Предварительная проверка валидирует токен через getMe и отклоняет бота с активным вебхуком. Она не удаляет и не меняет этот вебхук. Второй процесс опроса всё ещё может конфликтовать: остановите любую локальную копию перед деплоем.

Пример исключает .env* из загрузки. Держите токен вне исходных файлов и скриншотов. На macOS с Lizard CLI 0.3.92 добавьте префикс COPYFILE_DISABLE=1 к команде загрузки. Читайте итоговое событие деплоя и логи даже если команда завершилась успешно.

Для существующего сервиса явно установите режим рабочего процесса:

lizard service set bot --set containerPort=0

После смены режима рабочего процесса на запущенном сервисе примените его с lizard redeploy --service bot. Проверьте события деплоя перед запросом следующей сборки. Режим рабочего процесса пропускает проверки HTTP-порта и маршрут балансировщика; не добавляйте фиктивный веб-сервер только для того, чтобы этот процесс выглядел как HTTP-приложение.

Проверка результата

lizard ps --json
lizard logs --service bot --json
lizard events --json

В логе должно появиться Telegram worker started. Отправьте сообщение боту и проверьте, пришёл ли один эхо-ответ. Затем остановите и перезапустите рабочий процесс в утвержденное тестовое окно и подтвердите, что он переподключился. Рабочий процесс, помеченный как запущенный, всё равно требует этой проверки на уровне приложения.

Типичные сбои

СимптомПроверка
Процесс завершается сразуУстановите TELEGRAM_BOT_TOKEN на потребляющем сервисе.
HTTP-проверка здоровья никогда не проходитРежим рабочего процесса должен использовать containerPort=0.
Обновления прекращаются или появляются ошибки конфликтаТолько один процесс опроса должен использовать этот токен; проверьте локальный процесс, другую реплику или активный вебхук.
Повторные ответы после сбояДемоверсия не сохраняет смещения и не дедуплицирует ID обновлений. Добавьте устойчивую идемпотентность перед обработкой необратимых действий.
Частые повторные попыткиПроверьте сетевой доступ, валидность токена, лимиты Telegram и ваш обработчик. Не печатайте URL запросов: они содержат токен.

Состояние и стоимость

Для устойчивого состояния бота подключите Managed Postgres. Храните обработанные ID обновлений и делайте обработчики безопасными для повторных вызовов. Long polling может держать рабочий процесс активным между сообщениями; планируйте бюджет от цен и наблюдаемого потребления ресурсов, а не только от количества сообщений.

Связанные руководства

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