Если что-то не работает
Ошибка 429 Too Many Requests в Telegram-боте: что значит retry after
Коротко
Ошибка 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 и как устроить рассылку по базе, чтобы ошибки не появлялись вовсе.
| Куда отправляем | Ограничение | Что будет при превышении |
|---|---|---|
| Один личный чат | Не больше 1 сообщения в секунду, короткие всплески допускаются | Ошибки 429 с retry_after |
| Одна группа | Не больше 20 сообщений в минуту | Ошибки 429 с retry_after |
| Массовая рассылка разным людям | Около 30 сообщений в секунду | Ошибки 429, рассылка тормозит или обрывается |
| Платная рассылка (paid broadcasts) | До 1000 сообщений в секунду, сообщения сверх 30 в секунду оплачиваются звёздами Telegram | Доступна только крупным ботам: нужен баланс от 100 000 звёзд и от 100 000 активных пользователей в месяц |
Найдите в логах, на чём бот упирается в лимит#
Откройте логи и посмотрите, когда появляется ошибка 429 и на каком действии. Если она сыплется во время рассылки — дело в скорости массовой отправки. Если в одной группе — бот пишет туда чаще 20 сообщений в минуту. Если в одном чате — бот отвечает несколькими сообщениями подряд или часто редактирует одно и то же сообщение, а редактирование тоже считается запросом. От места зависит лечение: паузы в рассылке, склейка сообщений или ограничение частоты обновлений.
Ждите ровно столько, сколько просит retry_after#
В ответе с ошибкой 429 Telegram передаёт поле retry_after — число секунд, после которых можно повторить запрос. Правильная реакция одна: поймать ошибку, подождать это время и отправить то же сообщение снова. В aiogram это исключение TelegramRetryAfter с полем retry_after, в python-telegram-bot — исключение RetryAfter. Не повторяйте запрос сразу и не пропускайте сообщение молча: в первом случае ожидание растёт, во втором человек просто ничего не получит.
Делайте рассылки с паузами, а не все разом#
Самая частая причина 429 — рассылка по всей базе одним циклом без пауз или сотнями параллельных запросов. Отправляйте сообщения по одному с небольшой паузой между ними, чтобы укладываться заметно ниже 30 сообщений в секунду, — например, одно сообщение раз в 50–100 миллисекунд. Для базы в несколько тысяч человек рассылка займёт минуты, а не секунды, и это нормально. Сохраняйте, кому сообщение уже ушло, чтобы после сбоя продолжить с того же места, а не слать всем повторно.
Используйте очередь или встроенный ограничитель библиотеки#
Вместо пауз вручную можно поставить ограничитель, который сам держит темп. В python-telegram-bot есть AIORateLimiter: он ставится отдельно командой pip install "python-telegram-bot[rate-limiter]" и по умолчанию держит 30 запросов в секунду в целом и 20 в минуту на группу; повторы после 429 у него по умолчанию выключены и включаются параметром max_retries. В aiogram встроенного ограничителя для отправки нет, поэтому рассылку обычно делают своей очередью: задачи складываются в список и отправляются с заданным темпом, а ошибка 429 ставит очередь на паузу.
Отправляйте меньше сообщений#
Часто 429 лечится не паузами, а тем, что бот отправляет меньше. Склейте три сообщения подряд в одно, вместо нового сообщения на каждое обновление редактируйте одно, но не чаще раза в несколько секунд. Если бот присылает прогресс долгой операции, обновляйте его по таймеру, а не на каждый шаг. Для групп особенно важно не превышать 20 сообщений в минуту: там лимит строже, чем в личных чатах.
Обрабатывайте ошибки отправки, чтобы бот не падал#
Ошибка 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.
Где посмотреть логи и статус проекта?
На странице проекта есть статус, логи и история событий — по ним видно, что происходит с проектом прямо сейчас. Лента логов показывает и более ранние строки: пролистайте её вверх, и они подгрузятся сами.