Prioridades & Filas
O pacote suporta envio assíncrono de mensagens através de filas do Laravel com um sistema de prioridades, garantindo processamento rápido de respostas para atualizações recebidas.
Modos de Operação
Seção intitulada “Modos de Operação”Modo Sincronizado (padrão)
Seção intitulada “Modo Sincronizado (padrão)”No modo sincronizado, todas as requisições são enviadas sincronamente:
TELEGRAM_QUEUE_ENABLED=falseRequisições são executadas imediatamente, mas sem limite de taxa. Adequado para desenvolvimento e projetos pequenos.
Modo Fila
Seção intitulada “Modo Fila”No modo fila, requisições são colocadas em filas:
TELEGRAM_QUEUE_ENABLED=truePara executar filas, você precisa iniciar workers:
# Processar todas as filasphp artisan queue:work --queue=telegram-high,telegram-low
# Ou separadamente por prioridadephp artisan queue:work --queue=telegram-highphp artisan queue:work --queue=telegram-lowPrioridades
Seção intitulada “Prioridades”O pacote usa dois níveis de prioridade:
ALTA (padrão)
Seção intitulada “ALTA (padrão)”- Respostas para atualizações recebidas
- Mensagens críticas
- Todas as requisições têm essa prioridade por padrão
use HybridGram\\Telegram\\Priority;
// Especificação explícita (não obrigatória, esse é o padrão)$telegram->withPriority(Priority::HIGH) ->sendMessage($chatId, 'Resposta rápida');- Transmissões (broadcasts)
- Tarefas em background
- Mensagens não críticas
$telegram->withPriority(Priority::LOW) ->sendMessage($chatId, 'Transmissão');Configuração
Seção intitulada “Configuração”Em config/hybridgram.php:
'sending' => [ 'queue_enabled' => env('TELEGRAM_QUEUE_ENABLED', false),
// Limite de taxa por minuto por bot (padrão 1800 ≈ 30/seg) 'rate_limit_per_minute' => env('TELEGRAM_RATE_LIMIT_PER_MINUTE', 1800),
// Slots reservados para prioridade ALTA 'reserve_high_per_minute' => env('TELEGRAM_RESERVE_HIGH_PER_MINUTE', 300),
// Nomes das filas 'queues' => [ 'high' => env('TELEGRAM_QUEUE_HIGH', 'telegram-high'), 'low' => env('TELEGRAM_QUEUE_LOW', 'telegram-low'), ],],Reserva de Prioridade ALTA
Seção intitulada “Reserva de Prioridade ALTA”O parâmetro reserve_high_per_minute garante que um certo número de slots estejam sempre disponíveis para prioridade ALTA. A prioridade BAIXA não pode usar esses slots.
Exemplo:
rate_limit_per_minute = 1800reserve_high_per_minute = 300
Isso significa:
- Até 1800 requisições por minuto
- Pelo menos 300 slots sempre disponíveis para ALTA
- BAIXA pode usar até 1500 slots por minuto
Em Manipuladores de Rota
Seção intitulada “Em Manipuladores de Rota”Em manipuladores de rota, a prioridade ALTA é usada automaticamente:
TelegramRouter::onCommand('/start', function(CommandData $data) { $telegram = app(TelegramBotApi::class);
// Automaticamente prioridade ALTA $telegram->sendMessage($data->getChat()->id, 'Olá!');});Para Transmissões
Seção intitulada “Para Transmissões”Especifique explicitamente a prioridade BAIXA para transmissões:
// Transmitir para todos os usuários$users = User::all();
foreach ($users as $user) { $telegram->withPriority(Priority::LOW) ->sendMessage($user->telegram_id, 'Notícias!');}Uso Misto
Seção intitulada “Uso Misto”use HybridGram\\Core\\Routing\\RouteData\\TextMessageData;
TelegramRouter::onTextMessage(function(TextMessageData $data) { $telegram = app(TelegramBotApi::class);
// Resposta de alta prioridade $telegram->sendMessage( $data->getChat()->id, 'Sua mensagem foi recebida!' );
// Tarefa de baixa prioridade (ex: logging) $telegram->withPriority(Priority::LOW) ->sendMessage( config('telegram.admin_chat_id'), "Nova mensagem de {$data->getUser()->id}" );});Executando Workers
Seção intitulada “Executando Workers”Execução Básica
Seção intitulada “Execução Básica”php artisan queue:work --queue=telegram-high,telegram-lowCom Configurações
Seção intitulada “Com Configurações”php artisan queue:work \ --queue=telegram-high,telegram-low \ --tries=3 \ --timeout=60 \ --max-jobs=1000 \ --max-time=3600Usando Supervisor (recomendado)
Seção intitulada “Usando Supervisor (recomendado)”Crie a configuração /etc/supervisor/conf.d/telegram-worker.conf:
[program:telegram-worker]process_name=%(program_name)s_%(process_num)02dcommand=php /path/to/artisan queue:work --queue=telegram-high,telegram-low --sleep=3 --tries=3 --max-time=3600autostart=trueautorestart=truestopasgroup=truekillasgroup=trueuser=www-datanumprocs=2redirect_stderr=truestdout_logfile=/path/to/storage/logs/worker.logstopwaitsecs=3600Então:
sudo supervisorctl rereadsudo supervisorctl updatesudo supervisorctl start telegram-worker:*Limite de Taxa no Modo Fila
Seção intitulada “Limite de Taxa no Modo Fila”No modo fila, o limite de taxa é aplicado nos workers:
- Job entra na fila
- Worker retira job da fila
- Limite de taxa é verificado
- Se limite excedido, job é retornado à fila (
release()) - Worker não é bloqueado por
sleep(), pode processar outros jobs
Isso garante:
- Processamento não-bloqueante
- Uso eficiente de recursos
- Conformidade com limites do Telegram
Monitoramento de Filas
Seção intitulada “Monitoramento de Filas”Verificando Tamanho das Filas
Seção intitulada “Verificando Tamanho das Filas”use Illuminate\\Support\\Facades\\Queue;
$highQueueSize = Queue::size('telegram-high');$lowQueueSize = Queue::size('telegram-low');Monitoramento via Laravel Horizon
Seção intitulada “Monitoramento via Laravel Horizon”Se usando Laravel Horizon:
php artisan horizonA interface web mostrará as filas telegram-high e telegram-low.
Notas Importantes
Seção intitulada “Notas Importantes”-
InputFile com resource não é suportado no modo fila. Use caminhos de arquivo ou base64.
-
Métodos de serviço (getUpdates, setWebhook, getMe) sempre executam sincronamente.
-
Prioridade padrão: ALTA é automaticamente usada em manipuladores de rota.
-
Fallback: Se fila não estiver configurada, requisições executam sincronamente.
Próximos Passos
Seção intitulada “Próximos Passos”- Limite de Taxa — detalhes sobre limite de taxa
- Modos de Operação — configuração de webhook e polling