在站点设置序列化器中公开 LiveKit 状态

voice_enabled 在 JSON API 中完全不可访问:/site.json 不包含 site_settings 键。因此,唯一能公开表明站点正在运行语音功能的信号是 voice_assets_path 的存在。

我请求提供两个公开的、无需凭据的布尔值,以便客户端在获取任何房间之前决定是否需要展示语音功能。这两个值均派生自现有状态,无需新增端点,位于 plugins/voice/plugin.rb 中:

在第 141 行,voice_public_access 上方:

# 供 API 客户端使用的公开、无需凭据的信号,表明语音功能已启用。

add_to_serializer(:site, :voice_available) { SiteSetting.voice_enabled }

在第 152 行,voice_livekit_per_room_available 上方:

# 加入是否可以使用 LiveKit。仅是一个简单的“是/否”:不包含 URL、密钥或
# 策略值。下方的每房间属性仅用于控制房间表单中的 SFU 复选框,
# 并且在 all_rooms 策略下读取为 false。

  add_to_serializer(:site, :voice_livekit_available) do

    Voice::Livekit.configured? && SiteSetting.voice_livekit_room_policy != "disabled"

  end

这并未暴露任何新内容:expected_transport 是 RoomSerializer 中未受限制的属性(第 30 行,定义于第 150 行),且 rooms#index 跳过登录检查(rooms_controller.rb:18),因此 “livekit” / “mesh” 已经可以按房间匿名读取。这只是在无需进行可能返回空结果的房间获取请求的情况下回答了该问题。