...

Почему бот не работает в Телеграм

Почему бот не работает в Телеграм
14 мин
Статья

Бот перестал работать в телеграм? Я покажу, что критично проверить сразу (токен, вебхук, TLS) и что важно. Когда токен, вебхук и TLS уже исправны, проверьте воронку на реальных пользователях малыми волнами трафика: Накрутка подписчиков телеграм даст быстрый контрольный приток для замера welcome-сообщений, отклика бота и удержания. Фиксируйте p95 ответа, error rate и конверсию в целевое действие до и после запуска.

Праймер: официальные ссылки и стандарты

Официальные источники (быстрые ссылки)

Нужны первоисточники, чтобы доверять каждому шагу? Сверяйтесь с документацией Telegram Bot API: setWebhook/getUpdates/лимиты – https://core.telegram.org/bots/api. Требования к HTTPS и сертификатам (публичный CA, полный chain, SNI/CN) – https://core.telegram.org/bots/webhooks#https-certificate. Про Privacy Mode у BotFather – https://core.telegram.org/bots/features#privacy-mode.

Мини‑матрица критичности (triage за 30 секунд)

Сначала закрываем Критично: токен/дубликаты, 409 (двойной канал апдейтов), TLS chain/CN/SNI, быстрый 200 OK. Затем Важно: IPv6/AAAA и DNS, лимиты 429 (частые запросы), права/Privacy Mode. Опционально: окна тишины в cron, circuit breaker (автовыключатель запросов) и тонкие настройки очередей. Такая маркировка экономит время и снижает MTTR.

Быстрый короткий ответ (что проверить за 2 минуты)

Токен и права бота (BotFather, admin/Privacy Mode)

Токен не меняли вчера и он не отозван (/revoke у BotFather)? Бот добавлен админом там, где должен писать (группа/канал) и ему выданы нужные права? Включён ли Privacy Mode и не мешает ли он чтению обычных сообщений в группах (при включении бот видит только команды)? В моей практике 3 из 10 инцидентов закрываются уже на этом шаге.

Канал апдейтов (webhook установлен? 200 OK? или запустить long polling)

Как бот получает события сейчас – webhook или long polling (опрос)? Если webhook, вызовите getWebhookInfo и убедитесь, что ваш URL стабильно возвращает 200 OK за 1–2 секунды. Для отладки временно снимите webhook и включите polling (не одновременно, иначе будет 409 Conflict). Такой переключатель сразу показывает: у нас сеть/сертификат или логика кода.

Сеть/сертификаты (TLS валиден? DNS/IPv4/IPv6? фаервол)

Открывается ли ваш домен по HTTPS без предупреждений? Проверьте цепочку сертификата и SNI (имя сервера в TLS), а также CN (имя домена в сертификате) – ошибки тут «глушат» вебхук. Посмотрите DNS и маршруты: нет ли рассинхрона IPv4/IPv6 и не режет ли фаервол исходящие/входящие. Часто это самый быстрый фикс без правок кода.

Decision tree: пошаговая диагностика инцидента

Шаг 1 – Токен: валиден? не отозван? (BotFather → /revoke, /token)

Сравните токен в переменных окружения с токеном у BotFather – не разъехались ли dev/stage/prod. Если делали /revoke или получили новый /token, старый ключ сразу мёртв – обновите секреты в CI/CD и перезапустите воркеры. Проверьте дубликаты окружений, где мог остаться старый ключ. В моей практике именно рассинхрон токенов валил бота на часы.

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

Шаг 2 – Канал апдейтов: webhook или long polling (не одновременно)

Активен ли только один канал доставки событий? 409 Conflict в API почти всегда значит, что запущены оба. Для локальной проверки снимите webhook (deleteWebhook с drop_pending_updates) и включите getUpdates. Так вы исключите сеть и посмотрите на обработчик апдейтов в лоб.

Шаг 3 – Webhook: getWebhookInfo → есть last_error_date/last_error_message?

