← Volver al catálogo

🔔 Recordatorios Smart (Secretario)

Archivo: /Users/user/rifai-agents/agentes/migrated/recordatorios-smart.ts · Plist: com.rifai.recordatorios-smart · Horario: cada 15 min (StartInterval 900 s); el propio script salta los domingos.

Qué hace

Es el motor de recordatorios temporizados del Secretario (Sec). Cada 15 minutos lee la base Notion "Tasks Tracker" buscando tareas con vencimiento hoy o mañana que no estén en estado Done. Según la antelación, manda avisos escalonados: la noche de antes (24h), por la mañana a las 9 y 14 para tareas sin hora, y 2h / 30min / 15min antes para citas con hora concreta. Cada aviso se envía una sola vez gracias a un fichero anti-repetición. Los recordatorios salen por el router hacia CEOSEC (Sec).

Cómo funciona

1. Parsea .env y fija la zona horaria a Europe/Madrid; si es domingo (dow === 0) sale sin hacer nada.

2. Calcula today y tomorrow y el minuto total del día actual.

3. Carga data/recordatorios-sent.json (mapa clave→fecha de aviso ya enviado), limpia claves viejas y define fresh(key) para no repetir.

4. Hace POST a la API de Notion (databases/<DB_ID>/query) filtrando Status != Done y Due date = hoy o mañana.

5. Para cada tarea extrae nombre, fecha/hora de vencimiento, prioridad (emoji 🔴/🟡/🟢) y tipo (Task type multi_select, detecta si es cita/calendar).

6. Genera mensajes según reglas de ventana:

  • 24h: tareas con due = mañana, a partir de las 20:00, una vez.
  • Hoy sin hora: a las 9 y a las 14 (minutes < 15), una vez por franja.
  • Citas con hora: 2h antes, 30min antes y (solo citas) 15min antes, cada uno una sola vez, con ventana de 15 min.

7. Si hay mensajes, los une y llama a notify({ event: 'sec_reminder', level: 'info', ... }). Solo marca como enviados (persistiendo en el JSON) si el router confirma entrega a ceosec; si falla, se reintenta en el siguiente ciclo.

Datos/APIs

  • Notion API (api.notion.com, versión 2022-06-28) — base Tasks Tracker 32602a86-b28a-80ab-9fbb-d88bbe3367db (propiedades Task name, Status, Due date, Priority, Task type).
  • Router de notificaciones (tools/notify-router.ts) → Telegram CEOSEC vía evento sec_reminder.
  • Estado local: /Users/user/rifai-agents/data/recordatorios-sent.json (anti-repetición).
  • Variables .env: NOTION_TOKEN, TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID.

Cómo probarlo

cd /Users/user/rifai-agents && npx tsx agentes/migrated/recordatorios-smart.ts

No tiene flag FORCE: solo emite avisos si la hora actual (Madrid) cae dentro de alguna ventana (20h+, 9h, 14h, o 2h/30min/15min antes de una cita) y la clave está "fresh". Para forzar salida en pruebas, crea una tarea Notion con hora a +2h y ejecuta, o borra/edita data/recordatorios-sent.json para resetear lo ya enviado.

Si se rompe / recuperar

launchctl unload ~/Library/LaunchAgents/com.rifai.recordatorios-smart.plist
launchctl load   ~/Library/LaunchAgents/com.rifai.recordatorios-smart.plist

Logs en /Users/user/rifai-agents/logs/recordatorios-smart.log. Si manda avisos repetidos, revisa que data/recordatorios-sent.json exista y sea escribible. Si no manda nada, comprueba el token Notion y que las tareas tengan Due date con hora.

Cómo replicarlo

Origen n8n: workflow ldAmGHBn6KZfahCt "Secretario - Recordatorios Smart". Backup en /Users/user/rifai-agents/backups/n8n-export/01_recordatorios-smart.json. Piezas para rehacerlo:

1. Trigger cron cada 15 min, con guarda de domingo y zona horaria Madrid.

2. Query Notion filtrando Status != Done y due hoy/mañana.

3. Lógica de ventanas de antelación (24h / 9h+14h sin hora / 2h / 30min / 15min citas).

4. Deduplicación persistente en disco (una sola alerta por clave pageId:tipo:fecha).

5. Envío vía router (sec_reminder) marcando enviado solo tras confirmación de entrega.