meta-whatsapp-laravel maintained by advhub
advhub/meta-whatsapp-laravel
Pacote Laravel para integração com a WhatsApp Cloud API (Meta).
Recursos
- Envio de mensagem de texto
- Envio de imagem por link
- Envio de documento por link
- Envio de template
- Marcar mensagem como lida
- Verificação de webhook (
hub.challenge) - Validação opcional de assinatura (
X-Hub-Signature-256) - Extração de status (
sent,delivered,read, etc.)
Instalação (Composer)
composer require advhub/meta-whatsapp-laravel
Para desenvolvimento local (path repository):
{
"repositories": [
{
"type": "path",
"url": "packages/advhub/meta-whatsapp-laravel"
}
],
"require": {
"advhub/meta-whatsapp-laravel": "*"
}
}
Depois:
composer update advhub/meta-whatsapp-laravel
Publicar configuração
php artisan vendor:publish --tag=meta-whatsapp-config
Arquivo publicado: config/meta-whatsapp.php
Variáveis de ambiente
META_WA_BASE_URL=https://graph.facebook.com
META_WA_GRAPH_VERSION=v23.0
META_WA_PHONE_NUMBER_ID=
META_WA_ACCESS_TOKEN=
META_WA_VERIFY_TOKEN=
META_WA_APP_SECRET=
META_WA_DEFAULT_COUNTRY_CODE=55
META_WA_TIMEOUT=15
Uso
use AdvHub\MetaWhatsApp\MetaWhatsAppClient;
$meta = app(MetaWhatsAppClient::class);
$meta->sendText('11999999999', 'Olá!');
Facade
MetaWhatsApp::sendText('11999999999', 'Olá!');
Imagem
$meta->sendImage('11999999999', 'https://site.com/imagem.jpg', 'Legenda');
Documento
$meta->sendDocument('11999999999', 'https://site.com/arquivo.pdf', 'arquivo.pdf', 'Segue em anexo');
Template
$meta->sendTemplate(
'11999999999',
'notificacao_tarefa',
'pt_BR',
[
[
'type' => 'body',
'parameters' => [
['type' => 'text', 'text' => 'Ricardo'],
['type' => 'text', 'text' => '#123'],
],
],
]
);
Webhook (verify + assinatura)
use AdvHub\MetaWhatsApp\Support\WebhookVerifier;
use Illuminate\Http\Request;
public function verify(Request $request, WebhookVerifier $verifier)
{
$challenge = $verifier->verifyChallenge($request);
if ($challenge === null) {
return response()->json(['message' => 'Token inválido'], 403);
}
return response($challenge, 200);
}
public function handle(Request $request, WebhookVerifier $verifier)
{
if (!$verifier->hasValidSignature($request)) {
return response()->json(['message' => 'Assinatura inválida'], 401);
}
$statuses = $verifier->extractStatuses($request->all());
// atualizar dt_lido etc.
return response()->json(['ok' => true]);
}