| Ponte in tempo reale e bidirezionale tra Discourse Chat e Telegram, con supporto di primo livello per gli argomenti dei forum Telegram | |
| GitHub - babylai/discourse-telegram-chat-bridge: Real-time two-way bridge between Discourse Chat and Telegram (design phase / POC) · GitHub | |
| 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) | ||
| Emoji | ||
| Risposte | ||
| Modifiche | ||
| Cancellazioni | ||
| Foto | ||
| Altri file | ||
| Stickers | — |
- Attribuzione dell’autore: i bot non possono impersonare utenti su nessuna piattaforma, quindi i messaggi riportano l’autore come prefisso in grassetto —
**Maria:** ciaoin 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/idin 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
- Crea un bot tramite @BotFather e copia il token.
- Disabilita la modalità privacy (
/setprivacy→ Disable), altrimenti il bot vedrà solo i/comandi.
Se il bot è già in un gruppo, rimuovilo e riaggiungilo — il cambiamento non si applica altrimenti alle appartenenze esistenti. - Aggiungi il bot al tuo gruppo come amministratore (ha bisogno di Cancellare messaggi per la sincronizzazione delle cancellazioni).
- 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)"
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). |
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.
