サイト設定シリアライズでLiveKitステータスを公開

voice_enabled は JSON API からまったくアクセスできません。/site.json には site_settings キーが含まれていないためです。つまり、サイト上でボイス機能が有効かどうかを示す唯一の公開シグナルは、voice_assets_path の存在です。

私が求めているのは、クライアントがルームを取得する前にボイス機能を表示すべきかどうかを判断できるようにするための、公開かつ認証情報不要なブール値2つです。両方とも既存の状態から導出され、新しいエンドポイントは必要ありません。plugins/voice/plugin.rb 内での実装は以下の通りです:

141行目、voice_public_access の上に:

#Public, credential-free signals for API clients that voice is enabled.

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

152行目、voice_livekit_per_room_available の上に:

# Whether joins can use LiveKit at all. A bare yes/no: no URL, key or
# policy value. The per-room attribute below only gates the room form's
# SFU checkbox, and reads false under the all_rooms policy.

  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」はすでに各ルームについて匿名で読み取ることができます。これは、空の結果が返ってくる可能性があるルーム取得なしに、その質問に答えるだけです。