NetrunНа главную

Если что-то не работает

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

· 5 мин чтения

Коротко

Telegram-бот перестал отвечать чаще всего по трём причинам: процесс, который его держал, выключился вместе с вашим компьютером; бот упал с ошибкой, и поднять его было некому; или запущены две копии бота, которые отбирают друг у друга сообщения. Начните с логов — последняя строка перед тишиной почти всегда называет причину. Чтобы бот работал независимо от ноутбука и сам поднимался после сбоя, его переносят на сервер или на платформу вроде Netrun, где проект перезапускается при сбое и присылает уведомление.

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

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

  1. Проверьте, не запущен ли бот на вашем компьютере#

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

  2. Откройте логи и найдите последнюю строку перед тишиной#

    Логи — это дневник бота: что он делал и на чём остановился. Посмотрите время последней записи: оно почти всегда совпадает с моментом, когда бот замолчал, и объясняет причину — оборвалась связь с Telegram, кончилась память, приложение споткнулось об одно конкретное сообщение вроде картинки вместо текста или пустой команды. В Netrun логи видны на странице проекта в реальном времени, на своём сервере смотрите вывод процесса или файл, куда он пишет.

  3. Убедитесь, что запущена ровно одна копия бота#

    Если бот запущен дважды — например, на сервере и заодно на ноутбуке, — копии начинают отбирать друг у друга сообщения. Со стороны это выглядит как «отвечает через раз»: часть сообщений достаётся второй копии, а в логах появляется жалоба на другой запрос getUpdates. Остановите все запуски, кроме одного, и проверьте, что старый процесс действительно завершён, а не просто свёрнут в фоне.

  4. Проверьте токен и реакцию Telegram#

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

  5. Посмотрите, не закончился ли пробный период или деньги#

    Если бот живёт на хостинге или на арендованном сервере, откройте статус проекта и счёт: у бесплатных тарифов время работы бота обычно ограничено, а на сервере с оплатой по факту могли просто закончиться деньги. В Netrun бот на бесплатном тарифе работает три дня, а потом выключается — код, настройки и секреты остаются на месте, и за сутки до выключения приходит предупреждение. Такой проект виден в кабинете как остановленный: чтобы он снова заработал, нужен тариф Pro, а правка кода тут ничего не изменит.

  6. Перенесите бота туда, где он поднимается сам#

    Когда причина найдена, остаётся сделать так, чтобы она не повторялась: бот должен работать на машине, которая не засыпает, и подниматься сам после сбоя. Загрузите папку с кодом архивом или подключите репозиторий с GitHub, укажите токен от BotFather — Netrun определит язык, соберёт проект и запустит бота. Дальше за ним присматривает платформа: при сбое проект перезапускается, приходит уведомление, а логи открыты в кабинете, поэтому в следующий раз причину видно сразу.

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

Частые вопросы

Почему бот перестал отвечать ночью, а утром снова заработал?

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

Бот работает несколько часов, а потом замолкает — в чём дело?

Обычно это необработанная ошибка: бот получает сообщение, на которое не рассчитывал, падает и больше не запускается. Реже причина в том, что приложение постепенно съедает память и его выключают. Точный ответ есть в логах: смотрите последние строки перед тем, как записи прекратились.

Что означает ошибка про другой запрос getUpdates?

Это Telegram сообщает, что за сообщениями к нему пришли сразу два клиента с одним токеном — то есть у вас запущены две копии бота. Оставьте одну и остановите остальные, включая запуск на своём компьютере. Про этот случай в блоге есть отдельный разбор с признаками и порядком действий.

Бот отвечает не всем — это ограничения Telegram?

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

Как понять, что виноват код, а не место, где запущен бот?

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

Поможет ли перевод бота на webhook, чтобы он не падал?

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

Где посмотреть логи и статус проекта?

На странице проекта есть статус, логи и история событий — по ним видно, что происходит с проектом прямо сейчас. Лента логов показывает и более ранние строки: пролистайте её вверх, и они подгрузятся сами.

Что будет, если приложение упадёт?

Мы следим за проектами и перезапускаем их при сбое. Если что-то идёт не так, вы видите статус и логи в кабинете и получаете уведомление.

Засыпают ли боты и фоновые скрипты?

Нет, засыпают только сайты: сайт просыпается сам, когда его открывают. Бота и фоновый скрипт разбудить нечем — к ним никто не приходит по ссылке, они работают сами по себе. Поэтому на бесплатном тарифе они работают 3 дня, а дальше, чтобы бот работал круглосуточно, нужен тариф Pro.

Что будет с ботом через 3 дня на бесплатном тарифе?

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

Запустите свой проект

Загрузите код, ответьте на пару вопросов — и получите рабочую ссылку. Есть бесплатный тариф

Попробовать Netrun
Все статьи блога