nas-runbooks/common/envoi-fichier-telegram.md

63 lines
2.7 KiB
Markdown

# Envoi de fichiers via Telegram depuis les agents Hermes — fix du fallback mail
**Date** : 2026-07-04
**Sphères concernées** : hermes-tt, hermes-nyora, hermes-perso (les 3)
## Symptôme
Les instances Hermes sont parfois incapables de transférer à Nabil le fichier
qu'elles viennent de créer (docx, pdf, xlsx, pptx…) via Telegram, et se
rabattent sur un envoi par mail (transfer mail) — friction inutile.
## Cause racine
Aucun skill ne documentait l'envoi de fichiers via l'API Bot Telegram.
`telegram-output.md` ne couvre que le **formatage texte** (pipe tables MD,
rich_messages). Quand le mécanisme natif de l'agent échoue ou n'est pas
sélectionné, l'agent conclut « impossible d'envoyer un fichier via Telegram »
et bascule sur le mail.
Or tout est déjà en place dans chaque conteneur agent :
- `TELEGRAM_BOT_TOKEN` (env, un bot par instance) et `TELEGRAM_ALLOWED_USERS`
(= chat_id de Nabil : 2084513684) injectés par le compose racine ;
- `curl` présent (`/usr/bin/curl`) ;
- réseau sortant vers `api.telegram.org` fonctionnel.
## Fix appliqué (validé 2026-07-04)
Skill `envoyer-fichier-telegram.md` déployé à la racine `data/skills/` des
**3 instances** (ownership 1026:100), snapshot caches purgés, agents
redémarrés un par un (healthy, UI 3010/3020/3030 = 200).
Commande cœur du skill :
```bash
curl -s -F chat_id=$TELEGRAM_ALLOWED_USERS \
-F document=@"/chemin/vers/fichier.docx" \
-F caption="Description courte" \
"https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendDocument"
```
Règles du skill :
- Ne JAMAIS basculer sur le mail pour livrer un fichier (sauf demande explicite).
- Vérifier `"ok":true` dans la réponse avant de confirmer la livraison.
- Limite API Bot = **50 Mo** → au-delà, lien de téléchargement (Pingvin).
- Images avec aperçu : `sendPhoto` ; documents : toujours `sendDocument`
(préserve le fichier original).
## Tests de validation
- `sendDocument` réel depuis le conteneur hermes-agent-perso → `ok:true`,
fichier reçu dans le chat de Nabil (message_id 3027).
- `getMe` depuis hermes-agent-tt et hermes-agent-nyora → `ok:true`
(HermesTT_botbot, HermesNyora_botbot) : token + réseau valides partout.
## Diagnostic futur
Si une instance re-signale « impossible d'envoyer le fichier via Telegram » :
1. Vérifier que `data/skills/envoyer-fichier-telegram.md` existe toujours.
2. `docker exec hermes-agent-<i> sh -c 'curl -s https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/getMe'` → doit répondre `ok:true`.
3. Vérifier la taille du fichier (> 50 Mo = limite API Bot, pas une panne).
4. Vérifier que le chemin du fichier est bien accessible depuis LE conteneur
agent (pas un chemin du workspace ou de l'hôte).