📞 diskuz 通话 – Discourse 内的语音和视频通话(P2P,无需外部应用)

:information_source: 摘要 在 Discourse 中添加点对点语音和视频通话 (WebRTC)。 可通过浮动按钮1:1 聊天撰写框进行一对一通话;内置小部件呼叫界面 (UI)无需外部应用。 您的 Discourse 服务器仅执行信令(不处理媒体)。音频/视频在可能的情况下直接在两个浏览器之间传输 (P2P);您可以在管理员设置中添加可选的 TURN 服务器,以便在直连 P2P 失败时(例如,严格的 NAT/防火墙),媒体通过 TURN 中继传输,通话仍然有效。
:hammer_and_wrench: 代码仓库链接 GitHub - idiskuz/diskuz-call: Voice calls (WebRTC) for Discourse. P2P calls between users, built-in UI. Created for diskuz.com. · GitHub
:open_book: 安装指南 如何在 Discourse 中安装插件
:busts_in_silhouette: diskuz Call 社区 访问 diskuz.com 上的支持社区,了解此新插件。

功能特性

  • P2P 语音和视频 (WebRTC) — Discourse 只处理信令(offer/answer, ICE);它从不接收或存储音频/视频。STUN(默认:Google)帮助两个浏览器互相找到对方;然后媒体直接在它们之间流动(真正的 P2P)。TURN(可选,可在管理员设置 → ICE 服务器中配置)是一个中继:当直接 P2P 失败时(对称式 NAT、企业防火墙等),媒体流经 A → TURN 服务器 → B,以确保通话仍然有效。如果用户报告通话失败或单向音频,请添加 TURN。
  • 浮动按钮(右下角)— 打开一个小部件,用于输入用户名并开始通话。在主题撰写框或聊天窗口打开时隐藏。管理员可以全局禁用此功能。
  • 1:1 聊天中的呼叫按钮 — 聊天撰写框中的图标,用于与另一位用户开始通话。管理员可以全局禁用此功能。启用后仅对允许的组可见。
  • 基于组的访问 — 只有配置组中的用户才能看到和使用 diskuz Call。可选的“被呼叫者必须关注呼叫者”(需要 Discourse Follow)。
  • 单独的“允许视频”组 — 控制谁可以在通话期间打开摄像头。
  • 可配置的铃声 — 来电声音:无、默认、叮咚、响铃、聊天、自定义(最多 10 个 MP3 URL;用户在小部件中选择一个)或内置的替代预设。此外,Discourse 通知(铃铛图标)会显示“正在呼叫您”,对于未接来电显示“未接来电”及时间。
  • 小部件 — 两个页面:“呼叫朋友”(主页)和通知(已接收、已发送、最近、未接;每个标签页最多 10 个;用户名可点击重新呼叫)。桌面端:顶部栏可拖动。移动端:全屏。
  • 通话中 — 显示通话时长、静音、扬声器、视频开启/关闭、模糊(桌面/Android)、移动端的耳朵模式(深色覆盖层;连点 3 次解锁)。用户状态(在线、忙碌、离线)在浏览器中显示;忙碌/离线时可自动拒绝来电。如果用户切换到另一个标签页,将启动 60 秒计时器;如果用户未返回,通话将结束。
  • 本地化 — 英语和意大利语(客户端和服务器)。

状态: Beta。对于通话失败或单向音频,请在管理员 → 插件 → ICE 服务器中配置 TURN。

配置

  1. 安装 — 添加插件(例如,通过 app.yml 钩子或手动添加到插件目录):
    • git clone https://github.com/idiskuz/diskuz-call.git
    • 重建应用(例如 ./launcher rebuild app)。
  2. 启用 — 管理员 → 插件:启用 diskuz Call(如果已列出)。管理员 → 设置 → 插件:启用 启用 diskuz Call
  3. 访问 — 将 谁可以看到并使用 diskuz Call 设置为所需的组(例如 1|2|3 代表管理员、版主、员工)。
  4. 可选 — 配置 显示浮动按钮 / 显示聊天按钮要求被呼叫者关注呼叫者(需要 Discourse Follow)、将来电声音自定义铃声替代铃声可以启用视频的组主色,以及(如果需要处理 NAT/防火墙)ICE 服务器(TURN JSON)。

要求: Discourse(使用内置的实时消息功能进行信令)。可选:Discourse Follow(用于“被呼叫者必须关注呼叫者”)。支持 WebRTC 的浏览器、麦克风(视频还需要摄像头)。

设置

名称 描述
启用 diskuz Call 插件的主开关。
谁可以看到并使用 diskuz Call 组列表(例如,按 ID 分组的管理员、版主、员工)。只有这些用户才能看到插件并能拨打/接听电话。
要求被呼叫者关注呼叫者 启用时(需要 Discourse Follow),被呼叫者必须关注呼叫者才能接听电话。
显示浮动按钮 开启:浮动按钮仅对允许的组可见。关闭:对所有人隐藏。
显示聊天按钮 开启:1:1 聊天中的呼叫按钮仅对允许的组可见。关闭:对所有人隐藏。
可以启用视频的组 在通话期间可以控制谁可以使用视频按钮的组列表。
主色 用于按钮和强调色的十六进制颜色(例如 #13c98c)。
将来电声音 无、默认、叮咚、响铃、聊天、自定义或替代。
自定义铃声 1–10 MP3 URL。在“声音”设置为自定义时使用;用户在小部件中选择一个。
替代铃声 当“声音”设置为替代时的预设(例如,柔和、经典、现代、festivo、marimba、relax1–5)。
ICE 服务器 STUN/TURN 的可选 JSON 数组。留空 = 仅 Google STUN。
调试日志 开启时,浏览器控制台 (F12) 中会出现 [diskuz-call] 消息。用于支持;在生产环境中禁用。

作者: diskuz.com, Cristian Deraco
鸣谢: 概念、功能和设计由 Cristian Deraco (diskuz.com) 提供。使用 AI 辅助开发实现。
版本: 0.4.0-beta

这不是官方 Discourse 插件。

非常激动能与大家分享——diskuz Call 终于上线了!迫不及待想听听大家的想法 :star_struck:

6 个赞