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