Webhook
Webhook é um modo onde o Telegram envia atualizações para seu servidor via requisições HTTP. Este é o método recomendado para ambientes de produção.
Vantagens
Seção intitulada “Vantagens”- ✅ Entrega instantânea de atualizações
- ✅ Uso eficiente de recursos
- ✅ Adequado para produção
- ✅ Suporte para múltiplos bots
Configuração
Seção intitulada “Configuração”1. Configuração em config/hybridgram.php
Seção intitulada “1. Configuração em config/hybridgram.php”'bots' => [ [ 'token' => env('BOT_TOKEN'), 'bot_id' => 'main', 'update_mode' => UpdateModeEnum::WEBHOOK, 'webhook_url' => env('TELEGRAM_WEBHOOK_URL'), 'secret_token' => env('TELEGRAM_SECRET_TOKEN'), // Recomendado 'routes_file' => base_path('routes/telegram.php'), ],],2. Variáveis de Ambiente
Seção intitulada “2. Variáveis de Ambiente”BOT_TOKEN=seu_tokenBOT_ID=mainTELEGRAM_UPDATE_MODE=WEBHOOKTELEGRAM_WEBHOOK_URL=https://seu-dominio.com/telegram/bot/webhook/mainTELEGRAM_SECRET_TOKEN=seu_token_secreto3. Configurando o Webhook
Seção intitulada “3. Configurando o Webhook”Via Comando Artisan
Seção intitulada “Via Comando Artisan”php artisan hybridgram:set-webhook mainOu com parâmetros adicionais:
php artisan hybridgram:set-webhook main \ --url=https://seu-dominio.com/telegram/bot/webhook/main \ --secret-token=seu_token_secreto \ --drop-pendingVia Código
Seção intitulada “Via Código”use HybridGram\\Telegram\\TelegramBotApi;
$telegram = app(TelegramBotApi::class, ['botId' => 'main']);$telegram->setWebhook( url: 'https://seu-dominio.com/telegram/bot/webhook/main', secretToken: 'seu_token_secreto');4. Rota do Webhook
Seção intitulada “4. Rota do Webhook”O pacote registra uma rota automaticamente, mas você pode configurar a sua própria:
// routes/web.php ou routes/api.phpRoute::post('/telegram/bot/webhook/{botId}', [\\HybridGram\\Http\\Controllers\\WebhookController::class, 'handle'])->name('telegram.bot.webhook');O parâmetro {botId} da URL é resolvido automaticamente para um objeto BotConfig. O método handle recebe a configuração do bot já resolvida, não uma string:
use HybridGram\\Core\\Config\\BotConfig;use HybridGram\\Http\\Controllers\\WebhookController;
// Assinatura do método handle — segundo argumento é BotConfig, não stringpublic function handle(\\Illuminate\\Http\\Request $request, BotConfig $botConfig): \\Illuminate\\Http\\Response{ // $botConfig — objeto com token, bot_id, routes_file e outras configurações do bot // ...}Segurança
Seção intitulada “Segurança”Token Secreto
Seção intitulada “Token Secreto”Usar um token secreto para verificar a autenticidade das requisições é recomendado:
-
Gere um token aleatório:
Terminal window php artisan tinker>>> Str::random(32) -
Configure em
.env:TELEGRAM_SECRET_TOKEN=seu_token_gerado -
Use ao configurar o webhook:
Terminal window php artisan hybridgram:set-webhook main --secret-token=seu_token_gerado
O pacote verifica automaticamente o token secreto no cabeçalho X-Telegram-Bot-Api-Secret-Token.
O Telegram requer HTTPS para webhooks. Use:
- Certificado SSL (Let’s Encrypt, Cloudflare, etc.)
- Certificado local para desenvolvimento (não recomendado para produção)
Certificado SSL
Seção intitulada “Certificado SSL”Se você possui um certificado auto-assinado:
php artisan hybridgram:set-webhook main \ --certificate=/path/to/certificate.pemOu na configuração:
'certificate_path' => env('TELEGRAM_CERTIFICATE_PATH'),Verificação do Webhook
Seção intitulada “Verificação do Webhook”Obter Informações do Webhook
Seção intitulada “Obter Informações do Webhook”php artisan hybridgram:get-webhook-info mainOu via código:
$telegram = app(TelegramBotApi::class, ['botId' => 'main']);$info = $telegram->getWebhookInfo();Deletar Webhook
Seção intitulada “Deletar Webhook”php artisan hybridgram:delete-webhook mainAtualizações Permitidas
Seção intitulada “Atualizações Permitidas”Você pode limitar os tipos de atualizações que o bot recebe:
'allowed_updates' => ['message', 'callback_query', 'inline_query'],Ou em .env:
ALLOWED_TELEGRAM_UPDATES=message,callback_queryRemovendo Atualizações Pendentes
Seção intitulada “Removendo Atualizações Pendentes”Ao configurar o webhook, você pode remover todas as atualizações pendentes:
php artisan hybridgram:set-webhook main --drop-pendingOu na configuração:
'webhook_drop_pending_updates' => true,Go Handler tgook (opcional)
Seção intitulada “Go Handler tgook (opcional)”O pacote suporta um proxy Go separado tgook para máximo desempenho e processamento assíncrono de atualizações.
'webhook_port' => env('TELEGRAM_WEBHOOK_PORT', 9070),Neste modo, o Telegram envia requisições para o serviço Go, que coloca as atualizações em uma fila Redis, e os workers do Laravel as processam em segundo plano.
Arquitetura detalhada e instruções de configuração — na seção “Go proxy tgook” (/pt/advanced/go-proxy-tgook/).
Depuração
Seção intitulada “Depuração”Logging
Seção intitulada “Logging”Ative o logging em config/logging.php:
'channels' => [ 'telegram' => [ 'driver' => 'single', 'path' => storage_path('logs/telegram.log'), ],],Inspeção de Requisições
Seção intitulada “Inspeção de Requisições”Todas as atualizações recebidas são registradas na tabela telegram_updates (se a migração foi executada).
Problemas Comuns
Seção intitulada “Problemas Comuns”429 Too Many Requests
Seção intitulada “429 Too Many Requests”Se você receber o erro 429:
- Verifique as configurações de rate limiting
- Certifique-se de que está usando modo de fila
- Verifique se há requisições duplicadas
Webhook Não Funciona
Seção intitulada “Webhook Não Funciona”- Verifique se HTTPS está configurado
- Certifique-se de que a URL está acessível externamente
- Verifique o token secreto
- Verifique os logs do servidor
Atraso de Atualizações
Seção intitulada “Atraso de Atualizações”- Verifique as configurações do webhook via
get-webhook-info - Certifique-se de que o servidor não está sobrecarregado
- Verifique o tamanho da fila
Recomendações para Produção
Seção intitulada “Recomendações para Produção”- ✅ Use HTTPS com certificado válido
- ✅ Configure o token secreto
- ✅ Use modo de fila para envio
- ✅ Configure monitoramento e alertas
- ✅ Verifique regularmente o status do webhook
- ✅ Limite
allowed_updatesapenas para os tipos necessários
Próximos Passos
Seção intitulada “Próximos Passos”- Polling — modo alternativo para receber atualizações
- Enviando Mensagens — trabalhando com TelegramBotApi