| Echtzeit-Zwei-Wege-Brücke zwischen Discourse Chat und Telegram mit erstklassiger Unterstützung für Telegram-Forumsthemen | |
| GitHub - babylai/discourse-telegram-chat-bridge: Real-time two-way bridge between Discourse Chat and Telegram (design phase / POC) · GitHub | |
| 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) | ||
| Emojis | ||
| Antworten | ||
| Bearbeitungen | ||
| Löschungen | ||
| Fotos | ||
| Andere Dateien | ||
| Sticker | — |
- Autorenzuordnung: Da Bots auf keiner der Plattformen Benutzer impersonieren können, wird der Autor als fettgedrucktes Präfix angezeigt –
**Maria:** Halloin 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/idin 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
- Erstelle einen Bot über @BotFather und kopiere das Token.
- Deaktiviere den Datenschutzmodus (
/setprivacy→ Deaktivieren), sonst sieht der Bot nur/commands.
Wenn der Bot bereits in einer Gruppe ist, entferne und füge ihn erneut hinzu – die Änderung gilt sonst nicht für bestehende Mitgliedschaften. - Füge den Bot als Admin zur Gruppe hinzu (er benötigt Nachrichten löschen für die Löschsynchronisation).
- 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)"
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). |
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.
