Рассылка в боте встала на половине: лимиты Telegram и MAX
Рассылка дошла до половины базы и встала, а исполнитель говорит «Telegram ограничил». Разбираем лимиты Telegram и MAX по документации, ошибку 429, расчёт времени рассылки и очередь с паузой, повторами и учётом блокировок.
retry_after и отдельным учётом тех, кто заблокировал бота.
Рассылка дошла до половины и встала
Вы запустили рассылку по базе клиентов. Через пару минут счётчик «доставлено» замер и не растёт. Исполнитель отвечает коротко: «Telegram ограничил».
Обычно за этим стоит одно из трёх. Скрипт отправляет всё разом в несколько потоков и упирается в потолок. Или получил ошибку 429 и упал. Или не упал, но записал всех оставшихся как «недоставлено», и повторить некому. Лимиты описаны в документации, а код под них не написан.
Откуда лимиты и сколько займёт рассылка
В FAQ по ботам Telegram (core.telegram.org/bots/faq) сказано: в одном чате не стоит слать больше одного сообщения в секунду, в группе бот не может отправить больше 20 сообщений в минуту, а массовая рассылка не может идти быстрее примерно 30 сообщений в секунду. При превышении начинаются ошибки 429.
В документации MAX (dev.max.ru) два места. Для стабильной работы ботов максимум запросов на platform-api2.max.ru указан как 30 в секунду. В описании отправки сообщения написано, что в один диалог, группу или канал можно слать не больше двух сообщений в секунду, а при превышении сообщения нужно ставить в очередь или делать задержку.
Код 429 означает «слишком много запросов». В Bot API Telegram вместе с ним приходит поле retry_after, то есть число секунд, которые нужно подождать до повтора. У MAX код 429 в списке ответов есть («превышено количество запросов»), а подсказки о времени ожидания я в документации не нашёл.
Лимит общий на бота, поэтому лишние потоки скорость не поднимают, они только быстрее упираются в потолок. 10 000 получателей при 30 в секунду это 333 секунды, около 5,6 минуты. С запасом, на 25 в секунду, около 7 минут. База в 100 000 человек при 30 в секунду займёт примерно 56 минут. Если на человека уходит больше одного запроса, например на загрузку картинки, считайте запросы.
Как строить очередь с паузой и повторами
Шаг 1. Очередь в базе данных. Каждый получатель это строка со статусом: ждёт, отправлено, заблокировал, ошибка, и числом попыток. Если процесс упал, место остановки не теряется.
Шаг 2. Один отправитель с паузой чуть ниже потолка. В одном из моих ботов пауза 0,04 секунды, это не больше 25 сообщений в секунду.
Шаг 3. Ожидание по 429. Получили ошибку, прочитали retry_after, подождали это время и повторили тот же запрос. Попыток у меня три. Если времени ожидания нет, как у MAX, берут фиксированную паузу. В моём боте для MAX это две секунды.
Шаг 4. Блокировка и временный сбой это разные исходы. Если человек заблокировал бота или удалил чат, ему больше не пишут и помечают в базе. Таймаут, 5xx и 429 временные, помечать за них человека блокировавшим нельзя. В движке рассылок «Поехали» я разделил их, когда заметил, что любой отказ читался как блокировка и одна секундная неполадка навсегда отключала человека от уведомлений. В моём коде 403 от Telegram и 403 или 404 от MAX считаются «слать больше некуда». В открытой документации Telegram, которую я читал, отдельного описания этой ошибки нет, так что это моя практика, а не цитата.
Шаг 5. Продолжение с места остановки: повторный запуск берёт только тех, кому не ушло.
Шаг 6. Отчёт. Доставлено, заблокировали, временные ошибки, осталось. Без него о сбое вы узнаёте от клиентов.
Честно про свой код. Рассылка в «Поехали» идёт последовательно, 429 там считается временным сбоем, а пауз и повтора неудачных нет: аудитория небольшая и в потолок не упирается. Для базы в тысячи человек очередь нужна обязательно. Что такое API, объяснено в статье «Что такое API простыми словами».
Что важно учесть
У Telegram есть платные рассылки. По FAQ, они включаются в @BotFather и поднимают потолок до 1000 сообщений в секунду. Каждое сообщение сверх бесплатных 30 в секунду стоит 0,1 Telegram Stars с баланса бота, платить нужно только за успешные. Условие для включения: на балансе бота не меньше 100 000 Stars и не меньше 100 000 активных пользователей в месяц. Для малого бизнеса это почти недостижимо, так что считаем на бесплатных 30 в секунду. Курс Stars к рублю я не проверял.
Без платных рассылок Telegram советует растягивать отправку на 8-12 часов, то есть делить большую рассылку на волны.
Цифры в документации приблизительные («около 30»), и платформы их меняют, поэтому перед крупной рассылкой перечитайте страницы. Не проверено: как MAX ведёт себя при блокировке бота пользователем, отдаёт ли он время ожидания при 429 и применяются ли к рассылке в каналах другие лимиты. На живом аккаунте я это не тестировал.
Бот не может писать тому, кто ни разу не нажимал «Старт», а согласие на рассылку нужно получить заранее, об этом в статье про 152-ФЗ для чат-ботов.
Что можно сделать уже сейчас
1. Откройте итоги последней рассылки: сколько отправлено, сколько ошибок и какой у них текст. Если итогов нет, это уже вывод.
2. Спросите у исполнителя пять вещей. С какой скоростью идёт отправка. Что делает код при 429 и читает ли retry_after. Продолжится ли рассылка с места остановки без дублей. Как отделяются блокировки от временных сбоев. Будет ли отчёт по итогам.
3. Посчитайте время: число получателей делить на 25 в секунду, плюс запас.
4. Перед большой отправкой прогоните рассылку на 20 своих контактов и посмотрите отчёт. Как не терять клиентов блокировками, описано в статьях про рассылки без блокировок и про бота и рассылку для повторных продаж. Если у вас клиенты в разных мессенджерах, посмотрите единого бота для Telegram, MAX и VK, а саму очередь и отчёты мы делаем в рамках разработки Telegram и MAX ботов.
Частые вопросы
Можно ли разогнать рассылку без платных функций?
Нет, потолок общий на бота, и лишние потоки дадут только больше ошибок 429. Выше потолка у Telegram только платные рассылки с условиями выше, иначе рассылку растягивают во времени.
Рассылка уже встала. Запускать заново?
Нет, иначе первые получатели увидят сообщение дважды. Выгрузите, кому ушло, и добейте остальных с паузой.
Что делать с теми, кто заблокировал бота?
Пометить и не слать, из базы не удалять. По документации Bot API, в личных чатах бот получает обновление о блокировке и разблокировке, так что вернувшегося человека можно вернуть в рассылку.
Коротко о главном
Рассылка на тысячи человек без очереди, паузы, ожидания по 429 и разделения блокировок и сбоев рано или поздно остановится. Время рассылки считают заранее: получатели делить на скорость, с запасом.
Хотите, чтобы я посмотрел вашу рассылку, нашёл, где она теряет людей, и собрал очередь с отчётом? Напишите мне в Telegram слово «РАССЫЛКА».
Всё о мессенджере MAX в одном месте
Эта статья — часть кластера материалов о MAX: разработка ботов и мини-аппов, продвижение канала, воронки, отраслевые сценарии и кейсы с реальными результатами.
Что я делаю для бизнеса
- Боты в Telegram, MAX, VK
- Автоматизация процессов и CRM
- Аналитика и дашборды
- Сайты и лендинги под ключ
Бесплатно: чек-лист «Готов ли ваш бизнес к 152-ФЗ»
12 пунктов, которые проверяют готовность за час: данные, согласия, уведомление в РКН, локализация, защита. Отметьте, что уже сделано, и увидите дыры, за которые сейчас штрафуют.
Готовы обсудить вашу задачу?
Бесплатная консультация — разберём, как внедрить это в вашем бизнесе под ключ. Без форм, пишите напрямую.
Разборы, кейсы и практика — без воды. Выходит регулярно, читать 3–5 минут.


