📞 diskuz Call – Chamadas de voz e vídeo dentro do Discourse (P2P, sem apps externos)

:information_source: Resumo Adiciona chamadas de voz e vídeo peer-to-peer (WebRTC) dentro do Discourse. Chamadas individuais a partir de um botão flutuante ou do compositor de chat 1:1; widget integrado e interface de chamada (UI). Sem aplicativos externos. Seu servidor Discourse faz apenas o sinalizador (sem mídia). Áudio/vídeo vai diretamente entre os dois navegadores (P2P) quando possível; você pode adicionar servidores TURN opcionais no Admin para que, quando o P2P direto falhar (ex: NAT/firewall restritivo), a mídia seja retransmitida via TURN e a chamada ainda funcione.
:hammer_and_wrench: Link do Repositório GitHub - idiskuz/diskuz-call: Voice calls (WebRTC) for Discourse. P2P calls between users, built-in UI. Created for diskuz.com. · GitHub
:open_book: Guia de Instalação Como instalar plugins no Discourse
:busts_in_silhouette: Comunidade diskuz Call Comunidade de Suporte em diskuz.com para este novo plugin.

Funcionalidades

  • Voz e vídeo P2P (WebRTC) — O Discourse apenas lida com a sinalização (oferta/resposta, ICE); ele nunca recebe ou armazena áudio/vídeo. STUN (padrão: Google) ajuda os dois navegadores a se encontrarem; a mídia flui diretamente entre eles (P2P verdadeiro). TURN (opcional, configurável em Admin → Servidores ICE) é um retransmissor: quando o P2P direto falha (NAT simétrico, firewall corporativo, etc.), a mídia vai Navegador A → Servidor TURN → Navegador B para que a chamada ainda funcione. Adicione TURN se os usuários relatarem chamadas falhadas ou áudio unidirecional.
  • Botão flutuante (canto inferior direito) — Abre um widget para digitar um nome de usuário e iniciar uma chamada. Oculto quando o compositor de tópicos ou o chat está aberto. O Admin pode desativá-lo em todo o site.
  • Botão de chamada no chat 1:1 — Ícone no compositor de chat para iniciar uma chamada com o outro usuário. O Admin pode desativá-lo em todo o site. Visível apenas para grupos permitidos quando ativado.
  • Acesso baseado em grupos — Apenas usuários em grupos configurados veem e usam o diskuz Call. Opcional: “chamado deve seguir o chamador” (requer Discourse Follow).
  • Grupos separados para “vídeo permitido” — Controla quem pode ligar a câmera durante uma chamada.
  • Toque configurável — Som quando uma chamada chega: nenhum, padrão, ding, sino, chat, personalizado (até 10 URLs de MP3; o usuário escolhe um no widget) ou predefinições alternativas integradas. Separadamente, as notificações do Discourse (ícone de sino) mostram “está te ligando” para chamadas recebidas e “Chamada perdida” com o tempo para chamadas perdidas.
  • Widget — Duas páginas: “Ligar para um amigo” (página inicial) e Notificações (Recebidas, Enviadas, Recentes, Perdidas; até 10 por guia; nomes de usuário clicáveis para ligar novamente). Desktop: arrastável pela barra superior. Celular: tela cheia.
  • Durante uma chamada — Duração, silenciar, alto-falante, vídeo ligado/desligado, desfocar (desktop/Android), modo ouvido no celular (overlay escuro; toque 3x para desbloquear). Status do usuário (Online, Ocupado, Offline) no navegador; chamadas recebidas podem ser rejeitadas automaticamente quando Ocupado/Offline. Se o usuário mudar para outra aba, um cronômetro de 60 segundos começa; se não retornar, a chamada termina.
  • Localização — Inglês e Italiano (cliente e servidor).

Status: Beta. Para chamadas falhadas ou áudio unidirecional, configure o TURN em Admin → Plugins → Servidores ICE.

Configuração

  1. Instalar — Adicione o plugin (ex: via hooks de app.yml ou manualmente no diretório de plugins):
    • git clone https://github.com/idiskuz/diskuz-call.git
    • Recompile o app (ex: ./launcher rebuild app).
  2. Ativar — Admin → Plugins: ative diskuz Call (se listado). Admin → Configurações → Plugins: ative Enable diskuz Call.
  3. Acesso — Defina Quem pode ver e usar diskuz Call para os grupos desejados (ex: 1|2|3 para admins, moderadores, equipe).
  4. Opcional — Configure Mostrar botão flutuante / Mostrar botão de chat, Exigir que o chamado siga o chamador (com Discourse Follow), Som para chamadas recebidas, Toques personalizados ou Toque alternativo, Grupos que podem ativar o vídeo, Cor primária e Servidores ICE (JSON TURN) se necessário para NAT/firewall.

Requisitos: Discourse (usa mensagens em tempo real integradas para sinalização). Opcional: Discourse Follow (para “chamado deve seguir o chamador”). Navegador com WebRTC, microfone (e câmera para vídeo).

Configurações

Nome Descrição
Enable diskuz Call Interruptor mestre para o plugin.
Who can see and use diskuz Call Lista de grupos (ex: admins, moderadores, equipe por ID). Apenas esses usuários veem o plugin e podem fazer/receber chamadas.
Require the callee to follow the caller Quando ativado (com Discourse Follow), o chamado deve seguir o chamador para receber chamadas.
Show floating button LIGADO: botão flutuante visível apenas para os grupos permitidos. DESLIGADO: oculto para todos.
Show chat button LIGADO: Botão de chamada no chat 1:1 visível apenas para os grupos permitidos. DESLIGADO: oculto para todos.
Groups that can enable video Lista de grupos para quem pode usar o botão Vídeo durante uma chamada.
Primary color Cor Hex (ex: #13c98c) para botão e acentos.
Sound for incoming calls nenhum, padrão, ding, sino, chat, personalizado ou alternativo.
Custom ringtones 1–10 URLs de MP3. Usado quando o Som é personalizado; o usuário escolhe um no widget.
Alternative ringtone Predefinição quando o Som é alternativo (ex: soft, classic, modern, festivo, marimba, relax1–5).
ICE servers Array JSON opcional para STUN/TURN. Vazio = Apenas Google STUN.
Debug log Quando LIGADO, mensagens \[diskuz-call\] no console do navegador (F12). Para suporte; desative em produção.

Autores: diskuz.com, Cristian Deraco
Créditos: Conceito, funcionalidades e design por Cristian Deraco (diskuz.com). Implementação com desenvolvimento assistido por IA.
Versão: 0.4.0-beta

Este não é um plugin oficial do Discourse.

Muito animado para compartilhar isso com todos vocês — o diskuz Call está finalmente no ar! Mal posso esperar para saber o que vocês acharam :star_struck:

2 curtidas