Correcao Sidebar Classico e Rail, Correcao Layout, Ajuste de Breakpoint para Tailwind, Ajuste AppTopbar, Ajuste Menu PopOver, Recriado Paleta de Cores, Inserido algumas animações leves, Reajuste Cor items NOVOS da tabela, Drawer Ajuda Corrigido no Logout, Whatsapp, sms, email, recursos extras

This commit is contained in:
Leonardo
2026-03-24 21:26:58 -03:00
parent a89d1f5560
commit 53a4980396
453 changed files with 121427 additions and 174407 deletions

243
docs/whatsapp.md Normal file
View File

@@ -0,0 +1,243 @@
# 📱 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