Боты · Telegram

Ошибка 409 Conflict у Telegram-бота: второй polling или старый webhook

Оставьте один процесс получения обновлений, проверьте прежний webhook и восстановите ответы бота без потери очереди сообщений.

При ошибке 409 Conflict сначала прочитайте описание Telegram целиком. Сообщение про другой getUpdates обычно указывает на конкурирующий polling-процесс, а сообщение про webhook — на другой способ получения обновлений. Покупка более мощного тарифа эти конфликты не устраняет: нужно определить, кто сейчас получает события вашего бота.

Объёмная синяя линза над вычислительным модулем — диагностика сервера.

Как оставить один источник обновлений

  1. Остановите лишние копии

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

  2. Проверьте настройку webhook

    Через библиотеку, которую использует проект, вызовите getWebhookInfo и посмотрите, пусто ли поле url. Непустой адрес означает установленный webhook. Если вы осознанно переносите бота на polling, вызовите deleteWebhook перед запуском получения обновлений. Токен читайте из BOT_TOKEN и не вставляйте в URL командной строки или публичный журнал.

  3. Сохраните ожидающие сообщения

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

  4. Консоль

    Запустите одну копию и проверьте ответ

    Запустите сервер в панели, дождитесь сообщения вашего приложения о подключении, затем отправьте тестовую команду в личный чат. Убедитесь, что пришёл один ответ и ошибка не возвращается в течение нескольких циклов polling. Статус «Работает» в панели подтверждает запуск процесса, а не успешную обработку Telegram-событий.

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

Читайте дальше

Боты

Как загрузить Telegram-бота и запустить его

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

Боты · разбор

Почему бот не запускается

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

Боты · токен

Как безопасно хранить токен бота

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

Боты · зависимости

Как закрепить зависимости бота, чтобы перезапуск не ломал код

Закрепите зависимости бота в requirements.txt или package-lock.json, учтите devDependencies и проверьте обновления библиотек до загрузки.

Боты · Discord

Discord-бот онлайн, но не читает сообщения: проверка intents

Проверьте intents Discord-бота в коде и Developer Portal, отделите права канала от событий Gateway и разберите код закрытия 4014.