telegram-multi-bot-routing
Configurer et gérer plusieurs bots Telegram avec routage contextuel dans Hermes — inventaire, tokens, Chat IDs, gateways multiples, mapping contexte→canal
Quand l'utiliser (Trigger)
Déclenchement standard selon le contexte de l'écosystème Hermès.
Mode d'emploi (Usage)
Mode d'emploi standard via l'agent Hermès. Routage Multi-Bot Telegram
Ce skill gère l’architecture où plusieurs bots Telegram sont connectés à Hermes, chacun dédié à un contexte métier (support, alertes, commandes, factures, etc.), avec routage automatique du message vers le bon bot.
Complémentaire du skill session-routing (qui gère Topics/Profiles/Kanban au sein d’un seul bot).
🔍 Logique de Routage Contexte → Canal
| Contexte | Canal cible | Exemple de déclenchement |
|---|---|---|
| 🔴 Urgence / Alerte serveur | SBF_AlertesBot | Attaque SSH, service down, disque plein, fail2ban |
| 📦 Commande client | SBF_CommandesBot | Nouvelle commande, statut livraison, suivi |
| 💳 Facturation | SBF_FacturationBot | Facture émise, relance impayé, paiement reçu |
| 👥 Support client | SBF_SupportBot | Ticket ouvert, résolu, escalade |
| 🚚 Livraison | SBF_LivraisonBot | Colis expédié, retard, livré |
| 🎯 Marketing | SBF_MarketingBot | Campagne envoyée, stats, lead |
| 📅 Rendez-vous | SBF_CalendarBot | Nouveau RDV, rappel, annulation |
| 🔔 Rappel / Échéance | SBF_RappelBot | Échéance, anniversaire, tâche |
| 💼 RH / Interne | SBF_NotificationBot | Congés, absences, annonce interne |
| ℹ️ Info générale | SBF_InfoBot | Newsletter, annonce société, info |
| mon_email_assistant_bot | Envoi email automatisé via Gmail | |
| 💼 Emploi | Sbf_Job_autobot | Offres Indeed, candidatures |
| 🔄 Sync données | SBF_DataSynchronBot | Sync DB, transfert fichiers, backup |
| 🎮 Loisir / Détente | SBF_SurpriseBot | Blague, quiz, détente |
| ⭐ Général / Principal | SBF_BFNousBot | Tout ce qui n’est pas classé |
🛠️ Workflow d’Installation
Phase 1 : Inventaire
- Lire le Sheet d’inventaire des bots (colonne standard : Nom, Description, Usage, Signature, Token, URL, ChatID, Statut)
- Vérifier les tokens : Si le token contient
***, c’est qu’il est tronqué — la vraie clé secrète a été remplacée. Il faut impérativement récupérer le token complet depuis @BotFather.- Vrai token :
8247499204:***(46 chars) - Tronqué :
8247499204:***(les***sont LITTÉRAUX dans la cellule)
- Vrai token :
- SBF_LivraisonBot a
Token sécurisé— impossible de récupérer le token sans @BotFather - Demander à l’utilisateur de récupérer les tokens complets depuis @BotFather
Phase 2 : Capture des Chat IDs
Étape par étape (pour un humain) :
- Ouvrir Telegram sur le téléphone/desktop 📱
- Chercher le bot dans la barre de recherche (ex:
@sbf_supportbot) - Cliquer sur Démarrer ou envoyer
/start - Envoyer n’importe quel message (même
/startsuffit) - Répéter pour chaque bot de la liste
Puis, côté terminal (moi) :
# Pour chaque bot dont on a le TOKEN COMPLET :
curl -s "https://api.telegram.org/bot<TOKEN>/getUpdates" | python3 -c "
import json,sys
d=json.load(sys.stdin)
for u in d.get('result',[]):
m=u.get('message',{}) or u.get('edited_message',{})
c=m.get('chat',{})
print(f'Chat ID: {c.get(\"id\")} | Type: {c.get(\"type\")} | Titre: {c.get(\"title\",c.get(\"first_name\",\"?\"))}')"
Phase 3 : Ajout dans .env
echo 'TELEGRAM_TOKEN_SBF_SUPPORT=8247499204:ABC...' >> ~/.hermes/.env
echo 'TELEGRAM_TOKEN_SBF_ALERTES=8319284012:ABC...' >> ~/.hermes/.env
# ... etc
chmod 600 ~/.hermes/.env
Phase 4 : Configuration gateways (config.yaml)
gateways:
telegram:
enabled: true
token: "${TELEGRAM_TOKEN_BFNOUS}" # bot principal
telegram_alertes: # bot alertes
enabled: true
token: "${TELEGRAM_TOKEN_SBF_ALERTES}"
telegram_support: # bot support
enabled: true
token: "${TELEGRAM_TOKEN_SBF_SUPPORT}"
# ... ajouter les autres
Phase 5 : Routage dans le code
Utiliser send_message(target="telegram:CHAT_ID") pour délivrer au bon canal :
# Exemple : alerte serveur → SBF_AlertesBot
send_message(target="telegram:-100...ALERTES_CHAT_ID", message="🔴 Attaque SSH détectée !")
Phase 6 : Mise à jour du Sheet
Mettre à jour la colonne Chat ID dans le Sheet d’inventaire.
📋 Structure du Sheet d’Inventaire
Colonnes attendues (standard) : 0. Nom Bot Telegram
- Description
- Usage / Workflow
- Signature Courte
- Token API (peut être tronqué →
***) - URL Telegram Bot
- Chat ID (vide tant que non capturé)
- Statut Actif (Oui/Non) 8-10. Dernière mise à jour, Responsable, Notes
⚠️ Pièges Connus
Latence / bot silencieux
- Avant de conclure que Telegram est down, vérifier les logs gateway + agent : Telegram peut être connecté et recevoir les messages, mais attendre une compression de contexte ou une grosse requête modèle.
- Marqueurs typiques :
inbound messagesansresponse ready, puisPreflight compression,context compression started, ou requêtes modèle à très gros input tokens. - Si
api.telegram.orgrépond vite et que✓ telegram connectedest présent, le problème est généralement côté session Hermes/modèle/contexte, pas côté Telegram. - Ne pas redémarrer le gateway sans prévenir si une session est active : ça peut couper un run en cours. Préférer
/newou/resetsi l’utilisateur accepte de repartir proprement. - Coolify vs gateway natif : ne jamais affirmer que Telegram est connecté à l’app Coolify seulement parce que les logs Telegram existent. Corréler 3 preuves : statut de l’app Coolify cible (
running:healthy, pasrestarting:unknown), montage du mêmeHERMES_HOME/volume (/home/bf/.hermes→ chemin conteneur attendu), et logs récents du conteneur Coolify montranttelegram connected/polling. Si les logs mentionnenthermes-gateway.service, traiter cela comme indice d’un gateway natif hors Coolify. - Détails et commandes redacted :
references/telegram-gateway-latency-diagnostics.md.
Tokens
- Les tokens dans le Sheet sont tronqués (la partie secrète est remplacée par
***) - SBF_LivraisonBot avait
Token sécurisé— pas de token du tout dans le sheet - Les tokens complets ne sont disponibles QUE dans les messages @BotFather (une seule fois après création)
- Si perdu, il faut recréer le bot via @BotFather →
/newbot
Chat IDs
- Les Chat IDs individuels (DM) sont des entiers (ex:
7346401040) - Les Chat IDs de groupe commencent par
-100(ex:-1001234567890) - Un bot doit recevoir AU MOINS UN MESSAGE avant d’apparaître dans
getUpdates getUpdatesne montre que les messages récents — si le bot est inactif depuis longtemps, l’update a expiré
Gateways Hermes
- Chaque gateway ajoute un peu de overhead mémoire
- Les gateways sont indépendants — chaque bot a son propre cycle de polling
- Les tokens des gateways sont stockés dans
.env(chmod 600) - Redémarrer le gateway après configuration :
hermes gateway restart - Vérifier la connexion :
hermes gateway status
Routage
send_message(target="telegram:CHAT_ID")fonctionne avec le gateway PRINCIPAL- Pour utiliser un AUTRE gateway comme expéditeur, il faut préciser le bon canal
- Les notifications cron peuvent être dirigées vers n’importe quel bot via le paramètre
deliver
🔗 Références
- Sheet d’inventaire SBF : https://docs.google.com/spreadsheets/d/1n-KUeluojOmvhy3t2sdIA4Fu0gTeVYaEpRhRjuqj9mY/edit
- Session-routing skill : routage interne (Topics/Profiles/Kanban)
- Hermes gateway docs : docs/user-guide/messaging/telegram.md