Параметр 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 в форме комнаты
# и возвращает false при политике all_rooms.
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” уже можно читать анонимно для каждой комнаты. Это просто позволяет получить ответ без запроса к комнате, который может вернуть пустой результат.