Вызовите getWebhookInfo и прочтите last_error_message: timeout, TLS error, wrong response? Timeout – обработчик отвечает слишком долго; TLS error – проблема с сертификатом/цепочкой; wrong response – не 200 OK или не тот формат ответа. Логируйте входящий payload (тело запроса) и время ответа – это экономит часы.

Шаг 4 – TLS: публичный сертификат, цепочка, SNI, 200 OK ≤ 10 c

Используйте публичный CA и отдавайте полный chain (intermediate сертификаты). Убедитесь, что SNI (имя сервера) и CN (домен в сертификате) совпадают с URL вебхука. Возвращайте 200 OK быстро: лучше до 2 секунд, максимум до 10 секунд. В реальных инцидентах неполная цепочка была самой частой причиной «тишины».

Шаг 5 – Лимиты/форматы: 429, слишком большие файлы, неверные payload

Проверьте логи на 429 Too Many Requests и включите бэкофф (повторные попытки по экспоненте). Сверьте размеры файлов и длины полей (особенно callback_data) с лимитами Bot API. Валидируйте JSON и типы апдейтов, чтобы неожиданные события не «роняли» обработчик. Идемпотентность (без повторной обработки) спасает от дублей при ретраях.

Шаг 6 – Права в чате: бот не админ/Privacy Mode блокирует чтение

Боту хватает прав на отправку сообщений, ссылок и медиа там, где он «молчит»? В группах с включённым Privacy Mode бот видит только команды и инлайн – это не баг. В каналах писать получится только с правами администратора. Мы заранее перечисляем требования к правам, чтобы их не потеряли при миграции.

Шаг 7 – Код и логи: непойманные исключения, зависания, ретраи

Включите подробный лог: входящий апдейт, ID чата, время обработки, статус ответа. Поймайте непойманные исключения и проверьте очереди сообщений – нет ли «залипаний». Вынесите внешние вызовы в фон, поставьте таймауты (время ожидания ответа) и circuit breaker (автовыключатель запросов). Это стабилизирует 200 OK и уменьшит подвисания.

Шаг 8 – Сеть/хостинг: фаервол, NAT, прокси, контейнерные healthchecks

Проверьте, не режет ли прокси/фаервол входящие и исходящие запросы. Убедитесь, что health‑checks (URL проверки здоровья сервиса) не убивают воркер под нагрузкой. Нет ли проблем с DNS/TTL при переезде домена и не мешает ли AAAA‑запись для IPv6. Мониторинг задержек и аптайма даст ранний сигнал деградации.

Токен и BotFather (настройки, которые чаще всего ломают)

Неверный/отозванный токен, дубликаты окружений

Храните токен в секрет‑менеджере и распространяйте через один источник правды. После /revoke обновляйте все среды, иначе часть воркеров останется с «мертвым» ключом. Проверьте, не запущены ли старые контейнеры с прежними переменными окружения. Это классика, которая ломает прод на ровном месте.

Команды и меню: неправильные слэши, описания, локали

Проверьте /setcommands и локализованные описания – первая строка видна сразу в клиенте. Соблюдайте формат: слэш, команда, короткое описание без «воды» и лишних символов. Для нескольких языков держите отдельные наборы, чтобы клиент подхватывал локаль пользователя. Мы заливаем команды из JSON на релизе, чтобы не править руками.

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

Privacy Mode и работа в группах/каналах

Решите заранее: бот читает всё или только команды? Если нужно читать обычные сообщения, выключите Privacy Mode (и добавьте фильтры по чатам). Для публикации в канале дайте права администратора и отметьте нужные галочки. Так не придётся «ждать чуда» от приватного бота.

Webhook: корректная регистрация и приём апдейтов

setWebhook: валидный HTTPS‑URL, один бот → один webhook

Регистрируйте вебхук на доступном извне HTTPS‑домене. Придерживайтесь правила «один бот – один вебхук», без дублей и старых хвостов. Перед переключением делайте drop_pending_updates, чтобы не тянуть старые апдейты. Мы всегда проверяем health‑endpoint до включения реального трафика.

