Se você está desenvolvendo uma plataforma SaaS, um e-commerce ou um CRM em Laravel, integrar o WhatsApp ao backend deixou de ser diferencial. Em muitos fluxos, virou parte central da experiência do cliente.
Com a WhatsApp Cloud API hospedada pela própria Meta, a integração ficou mais direta, segura e escalável. Neste guia, vamos montar a fundação de uma integração profissional entre Laravel e Cloud API, cobrindo envio de mensagens, configuração de credenciais e recebimento de eventos via webhook.
Este guia foca na base técnica da integração: variáveis de ambiente, serviço de envio e webhook. Para produção, você ainda deve cuidar de filas, logs, retries, assinatura do webhook e observabilidade.
Pré-requisitos técnicos
Antes de abrir o terminal, confirme se a sua conta no Meta for Developers já tem os ativos necessários para usar a API oficial.
- Phone Number ID: identificador do número de teste ou produção que enviará as mensagens.
- WhatsApp Business Account ID: identificador da WABA vinculada à empresa.
- Token de acesso permanente: credencial gerada no Gerenciador de Negócios para autenticar chamadas à Graph API.
Também é recomendável ter uma aplicação Laravel já configurada com HTTPS no ambiente público, porque a Meta precisa acessar seu webhook para validação e envio de eventos.
Configure o ambiente no Laravel
O primeiro passo é mapear as credenciais no arquivo .env. Nunca coloque tokens diretamente no código, em controllers ou serviços versionados.
WHATSAPP_TOKEN=seu_token_permanente_aqui WHATSAPP_PHONE_NUMBER_ID=seu_phone_number_id WHATSAPP_VERSION=v20.0 WHATSAPP_VERIFY_TOKEN=um_token_customizado_para_webhook Em seguida, centralize o acesso no arquivo config/services.php. Assim, o restante da aplicação consome as credenciais pelo padrão do framework.
‘whatsapp’ => [ ‘token’ => env(‘WHATSAPP_TOKEN’), ‘phone_number_id’ => env(‘WHATSAPP_PHONE_NUMBER_ID’), ‘version’ => env(‘WHATSAPP_VERSION’, ‘v20.0’), ‘verify_token’ => env(‘WHATSAPP_VERIFY_TOKEN’), ], Depois de alterar variáveis de ambiente em produção, lembre-se de limpar ou reconstruir o cache de configuração do Laravel. Caso contrário, a aplicação pode continuar lendo valores antigos.
Crie um serviço de envio
O Laravel facilita o consumo de APIs externas com o componente Http. Uma boa prática é isolar a comunicação com a Meta em um serviço dedicado, em vez de espalhar chamadas HTTP por controllers.
namespace AppServices; use IlluminateSupportFacadesHttp; class WhatsAppService { protected string $baseUrl; protected string $token; public function __construct() { $this->token = config(‘services.whatsapp.token’); $this->baseUrl = ‘https://graph.facebook.com/’ . config(‘services.whatsapp.version’) . ‘/’ . config(‘services.whatsapp.phone_number_id’); } public function sendTemplateMessage( string $to, string $templateName, string $languageCode = ‘pt_BR’, array $components = [] ): array { $response = Http::withToken($this->token) ->post(“{$this->baseUrl}/messages”, [ ‘messaging_product’ => ‘whatsapp’, ‘to’ => $to, ‘type’ => ‘template’, ‘template’ => [ ‘name’ => $templateName, ‘language’ => [ ‘code’ => $languageCode, ], ‘components’ => $components, ], ]); return $response->json(); } }
Esse método envia mensagens de template, que são o formato recomendado para comunicações ativas fora da janela de atendimento. Para mensagens livres dentro da janela de 24 horas, a estrutura do payload muda, mas a base da autenticação e da URL é a mesma.
Configure o webhook
Para receber respostas de clientes e mudanças de status, sua aplicação precisa expor um webhook público. A Meta usa duas chamadas principais: uma requisição GET para validar o endpoint e requisições POST para entregar eventos.
Adicione as rotas em routes/api.php:
use AppHttpControllersWhatsAppWebhookController; use IlluminateSupportFacadesRoute; Route::get(‘/whatsapp/webhook’, [WhatsAppWebhookController::class, ‘verify’]); Route::post(‘/whatsapp/webhook’, [WhatsAppWebhookController::class, ‘handle’]); Agora crie o controller responsável por validar o handshake e receber os payloads.
namespace AppHttpControllers; use IlluminateHttpRequest; use IlluminateSupportFacadesLog; class WhatsAppWebhookController extends Controller { public function verify(Request $request) { $verifyToken = config(‘services.whatsapp.verify_token’); if ( $request->get(‘hub_mode’) === ‘subscribe’ && $request->get(‘hub_verify_token’) === $verifyToken ) { return response($request->get(‘hub_challenge’), 200); } return response(‘Forbidden’, 403); } public function handle(Request $request) { $payload = $request->all(); Log::info(‘WhatsApp Webhook recebido:’, $payload); return response(‘EVENT_RECEIVED’, 200); } } Em versões do Laravel que ainda usam o middleware VerifyCsrfToken para esse tipo de rota, adicione api/whatsapp/webhook à lista de exceções. A Meta precisa conseguir enviar o POST sem ser bloqueada por CSRF.
Boas práticas para produção
Uma integração que funciona em teste pode quebrar quando começa a receber volume real. Para evitar gargalos, trate a Cloud API como parte crítica da arquitetura.
- Use filas: não processe bot, CRM, banco de dados pesado ou integrações externas diretamente no método
handle(). Receba o payload, despache um job e responda200 OKrapidamente. - Valide a assinatura: implemente a verificação do cabeçalho
X-Hub-Signature-256usando o App Secret para confirmar que o webhook veio da Meta. - Registre falhas e retries: chamadas externas podem falhar. Armazene logs, trate timeouts e crie rotina para reprocessar eventos importantes.
- Separe ambientes: use números, tokens e webhooks diferentes para desenvolvimento, homologação e produção.
Responda o webhook da Meta o mais rápido possível e processe o restante em fila. Esse desenho reduz timeouts, evita reentregas desnecessárias e mantém a aplicação previsível sob carga.
Conclusão
Integrar a WhatsApp Cloud API ao Laravel dá liberdade para criar notificações transacionais, fluxos automatizados e experiências de atendimento conectadas ao seu produto. A base é simples: credenciais bem configuradas, um serviço de envio e um webhook confiável.
O desafio real aparece depois: construir painel multiatendente, filas, permissões, relatórios, templates, auditoria e observabilidade. Se sua empresa quer economizar meses de desenvolvimento nessa camada operacional, conheça a API e o painel integrado da Atys para conectar sua infraestrutura de atendimento com mais velocidade.
Comentários
0 comentários