Почему Telegram API не подключается к Яндекс.Облаку и что нужно сделать, чтобы устранить проблему?

У меня Telegram-бот, развернутый в Yandex.Cloud, работал нормально до вчерашнего дня. После обновления сборки Telegram перестал доставлять обновления в Yandex.Cloud (иногда сообщения доходят с задержкой 2–3 часа). Я пробовал переподключать Telegram API и откатывать скрипт, но данные от Telegram в Yandex.Cloud не приходят. Что проверить и какие шаги предпринять, чтобы восстановить нормальную доставку сообщений?
  • 4 июня 2026 г. 16:00
Ответы на вопрос 1
Коротко — проблема почти всегда не в «телеграме», а в том, что webhook-эндпоинт в Yandex.Cloud стал недоступен/отвечает неверно или медленно. Telegram при неуспешной доставке будет повторять запросы (с увеличивающимися интервалами), потому и задержки 2–3 часа. Что нужно проверить и в каком порядке действовать.

Что проверить в первую очередь
1. getWebhookInfo
   - Выполните запрос к Telegram API и посмотрите поле last_error_message / last_error_date и pending_update_count:
     - https://api.telegram.org/bot<ВАШ_ТОКЕН>/getWebhookInfo
   - Сообщение об ошибке подскажет причину (timeout, ошибка TLS, 404, 500 и т. п.).

2. Доступность вашего HTTPS-эндпоинта извне
   - Попробуйте curl из интернета: curl -v https://your-domain/path/to/webhook
   - Должен быть HTTP 200 (или 2xx) и ответ в течение 10 секунд.
   - Если нет ответа или timeout — Telegram будет повторять попытки и сообщения задерживаются.

3. TLS / сертификат
   - Если вы используете самоподписанный cert — Telegram требует при регистрации webhook загрузить сертификат. Если сертификат истёк или цепочка некорректна — Telegram не доставляет.
   - Проверка: openssl s_client -connect your-domain:443 -servername your-domain
   - Убедитесь, что сертификат валиден, цепочка CA полная, дата не истекла.

4. Логи в Yandex.Cloud
   - Посмотрите журнал входящих запросов: API Gateway / Load Balancer / Function / Serverless Containers — есть ли запросы от Telegram.
   - Если запросы не приходят — проблема на сетевом уровне (DNS, firewall, NAT, security group).

5. Сетевые настройки в Yandex.Cloud
   - Если используете VPC, балансировщик или NAT — проверьте, что публичный endpoint действительно открыт и соответствует DNS.
   - Проверьте Security Group / Network ACL — открыт ли 443 для внешних запросов.

6. Webhook-путь, секреты и валидаторы
   - Убедитесь, что URL, который зарегистрирован в setWebhook, совпадает с текущим URL (путь, домен).
   - Если вы используете secret_token (X-Telegram-Bot-Api-Secret-Token), убедитесь, что сервер не отвергает запросы из-за изменения токена.
   - Проверьте, что вы не сменили токен бота.

7. Время ответа сервера < 10 секунд
   - Telegram ожидает быстрый ответ. Если код стал делать тяжелую синхронную обработку и отвечает >10s, Telegram будет считать доставку неудачной.
   - Решение: отдавать 200 OK быстро и обрабатывать асинхронно (очередь).

Что можно сделать прямо сейчас, чтобы восстановить доставку
1. Посмотреть getWebhookInfo и понять ошибку.
2. Если webhook явно не работает — временно перейти на polling:
   - Выполните deleteWebhook и запустите getUpdates (polling) на вашей стороне, чтобы не терять сообщения.
3. Если endpoint недоступен — исправить DNS/сертификат/Firewall или перенести endpoint на рабочий URL (например, временно на ngrok или другой хост) и выполнить setWebhook на новый URL:
   - setWebhook: https://api.telegram.org/bot<ТОКЕН>/setWebhook?url=https://new-url/path
4. Исправьте код, чтобы отвечать 200 быстро и корректно проверять secret-token, затем снова setWebhook на ваш исправленный URL.

Диагностические команды (пример)
- Проверить webhook-инфо:
  https://api.telegram.org/bot<ТОКЕН>/getWebhookInfo
- Удалить webhook (чтобы включить polling):
  https://api.telegram.org/bot<ТОКЕН>/deleteWebhook
- Установить webhook:
  https://api.telegram.org/bot<ТОКЕН>/setWebhook?url=https://your-domain/path&secret_token=XXX

Дополнительные причины и моменты для проверки
- Изменения в сборке (ваший недавний апдейт): возможно, вы изменили путь, авторизацию или поведение ответа (например, теперь возвращаете 500 или 401).
- Балансировщик/таймауты Yandex.Cloud: проверьте настройки таймаутов (idle/timeout) на LB/API Gateway — они не должны резать соединение раньше, чем Telegram получит ответ.
- Ограничение max_connections в setWebhook (по умолчанию 40) — вряд ли причина задержек, но можно настроить.
- Проверка логов Telegram (last_error_message) часто сразу укажет причину (например, "TLS handshake timeout", "connection refused", "wrong HTTP response code").

Если после всех проверок неясно
- Смените URL на простой проверенный endpoint и повторите setWebhook, чтобы исключить проблему Telegram ↔ ваш endpoint.
- Временно включите polling, чтобы не терять события.
- При необходимости пришлите сюда вывод getWebhookInfo и последний error message — помогу интерпретировать.

Если хотите, помогу пошагово: пришлите результат getWebhookInfo и curl -v к вашему webhook URL (или ошибки из логов Yandex.Cloud).
Похожие вопросы