| Ponte bidirecional em tempo real entre o Discourse Chat e o Telegram, com suporte de primeira classe para tópicos de fóruns do Telegram | |
| GitHub - babylai/discourse-telegram-chat-bridge: Real-time two-way bridge between Discourse Chat and Telegram (design phase / POC) · GitHub | |
| Como instalar plugins no Discourse |
Recursos
Cada canal de chat do Discourse é mapeado para um chat do Telegram — seja um grupo simples ou um tópico específico em um supergrupo com Tópicos ativados. Uma mensagem postada em um lado aparece no outro em um ou dois segundos.
| Discourse → Telegram | Telegram → Discourse | |
|---|---|---|
| Texto (com formatação) | ||
| Emojis | ||
| Respostas | ||
| Edições | ||
| Exclusões | ||
| Fotos | ||
| Outros arquivos | ||
| Stickers | — |
- Atribuição de autor: bots não podem se passar por usuários em nenhuma das plataformas, então as mensagens carregam o autor como um prefixo em negrito —
**Maria:** oláno Discourse, maria: no Telegram. - À prova de loops: mensagens postadas pela própria ponte nunca são retransmitidas de volta.
- Tarefas idempotentes: tentativas e reentregas de webhook nunca produzem mensagens duplicadas.
- Ciente de limites de taxa: ao receber HTTP 429, a tarefa é reencadeada após exatamente o tempo de espera solicitado pelo Telegram.
- Degradação graciosa: arquivos acima dos limites da Bot API (20 MB de download / 50 MB de upload) se tornam uma nota
[arquivo omitido: nome (tamanho)]; formatação não suportada degrada para texto simples. - Comando de configuração
/id: digite/idem qualquer grupo ou tópico que o bot possa ver e ele responderá com os IDs e uma linha de mapeamento pronta para copiar e colar.
Limitações conhecidas
- Exclusões no Telegram não são sincronizadas com o Discourse — a Bot API do Telegram não possui evento de exclusão. Esta é uma limitação da plataforma, não um problema de configuração.
- O Telegram só permite que bots editem suas próprias mensagens por 48 horas; edições do Discourse em mensagens mais antigas não são refletidas no lado do Telegram.
- Reações não são ponteadas.
- Threads de chat do Discourse não são mapeadas para tópicos do Telegram; respostas de thread são ponteadas de forma plana.
Configuração
1. Crie o bot do Telegram
- Crie um bot via @BotFather e copie o token.
- Desative o modo de privacidade (
/setprivacy→ Desativar), caso contrário, o bot só verá/comandos.
Se o bot já estiver em um grupo, remova e adicione-o novamente — a mudança não se aplica a membros existentes, caso contrário. - Adicione o bot ao seu grupo como administrador (ele precisa de Excluir mensagens para sincronização de exclusão).
- Para pontear para tópicos específicos, ative Tópicos nas configurações do grupo.
2. Configure as configurações do site (Admin → Plugins → Telegram Bridge): ative o plugin, cole o token do bot e defina um segredo de webhook aleatório (por exemplo, openssl rand -hex 24).
3. Registre o webhook — a maneira mais fácil é através do próprio cliente do plugin, que define os allowed_updates corretos para você:
cd /var/discourse
./launcher enter app
rails runner "puts DiscourseTelegramChatBridge::TelegramClient.new.set_webhook(
url: 'https://SEU-SITE/telegram-bridge/webhook',
secret_token: SiteSetting.telegram_bridge_webhook_secret)"
allowed_updates reside no registro de webhook armazenado no Telegram, não no código do plugin. Se você registrar manualmente e omitir edited_message, o Telegram silenciosamente nunca entregará edições.
4. Mapeie canais — digite /id em cada grupo/tópico, então adicione uma linha por canal ponteador em telegram_bridge_mappings:
id_do_canal_de_chat:id_do_chat_do_telegram:id_do_tópico_do_telegram
O ID do canal do Discourse é o número no final da URL do canal (/chat/c/<slug>/<id>); deixe o ID do tópico em branco para o tópico Geral ou um grupo simples. Em cada inicialização e mudança de mapeamento, o plugin registra uma linha de resumo mapeamentos ativos que você pode grep para confirmar o que está ponteador.
5. Verifique — envie uma mensagem em cada direção. Se nada acontecer, verifique em ordem: a linha de log mapeamentos ativos, as informações do webhook (get_webhook_info) e o modo de privacidade.
Configurações
| Nome | Descrição |
|---|---|
telegram_bridge_enabled |
Interruptor principal liga/desliga da ponte. |
telegram_bridge_bot_token |
Token da Bot API do Telegram, emitido por @BotFather (secreto). |
telegram_bridge_webhook_secret |
Segredo validado contra o cabeçalho X-Telegram-Bot-Api-Secret-Token do Telegram em solicitações de webhook recebidas (secreto). |
telegram_bridge_mappings |
Mapeamentos de canal, um por linha: id_do_canal_de_chat:id_do_chat_do_telegram:id_do_tópico_do_telegram (ID do tópico opcional). |
Nota de privacidade: o conteúdo dos canais ponteados sai da sua instância do Discourse e é armazenado com o Telegram (e vice-versa). Apenas canais explicitamente listados nos mapeamentos são ponteados — mas informe os membros desses canais.
