← Volver al catálogo

📝 Trends → Notion

Archivo: /Users/user/rifai-agents/agentes/intel/trends-to-notion.ts · Plist: com.rifai.trends-to-notion · Horario: Diario a las 09:30 (StartCalendarInterval Hour 9, Minute 30), justo después de trends-hunter (09:00). Nota: el .plist solo está en ~/Library/LaunchAgents/, NO existe copia fuente en cron/.

Qué hace

Toma los "picks" comerciales que generó trends-hunter esa misma mañana y los crea como tarjetas (páginas) en una base de datos de Notion llamada "Trends Pipeline", para que el CEO pueda decidir si los añade al catálogo. Cada tarjeta lleva score, categoría, proveedor sugerido, rango de precio, racional y una checklist de acción (investigar proveedor, calcular margen, decidir). Deduplica para no recrear picks ya enviados. Si no encuentra la base Notion, avisa con instrucciones para activarla en vez de fallar.

Cómo funciona

1. Parsea .env; aborta si falta NOTION_TOKEN (exit 1).

2. Lee data/trends-hunter-state.json; coge la última entrada de history para sacar la fecha del día. Si no hay state o historia, sale (exit 0).

3. Abre el reporte del día reportes/trends-<fecha>.md y re-parsea los picks desde el markdown con regex (título, score, categoría, por qué, proveedor, rango precio). No vuelve a llamar a ningún modelo IA.

4. Carga data/trends-to-notion-state.json (pushed_titles) y filtra a fresh los picks aún no enviados.

5. findOrCreateDB(): si existe NOTION_TRENDS_DB_ID en .env lo usa; si no, busca vía la Notion Search API una database cuyo título contenga "trend". Si no encuentra ninguna, notifica instrucciones de activación y sale (exit 0).

6. Por cada pick nuevo llama a createTrendCard() → POST https://api.notion.com/v1/pages con propiedad Name y bloques hijos (heading, párrafos con datos, y 3 to_do de acción).

7. Marca los enviados en pushed_titles (capado a 500) y guarda estado.

8. Si creó tarjetas, notifica vía notify-router (evento intel_weekly) que hay N picks nuevos en la pipeline.

Datos/APIs

  • Notion API (https://api.notion.com/v1, version 2022-06-28):
  • POST /search para localizar la database "Trends".
  • POST /pages para crear cada tarjeta.
  • notify-router (tools/notify-router.ts) → evento intel_weekly → Iván/intel.
  • Vars .env:
  • NOTION_TOKENobligatoria (token de la integración Notion RifKings).
  • NOTION_TRENDS_DB_ID — opcional; ID de la database "Trends Pipeline". Si no está, intenta autodescubrirla por búsqueda.
  • (indirectamente, las tokens Telegram que use notify-router.)
  • Entradas: data/trends-hunter-state.json y reportes/trends-<fecha>.md (producidos por trends-hunter). Estado propio: data/trends-to-notion-state.json.

Cómo probarlo

cd /Users/user/rifai-agents && npx tsx agentes/intel/trends-to-notion.ts

No tiene flag FORCE. Requiere que trends-hunter haya corrido antes y dejado reporte del día. Espera ver: 📝 Trends → Notion, número de picks recuperados del reporte, picks nuevos para Notion, y ✅ "<titulo>" → Notion por cada tarjeta creada. Si falta NOTION_TOKEN aborta; si no encuentra database "Trends Pipeline" imprime las instrucciones de activación y sale sin error. Verifica las tarjetas en Notion.

Si se rompe / recuperar

  • Recargar el plist:
  launchctl unload ~/Library/LaunchAgents/com.rifai.trends-to-notion.plist
  launchctl load   ~/Library/LaunchAgents/com.rifai.trends-to-notion.plist
  • Logs: /Users/user/rifai-agents/logs/trends-to-notion.log (también .out.log y .err.log).
  • Fallos típicos: "no hay reporte" → comprobar que trends-hunter corrió a las 09:00. "No se encontró database Trends Pipeline" → crear la database en Notion, compartirla con la integración RifKings y añadir NOTION_TRENDS_DB_ID=<id> al .env. Errores de la Notion API se tragan silenciosamente en createTrendCard (devuelve false) → revisar token/permisos si las tarjetas no aparecen.
  • Importante: no existe copia del plist en cron/; si se pierde el de ~/Library/LaunchAgents/, recrearlo a mano.

Cómo replicarlo

Piezas necesarias:

1. Script TS que parsea .env (snippet estándar).

2. Dependencia del output de trends-hunter: data/trends-hunter-state.json + reportes/trends-<fecha>.md.

3. Parser regex de los picks desde el markdown del reporte.

4. Integración Notion: NOTION_TOKEN + database "Trends Pipeline" compartida con la integración, opcionalmente NOTION_TRENDS_DB_ID. Llamadas a Search API y Pages API (version 2022-06-28).

5. Fichero de estado JSON para deduplicar (data/trends-to-notion-state.json).

6. tools/notify-router.ts con evento intel_weekly.

7. Un .plist con StartCalendarInterval Hour 9 Minute 30, cargado en ~/Library/LaunchAgents/, ejecutando npx tsx agentes/intel/trends-to-notion.ts.