...

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

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

Бот перестал работать в телеграм? Я покажу, что критично проверить сразу (токен, вебхук, 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 и перезапустите воркеры. Проверьте дубликаты окружений, где мог остаться старый ключ. В моей практике именно рассинхрон токенов валил бота на часы.

Шаг 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 или работайте командами. Тест в песочнице экономит много нервов.

Пользователь заблокировал бота; запреты на 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

Последнее