Ponte de chat Discourse-Telegram

:information_source: Resumo 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
:hammer_and_wrench: Link do Repositório GitHub - babylai/discourse-telegram-chat-bridge: Real-time two-way bridge between Discourse Chat and Telegram (design phase / POC) · GitHub
:open_book: Guia de Instalação 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) :white_check_mark: formatação HTML real :white_check_mark: entidades → Markdown
Emojis :white_check_mark: :white_check_mark:
Respostas :white_check_mark: :white_check_mark:
Edições :white_check_mark: :white_check_mark:
Exclusões :white_check_mark: :cross_mark: (limitação da Bot API, veja abaixo)
Fotos :white_check_mark: fotos e álbuns :white_check_mark: baixadas e reenviadas
Outros arquivos :white_check_mark: :white_check_mark: documentos, vídeo, áudio, voz
Stickers :white_check_mark: estáticos como imagem; animados degradam para seu emoji
  • 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 /id em 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

  1. Crie um bot via @BotFather e copie o token.
  2. Desative o modo de privacidade (/setprivacy → Desativar), caso contrário, o bot só verá /comandos. :warning: 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.
  3. Adicione o bot ao seu grupo como administrador (ele precisa de Excluir mensagens para sincronização de exclusão).
  4. 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)"

:warning: 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).

:lock: 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.

1 curtida