Сертификат: публичный CA, полная цепочка, SNI, актуальный CN

Следите за сроком действия и целостностью цепочки, совпадением CN/домена и корректным SNI. На мультисайтовых серверах проверьте виртуальные хосты и роутинг. Неправильный SNI/CN выглядит как «молчание» без явной ошибки в логах. Это чинится за минуты, если знать куда смотреть.

Ответ сервера: 200 OK быстро; таймауты, ретраи, идемпотентность

Возвращайте 200 OK сразу, тяжёлое уносите в фоновые очереди. Ставьте ретраи (повторные попытки) и идемпотентность (без повторной обработки) на чувствительных участках. Логируйте время ответа и ID апдейта, чтобы ловить шипы. В моей практике перенос внешних вызовов в фон мгновенно снял «таймауты».

Long polling как альтернатива (для локальной отладки)

getUpdates: offset/timeout, двойные апдейты

Держите timeout 25–30 секунд и сдвигайте offset, чтобы не ловить дубли. Храните last_update_id и применяйте идемпотентность (без повторной обработки). Не блокируйте получение апдейтов тяжёлыми задачами. Polling – быстрый способ изолировать проблему от сети/TLS.

Параллелизм, очереди, блокирующие операции

Делегируйте долгие операции воркерам и очередям, а не держите их в обработчике. Контролируйте число параллельных воркеров и лимиты Bot API, чтобы не ловить 429. Добавьте метрики очередей и активных обработчиков в мониторинг. Это делает поведение бота предсказуемым под нагрузкой.

Переход webhook ↔ polling без «гонок»

Снимайте вебхук с drop_pending_updates перед запуском polling – и наоборот. Фиксируйте шаги в журнале релиза, чтобы не получить 409 Conflict. Держите один канал апдейтов в каждый момент времени. Так вы избежите двойной доставки и странных багов.

Лимиты и форматы Bot API (перенесено ближе к началу)

Ограничения: размер файлов, частота запросов, 429

Сверьте лимиты по размеру файлов и частоте запросов в документации Bot API. Включите бэкофф и очереди на массовых отправках, чтобы не ловить 429 Too Many Requests. Соблюдайте лимиты на чат и на бота, иначе сообщения будут «отскакивать». Мы ставим алерты на приближение к порогам, чтобы реагировать заранее.

Ограничения инлайн/кнопок: callback_data, длины полей

Не кладите большие JSON в callback_data – храните состояние на сервере. Валидируйте длины полей, шифруйте или кодируйте маркеры компактно. Экранируйте пользовательский ввод, чтобы не «ломать» Markdown/HTML. Простые маркеры + серверное состояние = надёжность и скорость.

Контент‑типы и кодировки JSON

Отправляйте корректный Content‑Type и валидный JSON на входе/выходе. Учитывайте Unicode, эмодзи, RTL‑текст и длинные подписи. Автотесты на сериализацию спасают часы в проде. Мы держим заглушки на редкие события, чтобы бот не падал молча.

Права и доступы в чатах

Боту не хватает прав: чтение/удаление/приглашение/публикация

Проверьте галочки прав на отправку сообщений, ссылок, медиа и управление сообщениями. В канале без админки бот писать не будет – так устроено. Для закрепов и ссылок нужны отдельные разрешения – уточните это заранее. Мы всегда описываем требуемые права в README проекта.

Ограничения группы, «молчит» в супергруппах

Супергруппы включают антифлуд и slow‑mode – визуально бот «молчит». Проверьте фильтры и режим «только админы», а также Privacy Mode. Если нужен доступ к обычным сообщениям – выключайте Privacy Mode или работайте командами. Тест в песочнице экономит много нервов.

Во многом именно эти настройки и создают ощущение, что «всё сломалось», поэтому при диагностике важно отдельно разбираться, почему не работают боты в Телеграм именно в конкретном чате: шаг за шагом проверяйте режим супергруппы, антифлуд, slow mode, права бота и Privacy Mode, прежде чем искать проблему в коде или у провайдера.

