advhub / meta-whatsapp-laravel
Laravel package for WhatsApp Cloud API (Meta) integration.
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/advhub/meta-whatsapp-laravel
Requires
- php: >=7.3
- illuminate/http: ^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0
README
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]); }