NetrunНа главную

Если что-то не работает

Ошибка 429 Too Many Requests в Telegram-боте: что значит retry after

· 6 мин чтения

Коротко

Ошибка 429 Too Many Requests: retry after N значит, что бот отправляет сообщения быстрее, чем разрешает Telegram, и должен подождать N секунд. По официальному FAQ Telegram в один чат стоит отправлять не больше одного сообщения в секунду, в группу — не больше 20 в минуту, а массовая рассылка ограничена примерно 30 сообщениями в секунду. Лечится паузами между отправками, очередью сообщений и честным ожиданием времени из retry_after, после которого запрос нужно повторить. Смена хостинга на эту ошибку не влияет: лимиты привязаны к боту, а не к серверу.

  • Telegram отвечает кодом 429 Too Many Requests, когда бот превышает лимиты на отправку сообщений.
  • Поле retry_after в ответе с ошибкой 429 говорит, сколько секунд нужно подождать перед повторным запросом.
  • По FAQ Telegram в один чат бот не должен отправлять больше одного сообщения в секунду, а в одну группу — больше 20 сообщений в минуту.
  • Бесплатная массовая рассылка в Telegram ограничена примерно 30 сообщениями в секунду.
  • В python-telegram-bot есть встроенный ограничитель AIORateLimiter, который ставится отдельно командой pip install "python-telegram-bot[rate-limiter]".

Бот отлично работал, пока пользователей было десять, а на рассылке по базе в логах посыпались строки Too Many Requests: retry after 35. Часть людей сообщение получила, часть нет, а сам бот какое-то время отвечает с задержкой. Это не бан и не поломка: Telegram ограничивает, как быстро бот может отправлять сообщения, и ошибкой 429 просит притормозить.

Важно, что вместе с ошибкой Telegram сразу говорит, сколько ждать: число после retry after — это секунды. Если бот подождёт и повторит запрос, сообщение уйдёт. Если продолжит слать сообщения подряд, ожидание будет только расти. Ниже — какие лимиты действуют, как правильно обработать retry_after и как устроить рассылку по базе, чтобы ошибки не появлялись вовсе.

Лимиты Telegram Bot API на отправку сообщений (по официальному FAQ)
Куда отправляемОграничениеЧто будет при превышении
Один личный чатНе больше 1 сообщения в секунду, короткие всплески допускаютсяОшибки 429 с retry_after
Одна группаНе больше 20 сообщений в минутуОшибки 429 с retry_after
Массовая рассылка разным людямОколо 30 сообщений в секундуОшибки 429, рассылка тормозит или обрывается
Платная рассылка (paid broadcasts)До 1000 сообщений в секунду, сообщения сверх 30 в секунду оплачиваются звёздами TelegramДоступна только крупным ботам: нужен баланс от 100 000 звёзд и от 100 000 активных пользователей в месяц
  1. Найдите в логах, на чём бот упирается в лимит#

    Откройте логи и посмотрите, когда появляется ошибка 429 и на каком действии. Если она сыплется во время рассылки — дело в скорости массовой отправки. Если в одной группе — бот пишет туда чаще 20 сообщений в минуту. Если в одном чате — бот отвечает несколькими сообщениями подряд или часто редактирует одно и то же сообщение, а редактирование тоже считается запросом. От места зависит лечение: паузы в рассылке, склейка сообщений или ограничение частоты обновлений.

  2. Ждите ровно столько, сколько просит retry_after#

    В ответе с ошибкой 429 Telegram передаёт поле retry_after — число секунд, после которых можно повторить запрос. Правильная реакция одна: поймать ошибку, подождать это время и отправить то же сообщение снова. В aiogram это исключение TelegramRetryAfter с полем retry_after, в python-telegram-bot — исключение RetryAfter. Не повторяйте запрос сразу и не пропускайте сообщение молча: в первом случае ожидание растёт, во втором человек просто ничего не получит.

  3. Делайте рассылки с паузами, а не все разом#

    Самая частая причина 429 — рассылка по всей базе одним циклом без пауз или сотнями параллельных запросов. Отправляйте сообщения по одному с небольшой паузой между ними, чтобы укладываться заметно ниже 30 сообщений в секунду, — например, одно сообщение раз в 50–100 миллисекунд. Для базы в несколько тысяч человек рассылка займёт минуты, а не секунды, и это нормально. Сохраняйте, кому сообщение уже ушло, чтобы после сбоя продолжить с того же места, а не слать всем повторно.

  4. Используйте очередь или встроенный ограничитель библиотеки#

    Вместо пауз вручную можно поставить ограничитель, который сам держит темп. В python-telegram-bot есть AIORateLimiter: он ставится отдельно командой pip install "python-telegram-bot[rate-limiter]" и по умолчанию держит 30 запросов в секунду в целом и 20 в минуту на группу; повторы после 429 у него по умолчанию выключены и включаются параметром max_retries. В aiogram встроенного ограничителя для отправки нет, поэтому рассылку обычно делают своей очередью: задачи складываются в список и отправляются с заданным темпом, а ошибка 429 ставит очередь на паузу.

  5. Отправляйте меньше сообщений#

    Часто 429 лечится не паузами, а тем, что бот отправляет меньше. Склейте три сообщения подряд в одно, вместо нового сообщения на каждое обновление редактируйте одно, но не чаще раза в несколько секунд. Если бот присылает прогресс долгой операции, обновляйте его по таймеру, а не на каждый шаг. Для групп особенно важно не превышать 20 сообщений в минуту: там лимит строже, чем в личных чатах.

  6. Обрабатывайте ошибки отправки, чтобы бот не падал#

    Ошибка 429, не пойманная в коде, может остановить обработчик или всю рассылку, и бот будет казаться зависшим. Оберните отправку в обработку ошибок: при 429 ждите и повторяйте, при ошибке «бот заблокирован пользователем» пропускайте этого человека и отмечайте его в базе, чтобы больше ему не писать. Так рассылка дойдёт до конца, а заблокировавшие бота не будут тратить ваш лимит при каждой следующей отправке.

