Integrando o Discourse Voice com o LiveKit

Este guia explica como conectar o plugin Voice do Discourse a um servidor de mídia LiveKit. Por padrão, as chamadas de voz funcionam ponto a ponto (peer-to-peer): cada participante envia seu áudio diretamente para todos os outros participantes. Isso funciona muito bem para salas pequenas, mas a largura de banda cresce com o tamanho da sala. Roteando as chamadas através do LiveKit, a taxa de upload de cada participante permanece constante, independentemente do número de pessoas que entram.

Pré-requisitos

Antes de começar, certifique-se de ter:

  • Um site do Discourse com o plugin Voice habilitado
  • Um servidor LiveKit acessível, com suas credenciais de API. Você pode hospedar o LiveKit por conta própria ou usar uma oferta gerenciada, como o LiveKit Cloud.
  • Acesso de administrador ao seu site do Discourse.

Etapa 1 — Habilitar o plugin Voice

O Voice é fornecido junto com o Discourse. Vá em Admin → Settings → Plugins e ative a configuração Voice (voice_enabled).

Etapa 2 — Provisionar um servidor LiveKit e anotar as credenciais

Você precisa de três informações da sua implantação do LiveKit: a URL do WebSocket, a chave da API e o segredo da API.

Esses passos são relativamente diretos com o LiveKit Cloud:

  1. Crie um projeto no dashboard do LiveKit Cloud.
  2. Na página Settings → Keys do projeto, revele a API key e o API secret.
  3. Anote a URL do WebSocket (por exemplo, wss://my-project.livekit.cloud).

Para instalações do LiveKit auto-hospedadas, consulte a documentação respectiva.

Etapa 3 — Configurar a conexão com o LiveKit no Discourse

Vá em Admin → Plugins → Voice, abra as configurações e preencha a seção do LiveKit:

Configuração O que inserir
voice_livekit_url A URL do WebSocket, por exemplo wss://livekit.example.com (ou ws:// para laboratórios HTTP simples).
voice_livekit_api_key A chave da API da Etapa 2.
voice_livekit_api_secret O segredo da API da Etapa 2.
voice_livekit_room_policy Quais salas usam o LiveKit.

A configuração voice_livekit_room_policy decide como as salas escolhem o transporte:

Política Comportamento
disabled Todas as chamadas funcionam ponto a ponto (o padrão).
per_room Criadores/gestores de sala ativam individualmente as salas com a caixa de seleção Use media server (SFU) no formulário da sala.
all_rooms Todas as salas são roteadas através do LiveKit.

Etapa 5 — Configurações extras opcionais

Essas configurações ajustam finamente a integração:

Configuração Propósito
voice_livekit_room_prefix Prefixo de namespace para os nomes das salas no LiveKit. Com vários sites compartilhando um único servidor LiveKit, defina um prefixo único por site. Se vazio, usa o nome do banco de dados do site por padrão.
voice_livekit_mesh_fallback Quando um token do LiveKit não pode ser emitido e a sala está vazia, inicia na malha ponto a ponto em vez de falhar na entrada. Desativado por padrão — a degradação silenciosa pode ocultar uma falha no LiveKit.
voice_livekit_recording_enabled Permite que moderadores da sala gravem chamadas que funcionam no LiveKit. As gravações são produzidas pelo LiveKit Egress e armazenadas no armazenamento da sua implantação do LiveKit (S3, GCS, disco local) — não são enviadas para o Discourse.
voice_livekit_recording_filepath O caminho de arquivo passado ao LiveKit Egress, por exemplo voice/{room_name}-{utc}. Suporta placeholders como {room_name}, {room_id}, {time}, {utc}; a extensão do arquivo é adicionada automaticamente.

Etapa 6 — Opcional: habilitar webhooks do LiveKit

Webhooks são uma última linha de defesa para reconciliação. Quando a conexão de um participante é interrompida abruptamente ou uma sala termina, os webhooks permitem que o plugin limpe o estado de presença e da sala em segundos, em vez de esperar o TTL do heartbeat expirar. Eles são opcionais — se não puderem ser entregues, as chamadas ainda funcionam, apenas a limpeza leva um pouco mais de tempo.

No servidor LiveKit, adicione o endpoint do webhook (o plugin exibe o trecho exato em seu dashboard de administrador até que o primeiro webhook chegue):

# livekit.yaml
webhook:
  api_key: <your-api-key>
  urls:
    - https://forum.example.com/voice/livekit/webhook

Reinicie o LiveKit. As entregas são autenticadas com o segredo da API — não é necessário configurar um segredo compartilhado adicional.

Etapa 7 — Verificar a integração

Verificar o dashboard de administração do Voice no Discourse

Vá em Admin → Plugins → Voice → Dashboard. Assim que qualquer configuração do LiveKit estiver presente, o dashboard exibirá um cartão de status do servidor de mídia LiveKit com verificações em tempo real:

  • status da configuração (quais configurações estão presentes e a política ativa),
  • se os tokens de acesso podem ser assinados com o par de chaves,
  • se o servidor está acessível e quantas salas estão ativas,
  • a última verificação automática de conectividade,
  • se os webhooks estão sendo recebidos.

Use Refresh para executar uma sonda sob demanda.

Aqui está uma captura de tela do dashboard do plugin Voice com o LiveKit habilitado:

Verificar o dashboard do LiveKit

Há detalhes sobre as chamadas também no dashboard do LiveKit. Aqui está um exemplo:

3 curtidas