feat: KPIs con totales absolutos, backfill ads y ventas en cruce canal
Comparativas WoW/MoM/YoY muestran prev/Δ además del %; sync ads admite histórico desde 2025; tabla ads↔CRM añade cierres, ventas y ROAS. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -47,6 +47,28 @@ Nunca pegar keys en PDFs ni `.env.example`.
|
||||
- `ANTHROPIC_API_KEY` en Dokploy env si se quiere el asistente LLM
|
||||
- OAuth live Meta; Google Ads via env; **GA4/GSC** vía OAuth marketing@ (reconectar Google en Agencia + sync orgánico)
|
||||
- IP allowlist Traefik: mantener IPs oficina actuales en `middleware-hardening.yml`
|
||||
- **`CLIENTIFY_WEBHOOK_SECRET` obligatorio** — sin él el webhook responde 503
|
||||
- **Cron diario (obligatorio en prod)** — ver sección Cron
|
||||
|
||||
## Cron diario (datos siempre frescos para vistas cliente)
|
||||
|
||||
En Dokploy → Environment del `client-portal`:
|
||||
|
||||
1. Define `CRON_SECRET` (string largo aleatorio).
|
||||
2. Schedule diario ~06:00 UTC:
|
||||
|
||||
```bash
|
||||
curl -sS -H "Authorization: Bearer $CRON_SECRET" \
|
||||
"https://app.4ventures.es/api/cron/daily-sync?days=7"
|
||||
```
|
||||
|
||||
Endpoints individuales (mismo secret):
|
||||
|
||||
- `/api/cron/organic-sync` — GA4 + GSC → `organic_daily`
|
||||
- `/api/cron/ads-sync` — Meta + Google Ads → `ad_daily` (API v22)
|
||||
- `/api/cron/superhuman-sync` — Seguimiento / Google Docs
|
||||
|
||||
`last_sync_at` solo se actualiza tras escribir filas reales (no al emparejar).
|
||||
|
||||
## Verificación
|
||||
|
||||
@@ -54,3 +76,4 @@ Nunca pegar keys en PDFs ni `.env.example`.
|
||||
- Rol `client` → redirigido fuera de agencia
|
||||
- Chat/simulate solo con sesión
|
||||
- Health: `serviceRoleConfigured: true`
|
||||
- Tras cron: Orgánico / Ads / Seguimiento con `last_sync_at` de hoy en ficha
|
||||
|
||||
Reference in New Issue
Block a user