Cron Jobs, Dashboard & Health
Todas as rotas cron usam autenticação via Authorization: Bearer {CRON_SECRET} e tem dynamic = "force-dynamic".
GET /api/cron/automations
Seção intitulada “GET /api/cron/automations”Descrição: Executa automações agendadas (trigger_type = “schedule”) que atingiram seu intervalo de execução. Auth: Cron-only (Bearer CRON_SECRET)
Response:
- 200:
{ data: { executed: number, total: number } } - 401:
{ error: "Unauthorized" }
Notas:
- Busca automações com
trigger_type = "schedule",is_active = true,deleted_at IS NULL. - Para cada automação, verifica intervalo (
schedule_intervalem minutos, default 60) e ausencia de execução “running”. - Atualiza
trigger_config.last_run_atantes de executar (previne dupla execução). - Execução fire-and-forget.
GET /api/cron/segments
Seção intitulada “GET /api/cron/segments”Descrição: Recalcula membros de todos os segmentos dinâmicos. Dispara triggers segment_entered e segment_exited.
Auth: Cron-only (Bearer CRON_SECRET)
Max Duration: 300 segundos (5 minutos)
Response:
- 200:
{ data: { processed, errors, total, results: [{ segment_id, name, added, removed, total }] } }
Notas:
- Busca segmentos com
is_dynamic = true, ordenados porlast_calculated_atASC. - Usa RPC
evaluate_segment_memberspara cada segmento. - Compara membros para detectar entradas e saídas.
GET /api/cron/rfm-scores
Seção intitulada “GET /api/cron/rfm-scores”Descrição: Recalcula scores RFM para todas as contas com pedidos pagos vinculados a contatos. Auth: Cron-only (Bearer CRON_SECRET)
Response:
- 200:
{ data: { processed, errors, total } }
GET /api/cron/token-refresh
Seção intitulada “GET /api/cron/token-refresh”Descrição: Renova tokens de acesso WhatsApp que expiram nos proximos 7 dias via fb_exchange_token.
Auth: Cron-only (Bearer CRON_SECRET)
Response:
- 200:
{ refreshed, failed, total, results: [{ id, success, error? }] }
Notas: Em caso de falha, cria notificação de warning pedindo ao cliente para reconectar o WhatsApp.
GET /api/cron/billing-suspension
Seção intitulada “GET /api/cron/billing-suspension”Descrição: Suspende contas com assinatura “past_due” há mais de 3 dias. Auth: Cron-only (Bearer CRON_SECRET)
Response:
- 200:
{ data: { suspended, total } }
Notas: Atualiza billing_subscriptions.status e accounts.status para “suspended”. Cria notificação de erro.
GET /api/cron/ecommerce-webhooks
Seção intitulada “GET /api/cron/ecommerce-webhooks”Descrição: Verifica e garante qué webhooks Yampi estão ativos para todas as integrações. Auth: Cron-only (Bearer CRON_SECRET)
Response:
- 200:
{ ok: true, checked, results: [{ store, action }] }
Notas: Suporta autenticação OAuth e legacy. Eventos monitorados: order.created, order.paid, order.status.updated, cart.reminder, transaction.payment.refused, customer.created.
GET /api/dashboard/stats
Seção intitulada “GET /api/dashboard/stats”Descrição: Retorna estatísticas completas do dashboard: KPIs principais, variação semanal, mensagens por dia, conversas por status, campanhas recentes e conversas recentes. Auth: Required
Response:
- 200:
{ "kpi": { "contacts": 1500, "messagesSent": 3200, "templates": 15, "activeAutomations": 8, "contactsChange": 12, "messagesChange": -5, "recoveredRevenue": 15000.00, "ordersThisMonth": 42 }, "messagesByDay": [{ "date": "seg., 17", "sent": 50, "received": 30 }], "conversationsByStatus": [{ "status": "open", "count": 25 }], "recentCampaigns": ["..."], "recentConversations": ["..."]}Notas: 18 queries paralelas via Promise.all. Variação semanal compara esta semana vs semana passada.
GET /api/health
Seção intitulada “GET /api/health”Descrição: Health check do sistema. Verifica conectividade com o banco de dados. Auth: Public
Response:
- 200:
{ "status": "ok | degraded", "timestamp": "2026-02-20T12:00:00.000Z", "uptime": 86400.123, "latency": 45, "services": { "database": "ok | error" }}