| Pont bidirectionnel en temps réel entre Discourse Chat et Telegram, avec un support de premier ordre pour les sujets des forums Telegram | |
| GitHub - babylai/discourse-telegram-chat-bridge: Real-time two-way bridge between Discourse Chat and Telegram (design phase / POC) · GitHub | |
| Comment installer des plugins dans Discourse |
Fonctionnalités
Chaque canal de chat Discourse est mappé à un chat Telegram — soit un groupe simple, soit un sujet spécifique dans un supergroupe avec les Sujets activés. Un message posté d’un côté apparaît de l’autre en une ou deux secondes.
| Discourse → Telegram | Telegram → Discourse | |
|---|---|---|
| Texte (avec mise en forme) | ||
| Émojis | ||
| Réponses | ||
| Modifications | ||
| Suppressions | ||
| Photos | ||
| Autres fichiers | ||
| Stickers | — |
- Attribution de l’auteur : les bots ne peuvent pas usurper l’identité des utilisateurs sur aucune des deux plateformes, donc les messages portent l’auteur en préfixe gras —
**Maria :** bonjourdans Discourse, maria : dans Telegram. - Sécurité contre les boucles : les messages postés par le pont lui-même ne sont jamais relayés en arrière.
- Tâches idempotentes : les reprises et les livraisons webhook redondantes ne produisent jamais de messages en double.
- Prise en compte des limites de débit : en cas de HTTP 429, la tâche est réenfilée après exactement le délai demandé par Telegram.
- Dégradation gracieuse : les fichiers dépassant les limites de l’API Bot (20 Mo de téléchargement / 50 Mo d’upload) deviennent une note
[fichier omis : nom (taille)]; la mise en forme non supportée est dégradée en texte brut. - Commande de configuration
/id: tapez/iddans n’importe quel groupe ou sujet visible par le bot, et il répondra avec les identifiants ainsi qu’une ligne de mappage prête à être copiée.
Limitations connues
- Les suppressions dans Telegram ne sont pas synchronisées vers Discourse — l’API Bot de Telegram ne propose pas d’événement de suppression. Il s’agit d’une limitation de la plateforme, pas d’un problème de configuration.
- Telegram ne permet aux bots de modifier que leurs propres messages pendant 48 heures ; les modifications Discourse de messages plus anciens ne sont pas reflotées du côté Telegram.
- Les réactions ne sont pas pontées.
- Les threads de chat Discourse ne sont pas mappés aux sujets Telegram ; les réponses aux threads sont pontées à plat.
Configuration
1. Créer le bot Telegram
- Créez un bot via @BotFather et copiez le jeton.
- Désactivez le mode confidentialité (
/setprivacy→ Disable), sinon le bot ne verra que les/commandes.
Si le bot est déjà dans un groupe, retirez-le et rajoutez-le — le changement ne s’applique pas aux abonnements existants autrement. - Ajoutez le bot à votre groupe en tant qu’administrateur (il a besoin de Supprimer les messages pour la synchronisation des suppressions).
- Pour pontifier vers des sujets spécifiques, activez les Sujets dans les paramètres du groupe.
2. Configurer les paramètres du site (Admin → Plugins → Telegram Bridge) : activez le plugin, collez le jeton du bot, et définissez un secret webhook aléatoire (par ex. openssl rand -hex 24).
3. Enregistrer le webhook — le plus simple via le client propre au plugin, qui définit les allowed_updates corrects pour vous :
cd /var/discourse
./launcher enter app
rails runner "puts DiscourseTelegramChatBridge::TelegramClient.new.set_webhook(
url: 'https://VOTRE-SITE/telegram-bridge/webhook',
secret_token: SiteSetting.telegram_bridge_webhook_secret)"
allowed_updates réside dans l’enregistrement du webhook stocké chez Telegram, pas dans le code du plugin. Si vous l’enregistrez manuellement et omettez edited_message, Telegram ne livrera jamais silencieusement les modifications.
4. Mapper les canaux — tapez /id dans chaque groupe/sujet, puis ajoutez une ligne par canal pontifié à telegram_bridge_mappings :
chat_channel_id:telegram_chat_id:telegram_thread_id
L’identifiant du canal Discourse est le numéro à la fin de l’URL du canal (/chat/c/<slug>/<id>); laissez l’identifiant de thread vide pour le sujet Général ou un groupe simple. À chaque démarrage et changement de mappage, le plugin journalise une ligne de résumé mappings actifs que vous pouvez rechercher pour confirmer ce qui est pontifié.
5. Vérifier — envoyez un message dans chaque direction. Si rien ne se passe, vérifiez dans l’ordre : la ligne de journal mappings actifs, les infos du webhook (get_webhook_info), et le mode confidentialité.
Paramètres
| Nom | Description |
|---|---|
telegram_bridge_enabled |
Interrupteur principal on/off du pont. |
telegram_bridge_bot_token |
Jeton API Bot Telegram, émis par @BotFather (secret). |
telegram_bridge_webhook_secret |
Secret validé contre l’en-tête X-Telegram-Bot-Api-Secret-Token de Telegram sur les requêtes webhook entrantes (secret). |
telegram_bridge_mappings |
Mappages de canaux, un par ligne : chat_channel_id:telegram_chat_id:telegram_thread_id (identifiant de thread optionnel). |
Remarque sur la confidentialité : le contenu des canaux pontifiés quitte votre instance Discourse et est stocké chez Telegram (et vice versa). Seuls les canaux explicitement listés dans les mappages sont jamais pontifiés — mais informez les membres de ces canaux.
