Справочник по Bot API
Двадцать сообщений в минуту в одну группу
Бот отправляет примерно 20 сообщений в минуту в одну группу или супергруппу. Это отдельный и заметно более жёсткий бюджет, чем общая скорость отправки бота; он считается на каждый чат, и именно в него бот модерации или сообщества упирается задолго до любого другого лимита.
Лимит сообщений в один чат: точные цифры
- Скорость отправки в одну группу
- ~20 сообщений в минуту в одну группу
- Скорость на группу
- ~20 сообщений в минуту
- Фактический ритм
- Одно сообщение раз в 3 секунды, непрерывно
- Связь с общим лимитом
- Действуют оба; первым может сработать любой
- Редактирование
- Штатный способ показывать меняющееся состояние, не тратя отправки
As of 2025-10-01, Telegram Bot API 13.4
Что это значит на практике
Число выглядит щедрым и ведёт себя наоборот, потому что это скорость, а не запас. Двадцать в минуту — это одно сообщение раз в три секунды, непрерывно. Не двадцать в первую секунду и потом пауза: бот, отвечающий на каждое сообщение в живой группе во время запуска, израсходует бюджет за несколько секунд и проведёт остаток минуты в торможении — ровно тогда, когда его ответы стоили дороже всего.
Это меняет то, как проектируют бота для групп, и меняет архитектурно, а не параметром в конфиге. Бот, публикующий по одному подтверждению на каждое действие участника, не масштабируется дальше тихой комнаты. Выживают два приёма — агрегация и редактирование: собрать несколько событий и опубликовать одну сводку либо опубликовать один раз и править то же сообщение по мере изменения состояния. Редактирование не тратит бюджет отправки так, как тратит его новое сообщение, поэтому одно редактируемое сообщение о статусе — стандартный ответ для всего, что обновляется часто.
Второй надёжный ход — увести разговор из группы, и обычно это ещё и лучше продуктово. Бот модерации, объясняющий удаление прямо в группе, тратит самый дефицитный свой ресурс на сообщение, которого большинство участников не хотело; то же объяснение, отправленное затронутому человеку в личку, не стоит групповому бюджету ничего и с большей вероятностью будет прочитано. Публичные посты остаются для того, что действительно должно быть публичным.
Лимиты складываются, а не заменяют друг друга. Бот, обслуживающий сорок групп, ограничен двадцатью сообщениями в минуту на каждую группу и примерно тридцатью в секунду на бота целиком, и упереться он может в любой из двух. Бот модерации в одной очень активной группе упирается в лимит на чат; он же в четырёхстах группах — в общий. Какой из двух сработает первым, зависит от развёртывания, а не от кода, и отвечать на этот вопрос стоит до того, как архитектура зафиксирована, а не после.
Как это обрабатывать в коде
// One status message, edited, instead of one message per event.
const statusByChat = new Map<number, number>()
async function reportProgress(chatId: number, done: number, total: number): Promise<void> {
const text = `Processing ${done} of ${total}`
const existing = statusByChat.get(chatId)
if (existing === undefined) {
const sent = await bot.api.sendMessage(chatId, text)
statusByChat.set(chatId, sent.message_id)
return
}
// Editing to identical content throws, so skip the no-op rather than catching it later.
await bot.api.editMessageText(chatId, existing, text)
}Какие вопросы это порождает
Считается ли ответ на сообщение в групповой лимит?
Да. Ответ — такое же сообщение в группе, как любое другое, и привязка к конкретному посту ни от чего не освобождает. Именно поэтому бот, реагирующий на каждое упоминание в живом сообществе, сам себя тормозит во время тех самых событий, ради которых его и покупали.
Действует ли этот лимит на посты в канал?
Канал — другой тип чата и на практике ведёт себя иначе; во многом поэтому продукты с рассылками строят на каналах, а не на группах. Один пост в канал доходит до каждого подписчика как одно сообщение, тогда как охват тех же людей по отдельности стоит по одной отправке из общего бюджета бота.
Дешевле ли удалить сообщение, чем не отправлять его?
Нет, и это стоит проговорить, потому что боты модерации часто считают иначе. Удаление — такой же вызов API, как любой другой. Бот, который публикует предупреждение и убирает его через несколько секунд, потратил два вызова там, где личное сообщение нарушителю обошлось бы одним и не тронуло бы групповой бюджет вовсе.
Как понять, в какой именно лимит я упёрся?
Ответ 429 называет retry_after, но не называет исчерпанный бюджет, поэтому диагноз ставится по контексту: торможение, собранное в одном активном чате, — это лимит на группу, а торможение, ровно размазанное по многим чатам во время рассылки, — общий. Если писать в лог идентификатор чата рядом с каждым 429, разница становится очевидной за минуту, а не за вечер.
Смежные ограничения
Ответ 429, к которому эта страница возвращается постоянно, и правила его обработки описывает страница о том, что сервер возвращает при превышении лимита.
Почему активная группа создаёт ещё и входящее давление и как бот его принимает, объясняет разбор того, как приходят апдейты.
Про защиту эндпоинта, на который приходят эти групповые апдейты, читайте страницу о секретном токене вебхука.
Как эти ограничения формируют бота, которому приходится действовать в шумной комнате, изложено на странице сборки бота модерации.
Второй бюджет, который действует одновременно и считается в секундах, а не в минутах, — это общий потолок отправки на бота.