RU EN

Telegram-бот перестал отвечать: что проверить самому

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

Сначала понять, молчит бот целиком или частично

Это разные поломки. Напишите боту `/start` из своего аккаунта и из чужого, нажмите пару кнопок, добавьте его в тестовую группу.

Если молчит всё и у всех, бот не получает сообщений или не может ответить, и искать надо в токене, вебхуке и сервере. Если на команды он отвечает, а на кнопки или обычный текст нет, скорее всего сломан конкретный обработчик в коде. Тут самому мало что сделаешь, но запишите, на каком действии он замолкает, это сэкономит разработчику время. Если в личке отвечает, а в группе молчит, это почти наверняка режим приватности, о нём ниже. А если отвечает через раз или с задержкой в минуты, похоже на лимиты Telegram или на перегруженный сервер.

Токен

Токен бота выдаёт @BotFather, и там же его можно отозвать. Если кто-то из бывших подрядчиков или сотрудников нажал «Revoke current token», старый токен перестаёт работать сразу, и бот замолкает без всяких ошибок для пользователя. Проверка простая: откройте в браузере адрес `https://api.telegram.org/bot<токен>/getMe`, подставив токен из настроек бота. Если в ответе `"ok":true` и имя вашего бота, токен живой. Если `Unauthorized`, токен отозван или в настройках не тот.

Токен даёт полный доступ к боту, поэтому не отправляйте его в чат с подрядчиком открытым текстом и не публикуйте скриншоты с ним.

Вебхук или опрос

Бот получает сообщения одним из двух способов. Либо Telegram сам присылает их на адрес сервера (вебхук), либо программа бота сама регулярно спрашивает «есть что-нибудь новое?» (опрос, метод `getUpdates`). Одновременно оба способа не работают: документация Telegram прямо говорит, что `getUpdates` не будет работать, пока установлен вебхук.

Состояние вебхука показывает метод getWebhookInfo: `https://api.telegram.org/bot<токен>/getWebhookInfo`. Смотрите на три поля:

  • `url`: пустой, если бот работает опросом, и адрес сервера, если вебхуком. Если вы ждали один способ, а установлен другой, причина найдена.
  • `pending_update_count`: сколько сообщений Telegram не смог доставить. Если число растёт, сервер их не принимает.
  • `last_error_message`: последняя ошибка доставки, например истёкший сертификат или сервер, который не отвечает.

Второй запущенный экземпляр

Частый случай после переезда на новый сервер или после того, как разработчик «на минутку» запустил бота у себя на ноутбуке. Два экземпляра с одним токеном и опросом начинают отбирать друг у друга сообщения, и Telegram отвечает одному из них ошибкой `409 Conflict`. Снаружи это выглядит как бот, который отвечает через раз. Лечится тем, что лишний экземпляр останавливают; найти его иногда сложнее, чем остановить, поэтому полезно знать, где и кем бот запускался.

Режим приватности в группах

По умолчанию бот в группе видит не все сообщения, а только команды и ответы на свои сообщения. Так задумано: в описании режима приватности Telegram объясняет, что это защищает переписку участников. Если бот должен реагировать на обычный текст в группе, режим отключают в @BotFather командой `/setprivacy` или делают бота администратором группы. После смены настройки бота нужно удалить из группы и добавить заново, иначе изменение может не примениться.

Лимиты Telegram

У Telegram есть ограничения на частоту сообщений. В FAQ для разработчиков ботов сказано: в один чат лучше отправлять не больше одного сообщения в секунду, в группу не больше 20 в минуту, а массовые рассылки в целом не быстрее примерно 30 сообщений в секунду. Если бот превышает лимит, Telegram отвечает ошибкой 429 и сообщает, сколько секунд подождать. Бот, который не умеет ждать, в этот момент просто теряет сообщения. Обычно это всплывает во время рассылки по всей базе: первые сотни сообщений уходят, остальные нет.

Обновление библиотек и Python

Боты на Python держатся на чужих библиотеках, и после обновления что-нибудь ломается. Пример из нашей практики: бот-переводчик однажды не запустился вовсе. Библиотека для перевода при установке потянула за собой старую версию сетевой библиотеки `httpx`, а та использует модуль `cgi`, который убрали из Python 3.13. Код бота никто не трогал, поменялись только версии вокруг него.

Отсюда простое правило: версии зависимостей должны быть зафиксированы в файле (`requirements.txt` с точными номерами или lock-файл), а обновлять их стоит отдельно и с проверкой, а не «заодно» при переезде.

Сервер

Если бот живёт на VPS, посмотрите в панели хостинга, запущен ли сам процесс или контейнер и не перезапускается ли он по кругу. Проверьте место на диске: журналы, которые никто не чистит, за полгода вполне могут его заполнить. И проверьте оплату сервера и домена. Звучит банально, но истёкший домен или сертификат роняет вебхук целиком.

Что передать разработчику

Если сами не нашли, разработчику помогут:

  • что именно не работает и с какого момента, по возможности со временем;
  • ответы `getMe` и `getWebhookInfo` (без токена);
  • что менялось незадолго до поломки: переезд, обновление, новый сотрудник с доступом;
  • доступ к серверу и к журналам программы.

С таким описанием поиск причины занимает час, а не день. Если бот на Python и нужна точечная починка, мы делаем это как отдельную услугу: найти ошибку, исправить и объяснить, что случилось.

Нужно похожее?

Исправим ошибку или внесём небольшую доработку в вашего Telegram-бота или скрипт на Python: бот перестал отвечать, не работает кнопка, нужно добавить команду или поле, обновить библиотеку.

Доработка и исправление Telegram-бота или скрипта на Python — от 3 000 ₽, срок от 2 дней.

← Все статьи

Контакты

Напишите нам — обсудим задачу и предложим план в течение суток.

dmitry.zhdanov@craftpodium.com

Telegram: @signmark