Ограничения Telegram Bot API: лимиты сообщений, файлов и запросов
Основы3 минРедакция Innovialabs
Коротко
Telegram рекомендует не чаще 1 сообщения в секунду в один чат, не больше 20 в минуту в группу и около 30 в секунду суммарно; файлы бот скачивает до 20 МБ и загружает до 50 МБ, текст — до 4096 символов, а при превышении частоты приходит ошибка 429 с retry_after.
Главные лимиты одной таблицей
Telegram публикует ориентиры в официальном Bot FAQ и документации Bot API. Точные пороги могут меняться и зависеть от нагрузки, поэтому воспринимайте их как безопасный потолок, а не гарантию.
| Что ограничено | Лимит |
|---|---|
| Сообщения в один чат | не чаще 1 в секунду (короткие всплески допускаются) |
| Сообщения в одну группу | не больше 20 в минуту |
| Массовая рассылка | около 30 сообщений в секунду суммарно |
Скачивание файла ботом (getFile) | до 20 МБ |
| Загрузка файла ботом | до 50 МБ, фото — до 10 МБ |
| Отправка файла по URL | фото до 5 МБ, остальное до 20 МБ |
| Текст сообщения | 4096 символов |
| Подпись к медиа | 1024 символа |
callback_data | 64 байта |
Результатов в answerInlineQuery | 50 |
| Медиа в альбоме | от 2 до 10 |
| Хранение необработанных обновлений | до 24 часов |
Для рассылок с большей скоростью у Telegram есть платные рассылки за Telegram Stars — параметр allow_paid_broadcast. Условия смотрите в актуальной документации.
Ошибка 429 и retry_after
Когда бот превышает лимит, API отвечает HTTP 429 Too Many Requests. В ответе есть поле parameters.retry_after — сколько секунд нужно подождать.
Правильная реакция:
- Остановить отправку в этот чат (или всю очередь, если лимит глобальный).
- Подождать ровно
retry_afterсекунд. - Повторить запрос.
Неправильная реакция — сразу повторять в цикле. Это продлевает блокировку и может привести к более жёстким ограничениям.
import asyncio
from aiogram.exceptions import TelegramRetryAfter
async def safe_send(bot, chat_id, text):
while True:
try:
return await bot.send_message(chat_id, text)
except TelegramRetryAfter as e:
await asyncio.sleep(e.retry_after)
Как проектировать бота под лимиты
Очередь отправки. Все исходящие сообщения проходят через одну очередь с ограничением скорости: общий лимит в секунду плюс отдельный интервал для каждого чата. Тогда всплеск заказов не превратится в волну ошибок.
Рассылки — отдельным процессом. Массовую отправку запускайте фоновой задачей, которая идёт пачками с паузами и сохраняет прогресс. Если процесс упадёт, рассылка продолжится с места остановки, а не начнётся заново с дублями.
Обработка 403. Пользователи блокируют бота. Ответ 403 Forbidden означает, что писать этому человеку больше нельзя: пометьте его в базе и исключите из следующих рассылок.
Длинные тексты. Делите их на части меньше 4096 символов по границам абзацев, а не посреди слова или разметки. Учитывайте, что подпись к фото ограничена 1024 символами.
Файлы. Загрузив файл один раз, сохраните его file_id и отправляйте повторно по нему — это быстрее и не тратит трафик. Если нужны файлы больше стандартных лимитов, можно поднять собственный Local Bot API Server: он снимает ограничение на скачивание и позволяет загружать файлы до 2000 МБ.
Редактирование вместо новых сообщений. Прогресс, статусы и меню лучше обновлять через editMessageText: меньше сообщений — меньше риск упереться в лимит в одном чате.
Удаление сообщений. Бот может удалять сообщения в группах только в течение 48 часов после отправки, так что автоочистку чата планируйте с этим ограничением.
Частые ошибки
- Рассылка простым циклом по всей базе без пауз и учёта 429.
- Отправка нескольких сообщений подряд в ответ на одно действие вместо одного сообщения.
- Повторная загрузка одного и того же файла вместо
file_id. - Хранение больших данных в
callback_data— лимит 64 байта. - Ожидание, что бот скачает видео пользователя на 100 МБ через стандартный API.