Files
agenciapsilmno/docs/whatsapp.md

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-teste está 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

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

  1. Subir a Evolution API em um VPS (Hostinger, Contabo ~R$30/mês)
  2. Atualizar api_url em notification_channels para a URL do VPS
  3. Configurar o pg_cron no Supabase cloud:
select cron.schedule(
  'populate-notification-queue',
  '*/5 * * * *',
  $$ select populate_notification_queue(); $$
);
  1. Configurar o disparo da Edge Function via pg_net ou webhook externo
  2. Migrar para API Oficial da Meta quando tiver volume de clientes