5.9 KiB
📱 Disparando WhatsApp Local — AgênciaPsi
Guia completo para rodar o sistema de lembretes por WhatsApp no ambiente local de desenvolvimento.
🧱 O que você precisa ter rodando
| Serviço | Como subir | Porta |
|---|---|---|
| Supabase local | npx supabase start |
54321 |
| Evolution API | Docker Desktop | 8080 |
🚀 Passo 1 — Subir o Supabase local
Abre o PowerShell na pasta do projeto e roda:
cd D:\leonohama\AgenciaPsi.com.br\Sistema\agenciapsi-primesakai
npx supabase start
Aguarda aparecer as URLs e credenciais. Confirma que está rodando acessando:
http://127.0.0.1:54323
🐳 Passo 2 — Subir a Evolution API
Abre o Docker Desktop e confirma que está com o status Engine running.
Abre outro PowerShell e roda:
cd D:\leonohama\AgenciaPsi.com.br\Sistema\agenciapsi-primesakai\evolution-api
docker compose up -d
Confirma que está rodando acessando:
http://localhost:8080
Deve retornar:
{"status":200,"message":"Welcome to the Evolution API, it is working!"}
📱 Passo 3 — Conectar o WhatsApp
Acessa o painel da Evolution API:
http://localhost:8080/manager
- Loga com a API key:
minha_chave_123 - Verifica se a instância
agenciapsi-testeestá com status Connected - Se estiver Disconnected, clica na instância → Get QR Code → escaneia com o celular
Para escanear no celular: WhatsApp → ⋮ (três pontinhos) → Aparelhos conectados → Conectar um aparelho
⚡ Passo 4 — Subir a Edge Function
Abre outro PowerShell e roda:
cd D:\leonohama\AgenciaPsi.com.br\Sistema\agenciapsi-primesakai
npx supabase functions serve process-notification-queue --no-verify-jwt
Aguarda aparecer:
- http://127.0.0.1:54321/functions/v1/process-notification-queue
🗄️ Passo 5 — Popular a fila manualmente
Acessa o Supabase Studio em http://127.0.0.1:54323, vai em SQL Editor e roda:
-- Popula a fila com sessões das próximas 48h
select populate_notification_queue();
-- Verifica o que foi gerado
select id, status, scheduled_at, channel, recipient_address, resolved_vars
from notification_queue
order by created_at desc
limit 10;
Se precisar corrigir o número do destinatário:
update notification_queue
set recipient_address = '5516999999999' -- coloca o número real aqui
where status = 'pendente';
Se precisar reenviar um item que falhou:
update notification_queue
set status = 'pendente'
where id = 'cole-o-uuid-aqui';
📤 Passo 6 — Disparar a fila
Abre outro PowerShell e roda:
Invoke-WebRequest `
-Uri "http://127.0.0.1:54321/functions/v1/process-notification-queue" `
-Method POST `
-Headers @{"Authorization"="Bearer sb_secret_N7UND0UgjKTVK-Uodkm0Hg_xSvEMPvz"} `
-TimeoutSec 30 `
| Select-Object -ExpandProperty Content
Resposta esperada:
{"processados":[{"id":"...","status":"enviado"}]}
🔄 Passo 7 — Simular o cron (disparo automático a cada 5 min)
Para simular o pg_cron localmente, cria um arquivo cron-local.ps1 na raiz do projeto:
while ($true) {
Write-Host "$(Get-Date) - Populando fila..."
Invoke-WebRequest `
-Uri "http://127.0.0.1:54321/functions/v1/process-notification-queue" `
-Method POST `
-Headers @{"Authorization"="Bearer sb_secret_N7UND0UgjKTVK-Uodkm0Hg_xSvEMPvz"} `
-TimeoutSec 30 `
| Select-Object -ExpandProperty Content
Write-Host "$(Get-Date) - Aguardando 5 minutos..."
Start-Sleep -Seconds 300
}
Roda com:
cd D:\leonohama\AgenciaPsi.com.br\Sistema\agenciapsi-primesakai
.\cron-local.ps1
✅ Passo 8 — Verificar logs
No Supabase Studio, roda:
-- Ver histórico de envios
select id, status, channel, recipient_address, sent_at, failure_reason
from notification_logs
order by created_at desc
limit 10;
-- Ver status da fila
select status, count(*)
from notification_queue
group by status;
🧪 Teste rápido de envio direto (sem fila)
Para testar se o WhatsApp está funcionando sem passar pela fila:
$body = '{"number":"5516999999999","text":"Teste direto AgênciaPsi!"}'
$headers = @{"apikey"="minha_chave_123"; "Content-Type"="application/json"}
Invoke-WebRequest `
-Uri "http://localhost:8080/message/sendText/agenciapsi-teste" `
-Method POST `
-Headers $headers `
-Body $body `
-TimeoutSec 30 `
| Select-Object -ExpandProperty Content
⚠️ Problemas comuns
| Problema | Causa | Solução |
|---|---|---|
Function not found |
Terminal na pasta errada | cd para a raiz do projeto antes de rodar o functions serve |
{"count":0} no QR Code |
Bug da versão | Usar imagem evoapicloud/evolution-api:latest |
Nenhum item na fila |
Item já processado ou com status diferente | Resetar com update notification_queue set status = 'pendente' |
| Timeout no envio | Redis não está rodando | Verificar se o container evolution-redis está up no Docker |
undefined/message/sendText/undefined |
Campos errados nas credenciais | Verificar se credentials tem api_url e instance_name |
📋 Resumo das credenciais locais
Supabase URL: http://127.0.0.1:54321
Supabase Studio: http://127.0.0.1:54323
Supabase Secret Key: sb_secret_N7UND0UgjKTVK-Uodkm0Hg_xSvEMPvz
Evolution API URL: http://localhost:8080
Evolution API Key: minha_chave_123
Instância WhatsApp: agenciapsi-teste
🚀 Quando for para produção
- Subir a Evolution API em um VPS (Hostinger, Contabo ~R$30/mês)
- Atualizar
api_urlemnotification_channelspara a URL do VPS - Configurar o
pg_cronno Supabase cloud:
select cron.schedule(
'populate-notification-queue',
'*/5 * * * *',
$$ select populate_notification_queue(); $$
);
- Configurar o disparo da Edge Function via
pg_netou webhook externo - Migrar para API Oficial da Meta quando tiver volume de clientes