# 📱 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:

```powershell
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:

```powershell
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:
```json
{"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:

```powershell
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:

```sql
-- 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:

```sql
update notification_queue
set recipient_address = '5516999999999'  -- coloca o número real aqui
where status = 'pendente';
```

Se precisar reenviar um item que falhou:

```sql
update notification_queue
set status = 'pendente'
where id = 'cole-o-uuid-aqui';
```

---

## 📤 Passo 6 — Disparar a fila

Abre outro PowerShell e roda:

```powershell
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:**
```json
{"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:

```powershell
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:
```powershell
cd D:\leonohama\AgenciaPsi.com.br\Sistema\agenciapsi-primesakai
.\cron-local.ps1
```

---

## ✅ Passo 8 — Verificar logs

No Supabase Studio, roda:

```sql
-- 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:

```powershell
$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:

```sql
select cron.schedule(
  'populate-notification-queue',
  '*/5 * * * *',
  $$ select populate_notification_queue(); $$
);
```

4. Configurar o disparo da Edge Function via `pg_net` ou webhook externo
5. Migrar para API Oficial da Meta quando tiver volume de clientes
