Если бот зависает при команде, пользователь нажимает кнопку или пишет команду и не получает ответа. Иногда бот потом отвечает пачкой, иногда перестает реагировать совсем.

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

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

Почему это ломается

Зависание появляется из-за внешнего API без таймаута, тяжелого SQL-запроса, бесконечного цикла, обработки файлов в основном потоке, блокировки очереди, повторных webhook-запросов или исключения, которое не записывается в лог.

Что проверяю в первую очередь

  • какая команда вызывает зависание
  • сколько времени выполняется обработчик
  • есть ли таймауты у внешних запросов
  • не блокируется ли база данных
  • что происходит в логах webhook или polling

Как я это чиню

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

  • добавляю таймауты внешних запросов
  • выношу долгие операции в очередь или фон
  • оптимизирую SQL-запросы и индексы
  • исправляю повторную обработку webhook
  • добавляю логирование времени выполнения команд

Что подготовить перед обращением

  • команду или кнопку, где бот зависает
  • логи бота
  • тип запуска: webhook или polling
  • доступ к серверу
  • описание внешних сервисов, к которым обращается бот

Как выглядит нормальный результат

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

Чего лучше не делать

Не увеличивайте таймауты бесконечно. Если команда занимает слишком много времени, ее нужно оптимизировать или вынести в фон.

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

Почему бот зависает только вечером?

Возможна нагрузка, медленный внешний API, рост очереди или блокировки базы в часы активности.

Можно ли сразу отвечать "принято", а результат присылать позже?

Да, это хороший подход для долгих задач.

Как понять, что виновата база?

Нужно замерить время запросов и посмотреть медленные SQL-операции.

Webhook лучше polling?

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

Нужна похожая задача?

Напишите в Telegram @rabotator_support или оставьте заявку на сайте. Коротко опишите проблему, приложите ссылку, скриншот или лог ошибки, и я подскажу, с чего безопасно начать исправление.

Итог

Зависание бота лечится измерениями и разделением задач: быстрый ответ пользователю отдельно, тяжелая работа отдельно.