20 октября 2026 г.
Бот молчит, скрипт ловит ошибку, и первое объяснение всегда одно: «у Telegram что-то упало». Разбираю, что на самом деле отвечает api.telegram.org, как за три минуты понять, в чём дело, и что делать с вебхуком, токеном и лимитами.
Сначала разберу, что вообще отвечает Bot API и почему ответ «не работает» бывает сразу трёх разных видов. Потом проверка по шагам, отдельно случай «бот запущен, а сообщения не приходят», лимиты, разбор частых ошибок и список проверок, если ничего не помогло. Инструменты, которые я встраиваю в свои системы, разбираю в Telegram-канале.
Почему api telegram org не работает: три разные причины
Коротко: Bot API живёт по одному адресу и всегда отвечает JSON. «Не работает» почти всегда значит, что он ответил отказом, а не промолчал.
Все запросы к Bot API идут по HTTPS и выглядят одинаково: https://api.telegram.org/bot и дальше ваш токен, слэш, название метода. В документации Telegram это записано как api.telegram.org/bot<token>/METHOD_NAME. Поддерживаются GET и POST, параметры передаются четырьмя способами: строкой запроса, form-urlencoded, JSON и multipart для файлов.
Отвечает сервер всегда JSON-объектом, в котором есть логическое поле ok. Если ok равно true, результат лежит в поле result. Если ok равно false, причина написана словами в поле description, рядом приходит числовое error_code, а иногда ещё объект parameters, по которому ошибку можно разобрать автоматически. Telegram отдельно предупреждает, что содержимое error_code со временем может меняться, поэтому читать нужно description.
Отсюда главное для диагностики. Получили JSON с ok: false - сервис работает и отказал именно вам: по адресу, по токену, по правам или по лимиту. Ответа нет вообще и соединение не устанавливается - вопрос уже не к боту, а к сети на той машине, откуда идёт запрос.
И есть третий вид «не работает», самый обидный: запросы проходят, ответы с ok: true, а бот молчит. Так ведёт себя бот, у которого включён вебхук, а код всё это время опрашивает getUpdates. Разбираю этот случай отдельным разделом ниже.
Три причины, на которые приходится почти вся моя почта по ботам:
- Адрес или токен. Забыли слово bot перед токеном, обрезали токен при копировании, отозвали его в BotFather и не заменили в проекте.
- Способ получения обновлений. Вебхук когда-то поставили и забыли, а код опрашивает getUpdates.
- Лимиты. Рассылка упирается в ограничение сообщений в секунду, и сервер отвечает ошибкой 429.
Как проверить, в чём дело: по шагам
Коротко: три запроса из адресной строки браузера показывают, жив ли сервис, верен ли токен и каким способом ваш бот получает обновления.
Шаг 1. Откройте в браузере проверочный запрос, подставив вместо слов свой токен. Слово bot идёт слитно перед токеном, это прямо сказано в инструкции Telegram.
https://api.telegram.org/bot<ваш токен>/getMe
Шаг 2. Посмотрите на ответ. Если в нём ok: true и внутри result данные вашего бота с id и username, то сервис работает и токен верный. Дальше причина в вашем коде или в способе получения обновлений, и вы идёте на шаг 4.
Шаг 3. Если в ответе ok: false, прочитайте поле description. Оно написано человеческими словами и прямо говорит, что серверу не понравилось. Самая частая история здесь - токен: он не тот, обрезан при копировании или отозван. Новый выдаётся командой /token в @BotFather, это официальный способ на случай, если токен скомпрометирован или потерян.
Шаг 4. Проверьте, как ваш бот получает обновления.
https://api.telegram.org/bot<ваш токен>/getWebhookInfo
В ответе смотрите на поле url. Если оно пустое, вебхука нет и бот работает через опрос методом getUpdates. Если в url стоит адрес, у бота включён вебхук.
Шаг 5. Сверьте это с тем, что делает ваш код. Если код опрашивает getUpdates, а в url стоит адрес, ваш бот обновлений не получит никогда. В документации это зафиксировано отдельной строкой: получать обновления через getUpdates нельзя до тех пор, пока установлен исходящий вебхук. Снимается вебхук одним запросом.
https://api.telegram.org/bot<ваш токен>/deleteWebhook
Шаг 6. Если вебхук вам нужен, а обновления не идут, читайте в том же ответе поля last_error_date и last_error_message. Второе содержит текст последней ошибки доставки человеческими словами: там видно, почему Telegram не донёс обновление до вашего сервера. Рядом полезны pending_update_count и last_synchronization_error_date.
У меня такая последовательность висит в регламенте у менеджера: прежде чем звать разработчика, человек делает четыре запроса и сам видит, в токене дело или в вебхуке.
Бот запущен, а сообщения не приходят
Коротко: два способа получать обновления взаимоисключающие, и обновления живут на сервере не больше суток.
У бота два способа узнавать о новых сообщениях: метод getUpdates, то есть длинный опрос, и вебхук, когда Telegram сам стучится на ваш адрес. В документации они названы взаимоисключающими. Входящие обновления хранятся на сервере, пока бот их не забрал, но не дольше 24 часов. Отсюда правило: бот, который лежал двое суток, старые сообщения уже не увидит, и это нормальная работа сервиса, а не потеря.
Если обновления приходят по кругу, одни и те же, дело в подтверждении. Метод getUpdates отдаёт сто самых ранних неподтверждённых обновлений. Подтверждаются они параметром offset, и в FAQ Telegram формула записана прямо: offset равен update_id последнего обработанного обновления плюс один. Все обновления с номером меньше или равным offset сервер помечает подтверждёнными и больше не отдаёт. Не передаёте offset - получаете ту же сотню до посинения.
Если вы на вебхуке, проверяйте требования из FAQ Telegram, они короткие и жёсткие:
- Нужен действующий SSL-сертификат, без него вебхук не работает.
- Самоподписанный сертификат загружается параметром certificate в setWebhook, причём именно как файл: строкой не сработает.
- Поддерживаются только порты 443, 80, 88 и 8443.
- Переадресации не поддерживаются.
- Поле CN сертификата должно в точности совпадать с вашим доменом.
- Сертификаты с подстановочным знаком могут не поддерживаться.
Отдельная причина тишины - настройки приватности в группах. Telegram описывает это как режим, в котором бот видит не всё: ему достаются служебные сообщения, все сообщения из личных чатов и команды, адресованные ему. Сообщения других ботов он не увидит в любом режиме: Telegram закрыл эту возможность, чтобы боты не зацикливались друг на друге. Поэтому бот, который «не отвечает в чате», часто просто не получает то, на что вы его просите реагировать.
И последняя проверка из этого раздела: убедитесь, что для защиты вебхука вы используете штатный механизм. В setWebhook есть параметр secret_token длиной от 1 до 256 символов из латиницы, цифр, подчёркивания и дефиса. Telegram будет присылать его в заголовке X-Telegram-Bot-Api-Secret-Token каждого запроса, и по нему вы отличаете настоящие обновления от чужих. В FAQ есть и более простой совет: держать токен в секретном пути адреса.
Лимиты, из-за которых запросы начинают отваливаться
Коротко: на рассылке Bot API начинает возвращать ошибку 429, и в ответе лежит точное число секунд, сколько ждать.
Ограничения на отправку Telegram описывает в FAQ открыто. В одном чате не стоит отправлять больше одного сообщения в секунду: короткие всплески сверх лимита сервис иногда пропускает, но дальше начинает отвечать ошибкой 429. Массовые уведомления идут не быстрее примерно 30 сообщений в секунду. Если не включать платные рассылки, Telegram советует растягивать отправку на длинные интервалы, например на 8-12 часов.
Платные рассылки включаются в @BotFather и поднимают потолок до 1000 сообщений в секунду. Каждое сообщение сверх бесплатных 30 в секунду стоит 0,1 Stars с баланса бота в Telegram Stars. Порог входа высокий: 100 000 Stars на балансе и 100 000 активных пользователей в месяц. Платят только за доставленные сообщения.
Когда лимит сработал, сервер не бросает вас угадывать. В объекте ResponseParameters есть поле retry_after: число секунд, которые осталось подождать до повторного запроса. Там же живёт migrate_to_chat_id для случая, когда группа превратилась в супергруппу и её идентификатор сменился. Telegram отдельно просит не закладываться на жёстко прописанные значения лимитов, а обрабатывать ошибки политикой повторов.
Есть и ограничения на файлы. Метод getFile работает с файлами до 20 МБ, отправлять бот может файлы любого типа до 50 МБ. Упираетесь в это - поднимайте свой сервер Bot API, исходники Telegram выложил. На своём сервере ограничение на скачивание снимается, отправка растёт до 2000 МБ, вебхук можно вешать на HTTP и на любой порт, а max_webhook_connections поднимается до 100000.
Вот где это упирается в деньги. Посчитайте по лимиту: база в 20 тысяч подписчиков при 30 сообщениях в секунду - это около 11 минут рассылки, если ваш код обрабатывает retry_after. Если не обрабатывает, рассылки не будет вовсе: скрипт умрёт на первой же ошибке 429, а вы будете искать проблему в Telegram. Как такие вещи собирать так, чтобы они работали без вас, я показываю в вайбкодинге для контент-заводов, а какие нейросети ставить в эту связку, разбирала в статье про нейросети для создания контента.
Частые ошибки и что они значат
Коротко: читайте description и getWebhookInfo. Семь строк ниже покрывают почти все случаи.
- В ответе ok: false и текст в description - сервис работает и отказал именно вашему запросу. Причина написана словами в description, читайте её, а не error_code: Telegram предупреждает, что код со временем может поменяться.
- Ответа нет вообще, соединение не устанавливается - до api.telegram.org не доходит сеть с той машины, откуда идёт запрос. Вопрос к хостингу, бот тут ни при чём.
- В getWebhookInfo стоит url, а код опрашивает getUpdates - обновлений не будет, пока вебхук установлен. Либо снимайте его через deleteWebhook, либо переводите код на вебхук.
- Заполнено last_error_message - Telegram пытался доставить обновление и не смог. В поле лежит текст последней ошибки доставки, с него и начинайте.
- pending_update_count растёт - обновления копятся, потому что ваш сервер их не принимает или не успевает. Помните про сутки: дольше они не хранятся.
- Один и тот же апдейт приходит по кругу - не передаёте offset в getUpdates. Нужен update_id последнего обработанного плюс один.
- Ошибка 429 на рассылке - сработало ограничение на частоту. В ответе в parameters есть retry_after с числом секунд ожидания, по нему и повторяйте.
Если не получилось
Коротко: пройдите список сверху вниз, а потом смотрите, не писал ли вам сам @BotFather.
- Проверьте адрес по буквам: HTTPS, слово bot слитно перед токеном, дальше слэш и название метода. Регистр в названии метода роли не играет: все методы Bot API нечувствительны к регистру.
- Проверьте кодировку. Telegram требует, чтобы все запросы шли в UTF-8.
- Выпустите новый токен командой /token в @BotFather и подставьте его в проект. Старый после этого работать перестанет, так что меняйте везде сразу.
- Откройте переписку с @BotFather. Telegram присылает оттуда предупреждения, если видит, что с ботом что-то не то: они считают число ответов и соотношение запросов к ответам у популярных ботов, ориентир - около 300 запросов в минуту. По умолчанию приходит не больше одного предупреждения на бота в час. У каждого есть кнопка Fixed: нажали - и проверка повторится через 5-10 минут вместо часа.
- Если своих проблем вы не видите, в том же предупреждении есть кнопка Support, она открывает чат с @BotSupport.
- Проверьте гипотезу на отдельном боте. Telegram советует для отладки создать второго бота в @BotFather и запустить на его токене вторую копию кода: пользователей рабочего бота это не задевает. Учтите, что file_id привязан к идентификатору бота, и тестовая копия чужими file_id пользоваться не сможет.
- Для глубокой отладки есть отдельное тестовое окружение со своим аккаунтом и своим ботом, запросы в нём идут по адресу вида api.telegram.org/bot<токен>/test/METHOD_NAME. Лимиты там не ослаблены и бывают строже.
Ключи и токены в переписках, скриншотах и репозиториях не показываем даже частично. Как хранить доступы к Telegram, я подробно разобрала в статье про api id и api hash Telegram.
Частые вопросы
Коротко: ответы на пять вопросов, с которыми приходят чаще всего.
Это блокировка в России? Bot API живёт по обычному адресу api.telegram.org и отвечает по HTTPS. Если с вашей машины или с вашего хостинга соединение не устанавливается, разбирайтесь с сетью этой машины и с хостингом: вопрос в маршруте, а не в боте. Способов обхода ограничений я не даю и не советую.
Нужен ли мне свой сервер Bot API? Telegram прямо пишет, что большинству ботов хватает их серверов. Переезжать стоит ради конкретной возможности: больших файлов, HTTP-вебхука или нестандартного порта.
Токен утёк, что делать? Выпустить новый командой /token в @BotFather и заменить его во всех местах, где он прописан. Токен даёт полный контроль над ботом любому, у кого он оказался, Telegram об этом предупреждает в своей же инструкции.
Можно ли переименовать бота? Имя поменять можно, юзернейм - нет, Telegram это фиксирует отдельно. Юзернейм от 5 до 32 символов, только латиница, цифры и подчёркивания, и он обязан заканчиваться на bot.
Почему бот не видит сообщения других ботов? Так сделано специально, чтобы боты не зацикливались, переговариваясь между собой. В документации это объяснено открыто.
Не хотите разбираться сами
Коротко: подключение и автоматизацию можно отдать, а начать стоит с разбора задачи.
Если за всем этим стоит рабочая задача, считайте по-деловому: вечер на поиск вебхука, который кто-то поставил полгода назад, стоит ровно столько, сколько стоит ваш вечер. Подключение и автоматизацию под ключ я закрываю в ИИ-разработке, а разобрать задачу голосом можно на бесплатном созвоне на 20 минут или на консультации.
Я, Анастасия Майер, собираю свои системы так, чтобы они работали без меня, и боты в них - самая дешёвая часть автоматизации: они не болеют и не уходят в отпуск. Если хотите собирать такие вещи вместе с людьми, которые заняты тем же, заходите в клуб Майер: там мы разбираем свои связки и свои грабли. А кому отдавать такие задачи, когда своих рук не хватает, я разбирала в статье про ИИ-специалиста для контент-завода.
Источники
- Telegram, Bot API: форма запроса api.telegram.org/bot<token>/METHOD_NAME, поля ok, description, error_code и parameters, взаимоисключающие getUpdates и вебхук, хранение обновлений не дольше 24 часов, поля WebhookInfo, параметр secret_token и заголовок X-Telegram-Bot-Api-Secret-Token, порты вебхука, ResponseParameters с retry_after и migrate_to_chat_id, возможности своего сервера Bot API.
- Telegram, Bots FAQ: подтверждение обновлений через offset и сотня неподтверждённых, требования к сертификату и портам вебхука, лимиты одного сообщения в секунду в чат и около 30 сообщений в секунду на рассылку, платные рассылки до 1000 в секунду и 0,1 Stars за сообщение, лимиты файлов 20 и 50 МБ, почему бот не видит других ботов.
- Telegram, Bot Features: требования к юзернейму, выпуск нового токена командой /token, предупреждения от @BotFather и кнопки Fixed и Support, отладка на втором боте, тестовое окружение и адрес вида /test/METHOD_NAME.
- Моя статья про api id и api hash Telegram и раздел «Вайбкодинг для контент-заводов» на сайте.