Пользователь заблокировал бота; запреты на PM

403 Forbidden в личке = пользователь заблокировал бота. Не шлите повторно и не сжигайте лимиты – уважайте выбор пользователя. Дайте инструкцию по разблокировке в FAQ и интерфейсе. Это уменьшает жалобы и повышает доверие к боту.

Сеть и инфраструктура

Фаервол/NAT/прокси/CDN: проброс портов и белые списки IP

Откройте исходящие на api.telegram.org:443 и входящие на порт вебхука. За NAT/прокси проверьте заголовки X‑Forwarded и реальный IP клиента. При необходимости добавьте IP Telegram в белые списки хостинга. Мы регулярно делаем трассы и проверяем MTU при нестабильной сети.

DNS, IPv4/IPv6 несоответствия, переезды домена

Проверьте A/AAAA записи и TTL, особенно после переезда домена. Несовместимость IPv6 вызывает таймауты на части клиентов – отключите AAAA или настройте поддержку. Подождите распространения DNS перед переключением вебхука. Эти мелочи часто объясняют «мистические» отказы.

Хостинг/серверлесс таймауты, холодный старт, ограничение памяти/CPU

Сверьте таймауты функций и лимиты по памяти/CPU – при недогрузке всё «висит». Холодный старт ломает 200 OK – держите «тёплый» пул или пинг по расписанию. Следите за p95 задержкой и временем до ответа: это ранние индикаторы проблем. В нашем опыте это ловит деградацию раньше, чем пользователи её заметят.

Логика и код бота

Непойманные исключения, падение воркера, очереди сообщений

Включите глобальный перехват ошибок и алерты на падения процессов. Следите за длиной очередей и признавайте сообщения (ack), чтобы не плодить дубли. Проверяйте утечки памяти, чтобы воркеры не умирали тихо. Watchdog‑перезапуск часто возвращает доступность без редеплоя.

Несоответствие схеме апдейтов: необработанные типы (poll, shipping, chat_join_request)

Сверьте список типов апдейтов и добавьте заглушки на редкие события. Логируйте неожиданные payload (тело запроса), чтобы быстро видеть причину падения. Расширьте тесты: poll, shipping_query, pre_checkout_query, chat_join_request. Так вы не поймаете сюрприз в проде.

Локали/таймзона, часы бездействия, конфликт cron‑задач

Проверьте таймзону сервера и расписание cron – не мешают ли они обработке апдейтов. Добавьте окна тишины для ночных часов, если пользователям лучше не писать. Разведите cron и воркеры по очередям, чтобы не блокировать друг друга. Это убирает «мистические» провалы вовлечения.

Интеграции и внешние API

Ключи, квоты, SLA сторонних сервисов

Держите ключи в секрет‑хранилище и проверяйте квоты заранее. Следите за SLA партнёров и готовьте «план Б» при недоступности. Храните ссылки на статус‑страницы поставщиков. Мы добавляем кеш и фолбэки, чтобы бот не зависел от чужих шипов.

Таймауты, экспоненциальные ретраи, циркит‑брейкеры

Ставьте таймауты (время ожидания ответа) и ретраи (повторные попытки) на внешних вызовах. Включайте circuit breaker (автовыключатель запросов), чтобы не перегружать сервисы. Сообщайте пользователю дружелюбные тексты при деградации. Это сохраняет доверие и лимиты.

Валидация внешних данных и санитизация

Санитизируйте Markdown/HTML и экранируйте спецсимволы. Валидируйте длины/типы, даже если «по документации всё ок». Не доверяйте внешним JSON и проверяйте поля на входе. Такой слой защиты избавляет от неожиданных падений.

Таблица 1 – Коды/ситуации Bot API → что значит → как чинить

(Вставить компактную таблицу до 10 строк)

