Discourse-Telegram Chat-Bridge

:information_source: Zusammenfassung Echtzeit-Zwei-Wege-Brücke zwischen Discourse Chat und Telegram mit erstklassiger Unterstützung für Telegram-Forumsthemen
:hammer_and_wrench: Repository-Link GitHub - babylai/discourse-telegram-chat-bridge: Real-time two-way bridge between Discourse Chat and Telegram (design phase / POC) · GitHub
:open_book: Installationsanleitung Wie man Plugins in Discourse installiert

Funktionen

Jeder Discourse-Chat-Kanal wird einem Telegram-Chat zugeordnet – entweder einer normalen Gruppe oder einem bestimmten Thema in einer Supergruppe mit aktivierten Themen. Eine auf einer Seite veröffentlichte Nachricht erscheint innerhalb von ein oder zwei Sekunden auf der anderen.

Discourse → Telegram Telegram → Discourse
Text (mit Formatierung) :white_check_mark: echtes HTML-Formatting :white_check_mark: Entities → Markdown
Emojis :white_check_mark: :white_check_mark:
Antworten :white_check_mark: :white_check_mark:
Bearbeitungen :white_check_mark: :white_check_mark:
Löschungen :white_check_mark: :cross_mark: (Einschränkung der Bot-API, siehe unten)
Fotos :white_check_mark: Fotos & Alben :white_check_mark: heruntergeladen und erneut hochgeladen
Andere Dateien :white_check_mark: :white_check_mark: Dokumente, Video, Audio, Sprachnachrichten
Sticker :white_check_mark: statisch als Bild; animierte werden zu ihrem Emoji degradiert
  • Autorenzuordnung: Da Bots auf keiner der Plattformen Benutzer impersonieren können, wird der Autor als fettgedrucktes Präfix angezeigt – **Maria:** Hallo in Discourse, maria: in Telegram.
  • Schleifenfrei: Nachrichten, die von der Brücke selbst gesendet werden, werden nie zurückgeleitet.
  • Idempotente Jobs: Wiederholungen und Webhook-Neulieferungen erzeugen niemals doppelte Nachrichten.
  • Ratenbegrenzungsbewusst: Bei HTTP 429 wird der Job nach genau der von Telegram angeforderten Wartezeit erneut in die Warteschlange gestellt.
  • Sanfte Degradierung: Dateien über den Bot-API-Limits (20 MB Download / 50 MB Upload) werden zu einer [Datei weggelassen: Name (Größe)]-Notiz; nicht unterstützte Formatierungen werden zu Klartext degradiert.
  • /id-Setup-Befehl: Tippe /id in jeder Gruppe oder jedem Thema, das der Bot sehen kann, und er antwortet mit den IDs plus einer kopierbaren Zuordnungszeile.

Bekannte Einschränkungen

  • Löschungen in Telegram werden nicht mit Discourse synchronisiert – die Telegram Bot-API hat kein Löschungsereignis. Dies ist eine Plattformbeschränkung, kein Konfigurationsproblem.
  • Telegram erlaubt Bots nur, ihre eigenen Nachrichten für 48 Stunden zu bearbeiten; Discourse-Bearbeitungen älterer Nachrichten werden auf der Telegram-Seite nicht widergespiegelt.
  • Reaktionen werden nicht überbrückt.
  • Discourse-Chat-Threads werden nicht Telegram-Themen zugeordnet; Thread-Antworten werden flach überbrückt.

Konfiguration

1. Erstelle den Telegram-Bot

  1. Erstelle einen Bot über @BotFather und kopiere das Token.
  2. Deaktiviere den Datenschutzmodus (/setprivacy → Deaktivieren), sonst sieht der Bot nur /commands. :warning: Wenn der Bot bereits in einer Gruppe ist, entferne und füge ihn erneut hinzu – die Änderung gilt sonst nicht für bestehende Mitgliedschaften.
  3. Füge den Bot als Admin zur Gruppe hinzu (er benötigt Nachrichten löschen für die Löschsynchronisation).
  4. Um in bestimmte Themen zu überbrücken, aktiviere Themen in den Gruppeneinstellungen.

2. Konfiguriere die Site-Einstellungen (Admin → Plugins → Telegram Bridge): Aktiviere das Plugin, füge das Bot-Token ein und setze ein zufälliges Webhook-Geheimnis (z. B. openssl rand -hex 24).

3. Registriere das Webhook – am einfachsten über den eigenen Client des Plugins, der die korrekten allowed_updates für dich setzt:

cd /var/discourse
./launcher enter app
rails runner "puts DiscourseTelegramChatBridge::TelegramClient.new.set_webhook(
  url: 'https://DEINE-SITE/telegram-bridge/webhook',
  secret_token: SiteSetting.telegram_bridge_webhook_secret)"

:warning: allowed_updates lebt in der bei Telegram gespeicherten Webhook-Registrierung, nicht im Plugin-Code. Wenn du manuell registrierst und edited_message weglässt, liefert Telegram Bearbeitungen stillschweigend nie aus.

4. Ordne Kanäle zu – tippe /id in jeder Gruppe/jedem Thema und füge dann je eine Zeile pro überbrückten Kanal zu telegram_bridge_mappings hinzu:

chat_channel_id:telegram_chat_id:telegram_thread_id

Die Discourse-Kanal-ID ist die Nummer am Ende der Kanal-URL (/chat/c/<slug>/<id>); lasse die Thread-ID für das Allgemeine Thema oder eine normale Gruppe leer. Bei jedem Start und jeder Änderung der Zuordnung protokolliert das Plugin eine active mappings-Zusammenfassungszeile, die du mit grep überprüfen kannst, um zu bestätigen, was überbrückt wird.

5. Verifiziere – sende eine Nachricht in jede Richtung. Wenn nichts passiert, prüfe nacheinander: die active mappings-Protokollzeile, die Webhook-Informationen (get_webhook_info) und den Datenschutzmodus.

Einstellungen

Name Beschreibung
telegram_bridge_enabled Haupt-Ein/Aus-Schalter für die Brücke.
telegram_bridge_bot_token Telegram Bot-API-Token, ausgestellt von @BotFather (geheim).
telegram_bridge_webhook_secret Geheimnis, das gegen den X-Telegram-Bot-Api-Secret-Token-Header in eingehenden Webhook-Anfragen validiert wird (geheim).
telegram_bridge_mappings Kanalzuordnungen, eine pro Zeile: chat_channel_id:telegram_chat_id:telegram_thread_id (Thread-ID optional).

:lock: Datenschutzhinweis: Inhalte aus überbrückten Kanälen verlassen deine Discourse-Instanz und werden bei Telegram gespeichert (und umgekehrt). Nur explizit in den Zuordnungen aufgeführte Kanäle werden jemals überbrückt – informiere aber die Mitglieder dieser Kanäle.

1 „Gefällt mir“