Ponte tra Discourse e Telegram

:information_source: Riepilogo Ponte in tempo reale e bidirezionale tra Discourse Chat e Telegram, con supporto di primo livello per gli argomenti dei forum Telegram
:hammer_and_wrench: Link al repository GitHub - babylai/discourse-telegram-chat-bridge: Real-time two-way bridge between Discourse Chat and Telegram (design phase / POC) · GitHub
:open_book: Guida all’installazione Come installare i plugin in Discourse

Funzionalità

Ogni canale di chat di Discourse è mappato a una chat Telegram — sia un gruppo semplice, sia un argomento specifico in un supergruppo con gli Argomenti abilitati. Un messaggio pubblicato da una parte appare dall’altra entro uno o due secondi.

Discourse → Telegram Telegram → Discourse
Testo (con formattazione) :white_check_mark: formattazione HTML reale :white_check_mark: entità → Markdown
Emoji :white_check_mark: :white_check_mark:
Risposte :white_check_mark: :white_check_mark:
Modifiche :white_check_mark: :white_check_mark:
Cancellazioni :white_check_mark: :cross_mark: (limitazione dell’API del bot, vedi sotto)
Foto :white_check_mark: foto e album :white_check_mark: scaricate e ricaricate
Altri file :white_check_mark: :white_check_mark: documenti, video, audio, voce
Stickers :white_check_mark: statici come immagine; animati degradati alla loro emoji
  • Attribuzione dell’autore: i bot non possono impersonare utenti su nessuna piattaforma, quindi i messaggi riportano l’autore come prefisso in grassetto — **Maria:** ciao in Discourse, maria: in Telegram.
  • Sicuro dai loop: i messaggi pubblicati dal ponte stesso non vengono mai ritrasmessi indietro.
  • Lavori idempotenti: i tentativi e le ridistribuzioni webhook non producono mai messaggi duplicati.
  • Consapevole dei limiti di frequenza: in caso di HTTP 429 il lavoro viene rimesso in coda dopo esattamente l’attesa richiesta da Telegram.
  • Degradazione elegante: i file oltre i limiti dell’API del bot (20 MB download / 50 MB upload) diventano una nota [file omesso: nome (dimensione)]; la formattazione non supportata degrada a testo semplice.
  • Comando di configurazione /id: digita /id in qualsiasi gruppo o argomento visibile al bot e questo risponderà con gli ID più una riga di mappatura pronta per il copia-incolla.

Limitazioni note

  • Le cancellazioni in Telegram non sono sincronizzate con Discourse — l’API del bot Telegram non ha eventi di cancellazione. Questa è una limitazione della piattaforma, non un problema di configurazione.
  • Telegram permette ai bot di modificare solo i propri messaggi per 48 ore; le modifiche di Discourse a messaggi più vecchi non vengono riflesse dal lato Telegram.
  • Le reazioni non sono ponteggiate.
  • I thread della chat di Discourse non sono mappati agli argomenti Telegram; le risposte ai thread sono ponteggiate in modo piatto.

Configurazione

1. Crea il bot Telegram

  1. Crea un bot tramite @BotFather e copia il token.
  2. Disabilita la modalità privacy (/setprivacy → Disable), altrimenti il bot vedrà solo i /comandi. :warning: Se il bot è già in un gruppo, rimuovilo e riaggiungilo — il cambiamento non si applica altrimenti alle appartenenze esistenti.
  3. Aggiungi il bot al tuo gruppo come amministratore (ha bisogno di Cancellare messaggi per la sincronizzazione delle cancellazioni).
  4. Per ponteggiare verso argomenti specifici, abilita gli Argomenti nelle impostazioni del gruppo.

2. Configura le impostazioni del sito (Admin → Plugin → Telegram Bridge): abilita il plugin, incolla il token del bot e imposta un segreto webhook casuale (ad esempio openssl rand -hex 24).

3. Registra il webhook — il più semplice tramite il client del plugin stesso, che imposta gli allowed_updates corretti per te:

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

:warning: allowed_updates risiede nella registrazione webhook memorizzata da Telegram, non nel codice del plugin. Se registri manualmente e ometti edited_message, Telegram non consegnerà mai le modifiche in silenzio.

4. Mappa i canali — digita /id in ogni gruppo/argomento, poi aggiungi una riga per ogni canale ponteggiato a telegram_bridge_mappings:

chat_channel_id:telegram_chat_id:telegram_thread_id

L’ID del canale Discourse è il numero alla fine dell’URL del canale (/chat/c/\<slug\>/\<id\>); lascia vuoto l’ID del thread per l’argomento Generale o un gruppo semplice. Ad ogni avvio e modifica della mappatura il plugin registra una riga di riepilogo mappature attive che puoi cercare con grep per confermare cosa è ponteggiato.

5. Verifica — invia un messaggio in ogni direzione. Se non succede nulla, controlla in ordine: la riga di log mappature attive, le informazioni webhook (get_webhook_info) e la modalità privacy.

Impostazioni

Nome Descrizione
telegram_bridge_enabled Interruttore principale on/off per il ponte.
telegram_bridge_bot_token Token API bot Telegram, emesso da @BotFather (segreto).
telegram_bridge_webhook_secret Segreto convalidato contro l’intestazione X-Telegram-Bot-Api-Secret-Token di Telegram nelle richieste webhook in arrivo (segreto).
telegram_bridge_mappings Mappature dei canali, una per riga: chat_channel_id:telegram_chat_id:telegram_thread_id (ID thread facoltativo).

:lock: Nota sulla privacy: i contenuti dei canali ponteggiati lasciano la tua istanza Discourse e sono memorizzati con Telegram (e viceversa). Solo i canali elencati esplicitamente nelle mappature sono mai ponteggiati — ma informa i membri di quei canali.

1 Mi Piace