Код/статусСитуацияДиагнозДействие
400 Bad RequestНеверный JSON/параметрВалидация упалаИсправьте поле/тип и пересоберите
401 UnauthorizedНеверный токенТокен отозван/ошибочныйПолучите новый в BotFather
403 ForbiddenНет прав/заблокированPM запрещён/не админЗапросите права/инвайт
409 ConflictДва канала апдейтовWebhook+polling одновременноОтключите одно, deleteWebhook
413 Payload Too LargeСлишком большой файлПревышены лимитыСжимайте/делите
429 Too Many RequestsRate limitЧастые запросыБэкофф, очереди
502/504 UpstreamСеть/шлюзВременный сбойРетраи, мониторинг
webhook last_errorНе 200 OK/TLSСервер не отвечаетЧините TLS/цепочку, ускоряйте

Таблица 2 – Симптом → вероятная причина → что проверить

(Вставить компактную таблицу до 10 строк)

СимптомПричинаПроверка/исправление
Бот молчитWebhook не установленgetWebhookInfo, TLS/200 OK
Двойные сообщенияoffset не сдвигаетсяlast_update_id, идемпотентность
Не пишет в группуPrivacy Mode/нет прав/setprivacy, выдать админа
Кнопка не отвечаетНеверный callback_dataДлины/JSON, обработчик
Падает на медиаПревышен размер/типЛимиты, fallback
В PM «blocked»Пользователь заблокировалПроверить 403, не слать повторно

Примеры команд и проверок (для копипаста)

Проверить/поставить webhook

curl -F "url=https://example.com/bot-hook" https://api.telegram.org/bot<TOKEN>/setWebhook
curl https://api.telegram.org/bot<TOKEN>/getWebhookInfo

Снять webhook и перейти на polling

curl "https://api.telegram.org/bot<TOKEN>/deleteWebhook?drop_pending_updates=true"
curl "https://api.telegram.org/bot<TOKEN>/getUpdates?timeout=30"

Быстрый healthcheck обработчика

curl -i https://example.com/bot-hook/health

Чеклист перед релизом и при инциденте

Перед релизом

Токен, команды, Privacy Mode, права в чатах. Вебхук: валидный сертификат, 200 OK, таймауты (время ожидания ответа). Лимиты, очереди, мониторинг ошибок и задержек. Задокументируйте версии, домены и режим получения апдейтов.

При инциденте

Остановите шторм запросов и включите бэкофф. Включите расширенный лог апдейтов и ошибок с отметкой времени. Проверьте инфраструктуру (DNS, TLS, сеть), при необходимости сделайте откат/канареечный релиз. Временно перейдите на polling до фикса вебхука.

Логи, алерты и SLO

Лог‑шаблон (копипаста)

Единый формат логов ускоряет поиск причины и сравнение релизов. Рекомендуем поля: request_id, update_id, chat_id, handler, t_start, t_finish, duration_ms, status_code, error_class, error_message, retry_count, webhook_url. Держите правило: p95 duration_ms ≤ 3000 (95% запросов быстрее 3 c). Это простая цель, которая хорошо коррелирует с «бот отвечает вовремя».

{
  "request_id":"...",
  "update_id":123456789,
  "chat_id":-100123456,
  "handler":"onCallback",
  "t_start":"2025-11-14T09:00:00Z",
  "t_finish":"2025-11-14T09:00:01Z",
  "duration_ms":980,
  "status_code":200,
  "error_class":null,
  "error_message":null,
  "retry_count":0,
  "webhook_url":"https://example.com/bot-hook"
}

Алерты и SLO

Поставьте алерт, если last_error_date в getWebhookInfo обновился за последние 5 минут – это ранний сигнал. Алерт на p95 duration_ms > 2000 ms 5 минут подряд – повод разбирать задержки. SLO: ≥ 99.9% успешных 200 OK вебхука и p95 < 2 s. Эти цели реалистичны и дают предсказуемое качество сервиса.

Проверка TLS за минуту

Chain‑test команда

