Antes de começar
- PHP 8.2 ou mais novo e Laravel 10, 11 ou 12.
- O SDK instalado com
composer require ararahq/sdke uma chave de API emARARA_API_KEY. Veja SDK PHP. - Um template aprovado. Os exemplos usam
confirmacao_pedido. Veja Templates. - Uma URL
httpspública para o webhook. Em desenvolvimento, veja Testar localmente.
Registrar o SDK
Adicione a chave e o secret do webhook emconfig/services.php. Os valores vêm do .env (ARARA_API_KEY e ARARA_WEBHOOK_SECRET):
config/app.php, ou em bootstrap/providers.php no Laravel 11 ou mais novo. As demais opções do Config estão em SDK PHP.
Enviar de um controller
receiver aceita +5511999999999, whatsapp:+5511999999999 ou só os dígitos; a API valida o número. send devolve um array com id (ara_msg_...) e status inicial.
Enviar de um job em fila
Em produção, envie de um job. Osend do SDK sempre manda Idempotency-Key e reaproveita a mesma chave nas retentativas do SDK (em 5xx). Passe idempotencyKey: derivada do pedido para que uma nova tentativa do job também não duplique a mensagem:
202. Repetir a mesma Idempotency-Key devolve a mensagem original, sem novo envio. Em POST /v1/messages isso vale mesmo se o payload mudar (a API não compara destinatário nem variáveis), então nunca reaproveite a chave para outra mensagem.
Webhook
1
Guarde o secret
No painel, abra Webhooks, gere o secret e copie o valor para o
.env:2
Crie a rota
3
Crie o controller
O controller lê o corpo bruto, verifica a assinatura e registra o ID e o status de cada mensagem.Troque os
Log::info pela gravação no seu banco. $data['id'] é o mesmo ID devolvido no envio. $data['status'] vem em minúsculas: queued, sent, delivered, read, failed.4
Cadastre a URL
Na mesma tela do painel, informe
https://seu-dominio.com/api/webhooks/arara e dispare o evento de teste.2xx rápido. Quando a entrega falha, a Arara tenta de novo, então o controller precisa aguentar o mesmo evento mais de uma vez. Use o header X-Arara-Delivery-Id para deduplicar. Prazos e intervalos estão em Entrega.
Rotas em
routes/api.php já ficam fora da verificação de CSRF. Se registrar o webhook em routes/web.php, adicione o caminho ao VerifyCsrfToken@except (Laravel 10) ou a validateCsrfTokens(except: [...]) em bootstrap/app.php (Laravel 11 ou mais novo).Atualizar o admin em tempo real
Para mostrar o status no seu admin com Pusher ou Reverb, crie um evento de broadcast:handleStatus, depois do Log::info:
Próximos passos
Eventos
Corpo e campos de cada evento.
Webhooks
Retentativas, deduplicação e teste local.
SDK PHP
Métodos disponíveis e limitações da versão publicada.
Receitas
Carrinho abandonado, confirmação de pedido, suporte.