Files
App-Estoque-LiberiKids/SISTEMA-ALERTAS-AUTOMATICOS.md
2025-11-29 21:31:52 -03:00

9.2 KiB

🔔 Sistema de Alertas Automáticos de Vencimento

📋 Problema Identificado

Situação:

  • Venda realizada em 20/10/2025
  • Primeira parcela com vencimento em 24/10/2025
  • Alertas NÃO foram enviados:
    • 3 dias antes (21/10) - Não recebido
    • No dia do vencimento (24/10) - Não recebido com PIX

Causa: O sistema de alertas automáticos não estava configurado para rodar diariamente às 09:00.


Solução Implementada

Criamos um sistema completo de alertas automáticos com:

  1. Script Node.js que verifica parcelas e envia alertas
  2. Cron Job configurado para executar às 09:00 (Brasília)
  3. Geração automática de PIX no dia do vencimento
  4. Logs de todas as execuções

🚀 Como Instalar

Passo 1: Instalar o Cron Job

cd /home/tiago/Downloads/app_estoque_v1.0.0
chmod +x scripts/instalar-cron-alertas.sh
./scripts/instalar-cron-alertas.sh

O script irá:

  • Configurar execução diária às 09:00 (horário de Brasília)
  • Criar diretório de logs
  • Perguntar se quer fazer um teste imediato
  • Mostrar configuração final

Passo 2: Configurar Variáveis de Ambiente

Crie/edite o arquivo .env na raiz do projeto:

# Supabase
SUPABASE_URL=https://ydhzylfnpqlxnzfcclla.supabase.co
SUPABASE_SERVICE_KEY=seu_service_key_aqui
# ou
SUPABASE_ANON_KEY=seu_anon_key_aqui

# Evolution API (configurar no painel admin)
# Mercado Pago (configurar no painel admin)

Passo 3: Configurar no Painel Admin

Acesse o painel admin → Configurações e configure:

Evolution API:

  • URL da API
  • Nome da instância
  • API Key

Mercado Pago:

  • Access Token (para geração de PIX)

Alertas WhatsApp:

  • Primeiro alerta: 3 dias antes ATIVO
  • Segundo alerta: No dia (0 dias) ATIVO
  • Alerta após vencimento: 3 dias após ATIVO
  • Mensagens personalizadas para cada tipo

🕐 Como Funciona

Execução Automática

Horário: Todos os dias às 09:00 (horário de Brasília)

O que o script faz:

  1. Busca configurações do banco de dados
  2. Lista todas as parcelas pendentes
  3. Calcula dias para vencimento de cada parcela
  4. Verifica se deve enviar alerta:
    • Primeiro alerta: 3 dias antes?
    • Segundo alerta: No dia? + Gera PIX
    • Alerta pós-vencimento: 3 dias após?
  5. Substitui variáveis na mensagem:
    • {cliente} → Nome do cliente
    • {valor} → R$ 150,00
    • {quando} → "em 3 dias" ou "hoje" ou "há 3 dias"
    • {parcela} → "1/3"
  6. Envia via WhatsApp usando Evolution API
  7. Registra no histórico de mensagens
  8. Gera log completo da execução

📱 Tipos de Alertas

1. Primeiro Alerta (3 dias antes)

Quando: 21/10 às 09:00 para vencimento em 24/10

Mensagem padrão:

Olá João! 👋

Lembramos que você tem uma parcela no valor de R$ 150,00 com vencimento em 3 dias (24/10/2025).

Agradecemos a atenção!

2. Segundo Alerta (No dia do vencimento)

Quando: 24/10 às 09:00

Mensagem padrão:

Olá João! 👋

Sua parcela de R$ 150,00 vence hoje.

📱 PIX Copia e Cola:
```00020126580014br.gov.bcb.pix...```

Agradecemos!

Ação extra: Gera PIX automaticamente via Mercado Pago

3. Alerta Após Vencimento (3 dias após)

Quando: 27/10 às 09:00 para vencimento em 24/10

Mensagem padrão:

Olá João! 👋

Identificamos que a parcela 1/3 no valor de R$ 150,00 venceu há 3 dias (24/10/2025).

Por favor, regularize o pagamento.

📊 Monitoramento

Ver Logs em Tempo Real

tail -f /home/tiago/Downloads/app_estoque_v1.0.0/logs/alertas-cron.log

Exemplo de Log

🕐 Iniciando envio de alertas de vencimento...
⏰ Horário: 24/10/2025, 09:00:15

📋 Configurações carregadas:
   - Primeiro alerta: 3 dias antes (ATIVO)
   - Segundo alerta: 0 dias antes (ATIVO)
   - Alerta pós-vencimento: 3 dias após (ATIVO)

📦 15 parcela(s) pendente(s) encontrada(s)

📤 Enviando segundo_alerta para João Silva (5543999762754)...
🔄 Gerando PIX para parcela 1...
   ✅ Enviado com sucesso!

📤 Enviando primeiro_alerta para Maria Santos (5543988776655)...
   ✅ Enviado com sucesso!

==================================================
📊 RESUMO DO ENVIO
==================================================
✅ Alertas enviados: 8
❌ Erros: 0
📦 Total de parcelas verificadas: 15
==================================================

✅ Script finalizado com sucesso!

🧪 Teste Manual

Para testar o sistema sem esperar às 09:00:

cd /home/tiago/Downloads/app_estoque_v1.0.0
node scripts/enviar-alertas-parcelas.js