Быстро проверить цепочку сертификатов можно одной командой OpenSSL. Выполните строку ниже и посмотрите issuer/subject/dates и что цепочка полная (есть intermediate). Обратите внимание на CN/SAN (имя домена) и актуальные даты – просроченный cert «глушит» вебхук. Если chain неполный – настройте веб‑сервер на выдачу полного набора.

echo | openssl s_client -servername example.com -connect example.com:443 -showcerts 2>/dev/null | openssl x509 -noout -issuer -subject -dates

Улучшения на глубину (идеально на ближайший спринт)

Автотесты совместимости входящих апдейтов

Покройте редкие типы событий: poll, shipping_query, pre_checkout_query, chat_join_request. Цель проста: бот не падает на неожиданных payload (тела запросов). Добавьте заглушки и валидаторы схем, чтобы ловить несоответствия. Такой слой предотвращает «тихие» падения после обновлений клиентов.

Идемпотентность на уровне хранилища

Сделайте таблицу processed_updates(update_id PK, processed_at) или Redis‑ключи с TTL. Паттерн «check‑then‑set» гарантирует от дублей при ретраях (повторных попытках). Обработка должна быть атомарной: записали – значит обработано. Это убирает «призраков» и неожиданные повторные платежи/действия.

Унификация ретраев и circuit breaker’ов

Вынесите в middleware: timeout, экспоненциальный backoff с jitter, max retries, короткое замыкание при 5xx/timeout. Единая политика делает поведение предсказуемым и экономит лимиты. Добавьте дружелюбные сообщения пользователю при деградации. Это повышает доверие и удержание.

Дашборд: минимум графиков

Что мониторить обязательно

Потоки вебхука: количество запросов, доля 200/не‑200, p95/avg задержка. Распределение типов апдейтов: видеть, что реально приходит и где пустоты. Ошибки по кодам: 400/401/403/409/429/5xx – понятная карта неисправностей. Очереди/рассылка: глубина, скорость обработки, отклонения от нормы.

Runbook инцидента (1 страница)

Сценарий: «бот молчит в группах»

Проверьте Privacy Mode и права: бот видит только команды? Включите/выключите по сценарию. Снимите getWebhookInfo, посмотрите last_error_message: нет ли TLS/timeout. Проверьте TLS chain/CN/SNI и переключитесь временно на polling, затем – откат/канареечный релиз. Такой порядок сокращает MTTR и исключает «гонки» каналов.

Редкие кейсы: проверьте, если всё остальное ок

Что ещё бывает на проде

Прокси/балансировщик перезаписывает заголовок Host – SNI/маршрут ломается; явно форсируйте proxy_set_header Host ... и корректный SNI на бэкенде. Серверлесс страдает от холодного старта (>3–5 s): держите прогрев по cron. Инлайн‑режим: проверьте лимиты answerInlineQuery и кэш. MarkdownV2: экранируйте спецсимволы _[]()~ – иначе будут «тихие» 400.

Facebook
Twitter
LinkedIn

Оставьте ответ

Your email address will not be published.

Вы можете использовать эти HTML-теги и атрибуты: <a href=""> <abbr> <acronym> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Накрутка социальных сетей

  • Увеличьте количество подписчиков
  • Повышайте охваты и вовлечённость
  • Автоматизируйте привлечение клиентов
Заказать накрутку
★★★★☆ 4.8/5
Отзывы клиентов
Анна Шевченко

Анна Шевченко

Опытный специалист в SMM, социальных сетях и SEO. 📈, работающий в компании Foxy-IT. Помогаю бизнесам и брендам привлекать аудиторию, строить имидж и достигать целей в цифровом пространстве. Более 5 лет в сфере продвижения, разработки стратегий и оптимизации контента. Постоянное обучение и анализ трендов позволяют мне разрабатывать эффективные решения для клиентов. Веду проекты от идеи до результата, делая ваш бизнес заметным и успешным. X Twitter / X LinkedIn LinkedIn

Последнее