Ошибка 429 Too Many Requests — это не наказание, а просьба Telegram притормозить, и в ней уже написано, сколько ждать. Держите темп ниже лимитов, ждите время из retry_after и повторяйте запрос, а рассылки делайте очередью с паузами — тогда ошибка исчезнет. Хостинг здесь ничего не ускорит и не замедлит: лимиты одинаковы для бота на любом сервере. В Netrun логи бота видны в кабинете в реальном времени, поэтому 429 и место, где он возникает, видно сразу, а для рассылок, которые должны идти в любое время суток, боту нужен тариф Pro с круглосуточной работой. Попробовать Netrun.

Частые вопросы

Что значит retry after в ошибке Telegram?

Это число секунд, которое бот должен подождать, прежде чем снова отправлять запросы. Telegram сообщает его вместе с ошибкой 429 Too Many Requests. Подождите это время и повторите тот же запрос — сообщение уйдёт.

Сколько сообщений в секунду может отправлять Telegram-бот?

По официальному FAQ Telegram в один чат — не больше одного сообщения в секунду, в одну группу — не больше 20 в минуту, а массовая рассылка разным людям ограничена примерно 30 сообщениями в секунду. Для очень крупных ботов есть платные рассылки до 1000 сообщений в секунду.

Может ли Telegram заблокировать бота за ошибки 429?

Сама ошибка 429 — это временное ограничение, а не блокировка: подождите время из retry_after, и бот снова сможет отправлять сообщения. Но если бот упорно игнорирует это время и продолжает слать запросы, ожидание становится длиннее. Рассылки, на которые люди массово жалуются как на спам, — отдельная история, и там риск для бота выше.

Поможет ли переезд бота на другой сервер?

Нет. Лимиты Telegram привязаны к боту, то есть к его токену, а не к серверу или IP-адресу. Бот на любом хостинге упирается в одни и те же ограничения, поэтому лечится только темпом отправки в коде.

Как разослать сообщение всем пользователям бота без ошибок?

Отправляйте по одному сообщению с небольшой паузой, держась заметно ниже 30 сообщений в секунду, ловите ошибку 429 и ждите время из retry_after. Запоминайте, кому сообщение уже ушло, чтобы после сбоя не начинать сначала, и пропускайте тех, кто заблокировал бота.

Можно ли разместить Telegram-бота?

Да. Загрузите код бота и укажите токен от BotFather (его выдаёт сам Telegram при создании бота) — Netrun запустит бота, VPS и ручная настройка не нужны. На бесплатном тарифе бот работает 3 часа, чтобы вы всё проверили; чтобы он работал круглосуточно, подключите тариф Pro.

Где посмотреть логи и статус проекта?

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

Запустите свой проект

Загрузите код, ответьте на пару вопросов — и получите рабочую ссылку. Есть бесплатный тариф

Попробовать Netrun
Все статьи блога