Módulo 8: Proyecto — Sistema de Alertas Programadas
Diseño del Sistema
Descripción de la cápsula
Antes de implementar, diseñamos en papel. La complejidad de este proyecto justifica planificación cuidadosa. En esta cápsula vas a ver el diseño completo: qué métricas monitorea, cómo categoriza, los flujos de notificación, y la arquitectura de workflows.
Lo que monitorea el sistema
Métricas (3 fuentes)
-
Ventas (Sheet "daily_sales"):
- Métrica: ventas del día actual
- Umbral: <50% del promedio histórico → alerta media; <20% → crítica
-
Errores en API (mock — Sheet "api_errors"):
- Métrica: errores en última hora
- Umbral: >10/hora → alerta media; >50/hora → crítica
-
Tiempo de respuesta API (mock — Sheet "api_latency"):
- Métrica: P95 latencia última hora
- Umbral: >500ms → alerta media; >2000ms → crítica
Niveles de alerta
| Severidad | Acción | Canales | Escalación |
|---|---|---|---|
| Crítica | Alert inmediato + ack required | Slack #alerts-critical + Email + (opcional SMS) | 15 min sin ack → manager |
| Alta | Alert inmediato | Slack #alerts | 30 min sin ack → escalar |
| Media | Slack silencioso | Slack #monitoring | No escalación |
| Baja | Solo Sheet log | Sheet | No notificación |
Diseño general del workflow
[Schedule cada 15 min]
│
[Verificar business hours + no holiday]
│
[IF: dentro de horario operativo]
├─ NO → terminar (no spamear fuera de hora)
└─ SI → continuar
│
[3 ramas paralelas: leer cada fuente]
├─→ Sheet ventas
├─→ Sheet errors
└─→ Sheet latency
│
▼
[Merge Wait]
│
[Set: calcular categorías para cada métrica]
│
[SplitInBatches: procesar cada métrica]
│
[Switch sobre severidad]
├─→ critical → notificar + iniciar timer ack
├─→ high → Slack
├─→ medium → Slack silencioso
└─→ low → solo log
│
loop back
│
[Done]
│
[Sheet log: 'alerts_history']
Workflow secundario: ack manager
[Webhook ack]
│
[Set: marcar alert como acknowledged]
│
[Sheet update]
Workflow terciario: escalación
[Schedule cada 5 min]
│
[Sheet read: alerts críticas sin ack > 15 min]
│
[Slack a manager]
│
[Sheet update: escalada]
Arquitectura: ¿1 workflow o varios?
Decisión: 3 workflows según responsabilidad:
[ALERTS-MAIN]Detección y notificación: corre cada 15 min[ALERTS-ACK]Acknowledgement: webhook que recibe ack[ALERTS-ESCALATE]Escalación: corre cada 5 min
Razón: cada uno tiene Schedule/trigger distinto y lógica distinta. Separar mejora mantenibilidad.
Datos persistentes (Sheets)
Sheets que vamos a usar:
| Sheet | Propósito |
|---|---|
daily_sales | Datos de ventas (input) |
api_errors | Errores recientes API (input) |
api_latency | Latencias recientes (input) |
thresholds | Configuración: umbrales por métrica |
alerts_history | Log de todas las alertas generadas |
alerts_pending_ack | Alertas críticas esperando ack |
holidays | Holidays para no alertar |
Decisiones de diseño clave
Decisión 1: ¿Por qué 15 min y no más frecuente?
- Métricas no cambian dramáticamente cada minuto
- Cada ciclo consume ejecuciones del plan n8n
- 15 min es buen balance velocidad/costo
Decisión 2: ¿Por qué multi-source paralelo?
- 3 Sheets son independientes
- Paralelo es 3× más rápido
- Permite que falle una sin afectar las otras (con Continue on Fail)
Decisión 3: ¿Por qué escalación con HITL pattern?
- Alertas críticas requieren acción humana
- Sin ack en 15 min = probablemente nadie miró
- Escalación a manager garantiza atención
Decisión 4: ¿Por qué 3 workflows separados?
- Single responsibility principle
- Diferentes Schedules/triggers
- Más fácil debuggear / cambiar uno sin afectar otros
Lo que se aplica de cada módulo
| Módulo G2 | Aplicación específica |
|---|---|
| M01 Triggers | Schedule (cron 15 min) + Webhook (ack) |
| M02 Branching | Switch sobre severidad con 4 ramas |
| M03 Loops | SplitInBatches sobre métricas |
| M04 Merge | Wait mode juntando 3 fuentes |
| M05 Scheduling | Business hours + no holidays |
| M06 Error handling | Retry, Continue on Fail, Error Workflow |
| M07 Wait | HITL pattern para escalación |
Siguiente paso
Implementamos paso a paso en las cápsulas 03-07. Cápsula 08 será test, deploy y monitoring.
Antes de pasar:
- Diseño claro mental
- Sheets de input creados con data mock
- Credenciales listas (Google, Slack)
Creado: Mayo 11, 2026 Versión: 1.0