diff --git a/_INDEX.md b/_INDEX.md index 18eea95..d32163a 100644 --- a/_INDEX.md +++ b/_INDEX.md @@ -46,7 +46,7 @@ ## hermes-nyora | Runbook | Date | Tags | |---------|------|------| -| *(aucun pour l'instant)* | — | — | +| [Veille Dr. Nexum -- Email enrichi (fin du bug email illisible)](hermes-nyora/veille-nexum-email-enrichi.md) | 2026-07-03 | nyora, dr-nexum, veille, email, n8n, cron | --- diff --git a/hermes-nyora/veille-nexum-email-enrichi.md b/hermes-nyora/veille-nexum-email-enrichi.md new file mode 100644 index 0000000..93a69dc --- /dev/null +++ b/hermes-nyora/veille-nexum-email-enrichi.md @@ -0,0 +1,32 @@ +# Veille Dr. Nexum — Email enrichi (fin du bug "email illisible") + +**Date** : 2026-07-03 +**Tags** : nyora, dr-nexum, veille, email, n8n, cron + +## Problème + +L'email quotidien "Veille IA Dr. Nexum" (envoyé via `veille_ia_matin.py` → webhook n8n `veille-nexum-email` → SMTP ik.me) n'apportait que titre + lien + score brut, alors que le message Telegram équivalent contenait l'analyse complète (pourquoi c'est pertinent, titre vidéo suggéré, angle unique). Cause : le script Python envoyait l'email **avant** que Hermes fasse l'enrichissement (l'email était construit directement dans le script, l'analyse n'existait que dans la réponse finale de l'agent, livrée uniquement à Telegram). + +## Solution + +Découplage scraping / enrichissement / envoi email : + +1. `veille_ia_matin.py` (cron `veille-ia-nexum-4ee61494`, 11h30 UTC quotidien) : scrape 13 chaînes YouTube + HN + VentureBeat, score, top 5, écrit `/opt/data/veille_raw.json` (données brutes). **N'envoie plus d'email lui-même.** +2. Hermes analyse le top 5 (pourquoi pertinent / titre vidéo / angle) → format Telegram livré automatiquement (`HERMES_CRON_AUTO_DELIVER_PLATFORM=telegram`). +3. Hermes écrit `/tmp/veille_enrich.json` avec les mêmes analyses (même ordre que `veille_raw.json`) via un heredoc bash à guillemets simples (`<< 'EOF'`) — jamais de f-string Python avec `{...}` inline dans une commande bash (voir piège accolades documenté dans `common/`). +4. Hermes exécute `python3 /opt/data/veille_email_send.py` — ce script fusionne `veille_raw.json` + `veille_enrich.json`, construit un HTML avec le thème Nyora (cards sombres, dégradé rose/or #e94560, footer doré) contenant le **même contenu** que Telegram, et POST vers le webhook n8n `veille-nexum-email` (workflow `VEILLE | Email Dr. Nexum → Nabil TT`, id `uwjTfOlzKmzHkO9Q`). + +## Fichiers + +| Fichier | Rôle | +|---|---| +| `/opt/data/veille_ia_matin.py` | Scraping + scoring, écrit `veille_raw.json` | +| `/opt/data/veille_raw.json` | Données brutes du run (écrasées à chaque exécution) | +| `/tmp/veille_enrich.json` | Analyse Hermes du jour (éphémère) | +| `/opt/data/veille_email_send.py` | Fusion raw+enrich → HTML → POST n8n | + +Détail complet du prompt cron et du format Telegram/email : voir skill `hermes-nyora/data/skills/nyora/dr-nexum-production/references/veille-quotidienne-cron.md`. + +## Règle à ne jamais casser + +L'email ne doit **jamais** repartir en arrière vers "titre + lien + score brut". Si le contenu enrichi (why/video_title/angle) manque, `veille_email_send.py` envoie quand même l'email mais log un WARN — c'est un signal que l'étape 3 (écriture de `veille_enrich.json`) a été oubliée dans le prompt cron, pas un comportement normal.