Pont de discussion Discourse-Telegram

:information_source: Résumé Pont bidirectionnel en temps réel entre Discourse Chat et Telegram, avec un support de premier ordre pour les sujets des forums Telegram
:hammer_and_wrench: Lien vers le dépôt GitHub - babylai/discourse-telegram-chat-bridge: Real-time two-way bridge between Discourse Chat and Telegram (design phase / POC) · GitHub
:open_book: Guide d’installation 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) :white_check_mark: mise en forme HTML réelle :white_check_mark: entités → Markdown
Émojis :white_check_mark: :white_check_mark:
Réponses :white_check_mark: :white_check_mark:
Modifications :white_check_mark: :white_check_mark:
Suppressions :white_check_mark: :cross_mark: (limitation de l’API Bot, voir ci-dessous)
Photos :white_check_mark: photos et albums :white_check_mark: téléchargées et ré-uploadées
Autres fichiers :white_check_mark: :white_check_mark: documents, vidéo, audio, vocal
Stickers :white_check_mark: statiques en image ; animés dégradés vers leur émoji
  • 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 :** bonjour dans 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 /id dans 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

  1. Créez un bot via @BotFather et copiez le jeton.
  2. Désactivez le mode confidentialité (/setprivacy → Disable), sinon le bot ne verra que les /commandes. :warning: Si le bot est déjà dans un groupe, retirez-le et rajoutez-le — le changement ne s’applique pas aux abonnements existants autrement.
  3. Ajoutez le bot à votre groupe en tant qu’administrateur (il a besoin de Supprimer les messages pour la synchronisation des suppressions).
  4. 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)"

:warning: 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).

:lock: 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.

1 « J'aime »