Rate Limiting
Telegram Bot API имеет лимит ~30 запросов в секунду на бота. Пакет автоматически управляет этими лимитами с помощью системы rate limiting.
Как это работает
Заголовок раздела «Как это работает»В Sync режиме
Заголовок раздела «В Sync режиме»В sync режиме rate limiting не применяется. Все запросы отправляются сразу. Это подходит для разработки, но может привести к ошибкам 429 (Too Many Requests) в production.
В Queue режиме
Заголовок раздела «В Queue режиме»В queue режиме rate limiting применяется на воркерах:
- Проверяется текущий лимит для бота
- Если есть свободные слоты — запрос отправляется
- Если лимит достигнут — job возвращается в очередь
- Воркер не блокируется, обрабатывает другие jobs
Конфигурация
Заголовок раздела «Конфигурация»'sending' => [ // Лимит запросов в минуту на бота 'rate_limit_per_minute' => 1800, // ~30/сек
// Резерв для HIGH приоритета 'reserve_high_per_minute' => 300,],Лимит per bot
Заголовок раздела «Лимит per bot»Rate limiting считается отдельно для каждого бота. Если у вас несколько ботов, каждый имеет свой лимит.
Скользящее окно
Заголовок раздела «Скользящее окно»Используется скользящее окно 60 секунд через кеш. Это означает:
- Лимит проверяется за последние 60 секунд
- Старые запросы автоматически выходят из окна
- Более точное соблюдение лимитов
Приоритеты и резервирование
Заголовок раздела «Приоритеты и резервирование»Система резервирует слоты для HIGH приоритета:
'rate_limit_per_minute' => 1800,'reserve_high_per_minute' => 300,Это означает:
- HIGH может использовать все 1800 слотов в минуту
- LOW может использовать максимум 1500 слотов (1800 - 300)
- Минимум 300 слотов всегда доступны для HIGH
Пример сценария:
- 1500 LOW запросов в очереди
- Приходит 400 HIGH запросов
- LOW будут ждать, пока не обработаются HIGH
- 300 HIGH слотов зарезервированы и всегда доступны
Настройка лимитов
Заголовок раздела «Настройка лимитов»Для одного бота
Заголовок раздела «Для одного бота»TELEGRAM_RATE_LIMIT_PER_MINUTE=1800TELEGRAM_RESERVE_HIGH_PER_MINUTE=300Для продакшена
Заголовок раздела «Для продакшена»Рекомендуемые значения:
# Консервативный подход (меньше риск ошибок 429)TELEGRAM_RATE_LIMIT_PER_MINUTE=1500
# Агрессивный подход (максимальное использование)TELEGRAM_RATE_LIMIT_PER_MINUTE=1800Обработка ошибок 429
Заголовок раздела «Обработка ошибок 429»Если все же возникает ошибка 429, пакет логирует её:
// В логах будет:// Telegram outgoing request failed// error_code: 429// description: Too Many RequestsВ queue режиме job автоматически вернется в очередь и будет обработан позже.
Мониторинг
Заголовок раздела «Мониторинг»Логирование
Заголовок раздела «Логирование»Включите логирование ошибок в конфиге:
'sending' => [ 'log_failures' => true, 'log_response_body' => true, // Включать тело ответа в логи],Проверка через кеш
Заголовок раздела «Проверка через кеш»Rate limiter хранит данные в кеше Laravel. Вы можете проверить текущую нагрузку:
use Illuminate\Support\Facades\Cache;
// Ключи для проверки (пример)$cacheKey = "telegram_rate_limit_{$botId}";$data = Cache::get($cacheKey);Настройка для разных сценариев
Заголовок раздела «Настройка для разных сценариев»Высокая нагрузка (рассылки)
Заголовок раздела «Высокая нагрузка (рассылки)»// Увеличить лимит, если уверены'rate_limit_per_minute' => 1800,'reserve_high_per_minute' => 500, // Больше резерва для ответовНизкая нагрузка
Заголовок раздела «Низкая нагрузка»// Консервативные значения'rate_limit_per_minute' => 1200,'reserve_high_per_minute' => 200,Несколько ботов
Заголовок раздела «Несколько ботов»Каждый бот имеет отдельный лимит, но учитывайте общую нагрузку на сервер.
Отладка
Заголовок раздела «Отладка»Включение детального логирования
Заголовок раздела «Включение детального логирования»'sending' => [ 'log_failures' => true, 'log_response_body' => true,],Проверка размера очередей
Заголовок раздела «Проверка размера очередей»use Illuminate\Support\Facades\Queue;
$highSize = Queue::size('telegram-high');$lowSize = Queue::size('telegram-low');
logger()->info('Queue sizes', [ 'high' => $highSize, 'low' => $lowSize,]);Рекомендации
Заголовок раздела «Рекомендации»-
Используйте queue режим в production для соблюдения лимитов
-
Настройте мониторинг размера очередей и ошибок 429
-
Используйте LOW приоритет для рассылок
-
Резервируйте достаточно слотов для HIGH приоритета (ответы на входящие)
-
Тестируйте лимиты перед production деплоем
Что дальше?
Заголовок раздела «Что дальше?»- Приоритеты и очереди — настройка очередей
- Режимы работы — настройка webhook и polling