Isso executará imediatamente e mostrará:

  • Quais alertas seriam enviados
  • Para quais clientes
  • Resultado de cada envio

🔍 Verificar Cron Instalado

crontab -l

Deve mostrar algo como:

0 12 * * * TZ='America/Sao_Paulo' /usr/bin/node /home/tiago/Downloads/app_estoque_v1.0.0/scripts/enviar-alertas-parcelas.js >> /home/tiago/Downloads/app_estoque_v1.0.0/logs/alertas-cron.log 2>&1

Nota: 0 12 em UTC = 09:00 em Brasília (UTC-3)


🛠️ Troubleshooting

Problema: Alertas não são enviados

Verificar:

  1. Cron está instalado?

    crontab -l | grep enviar-alertas-parcelas
    
  2. Script tem permissão de execução?

    ls -l scripts/enviar-alertas-parcelas.js
    chmod +x scripts/enviar-alertas-parcelas.js
    
  3. Configurações estão corretas no admin?

    • Evolution API configurada
    • Mercado Pago configurado
    • Alertas ATIVOS (toggles verdes)
  4. Clientes têm WhatsApp cadastrado?

    SELECT nome_completo, whatsapp 
    FROM clientes 
    WHERE whatsapp IS NULL OR whatsapp = '';
    
  5. Parcelas estão com status "pendente"?

    SELECT * FROM venda_parcelas 
    WHERE status = 'pendente' 
    ORDER BY data_vencimento;
    
  6. Ver logs de erro:

    tail -100 logs/alertas-cron.log
    

Problema: PIX não é gerado

Verificar:

  1. Mercado Pago Access Token configurado?

    • Painel Admin → Configurações → Mercado Pago
  2. Token válido?

    • Tokens expiram, gere um novo se necessário
  3. Testar geração manual:

    • Sistema de Vendas → Parcelas → Botão "PIX"

Problema: Mensagens não chegam

Verificar:

  1. Evolution API está online?

    • Teste acessando a URL configurada
  2. Instância está conectada?

    • Verifique no painel da Evolution API
  3. WhatsApp do cliente correto?

    • Formato: apenas números (5543999762754)
    • Com DDD e código do país
  4. Testar envio manual:

    • Sistema de Vendas → Chat WhatsApp

📅 Cronograma de Alertas

Exemplo: Venda em 20/10, vencimento 24/10

Data Hora Tipo de Alerta Dias Ação
21/10 09:00 Primeiro Alerta -3 dias Lembrete
24/10 09:00 Segundo Alerta 0 dia (hoje) Lembrete + PIX
27/10 09:00 Pós-Vencimento +3 dias Cobrança

🔄 Desinstalar Cron

Se precisar remover o cron:

crontab -e

Remova a linha que contém enviar-alertas-parcelas.js e salve.

Ou automaticamente:

crontab -l | grep -v 'enviar-alertas-parcelas' | crontab -

📝 Personalizar Mensagens

No painel admin → Configurações → Alertas WhatsApp

Variáveis disponíveis:

  • {cliente} - Primeiro nome do cliente
  • {valor} - Valor formatado (R$ 150,00)
  • {quando} - "em 3 dias", "hoje", "há 3 dias"
  • {parcela} - "1/3", "2/5", etc.

Exemplo de mensagem personalizada:

Oi {cliente}! 😊

Sua parcela {parcela} de {valor} vence {quando}.

Qualquer dúvida, estamos aqui!

*Liberi Kids* 👗👕

🎯 Caso de Uso: Venda 20/10

Configuração:

  • Primeiro alerta: 3 dias antes
  • Segundo alerta: No dia
  • Pós-vencimento: 3 dias após

Timeline:

Dia Evento
20/10 Venda realizada, parcela 1 vence 24/10
21/10 09:00 🔔 Primeiro alerta enviado: "vence em 3 dias"
24/10 09:00 🔔 Segundo alerta + PIX: "vence hoje" + QR Code
27/10 09:00 🔔 Alerta pós-venc: "venceu há 3 dias"

Checklist de Verificação

Antes de considerar o sistema funcionando, verifique:

  • Cron instalado e ativo (crontab -l)
  • Horário correto (09:00 Brasília = 12:00 UTC)
  • Evolution API configurada no admin
  • Mercado Pago configurado no admin
  • Alertas ATIVOS (toggles verdes)
  • Mensagens personalizadas configuradas
  • Teste manual executado com sucesso
  • Logs sendo gerados em /logs/alertas-cron.log
  • Clientes com WhatsApp cadastrado
  • Parcelas com status "pendente"

📞 Suporte

Logs importantes:

# Logs do cron
tail -f logs/alertas-cron.log

# Logs do servidor
tail -f logs/server.log

# Histórico de mensagens (SQL)
SELECT * FROM mensagens_whatsapp 
ORDER BY created_at DESC 
LIMIT 50;

# Parcelas pendentes
SELECT vp.*, v.id_venda, c.nome_completo, c.whatsapp
FROM venda_parcelas vp
JOIN vendas v ON vp.venda_id = v.id
JOIN clientes c ON v.cliente_id = c.id
WHERE vp.status = 'pendente'
ORDER BY vp.data_vencimento;

Desenvolvido para: Liberi Kids - Moda Infantil 👗👕
Data: 24 de outubro de 2025
Versão: 1.0
Status: Pronto para Produção