Голосовой канал удобен, когда разговор не нужно назначать как отдельный звонок. Участники видят постоянную комнату, подключаются к ней по необходимости и продолжают обсуждение текстом в соседнем канале.
В Molvo голосовые каналы являются частью сообществ. Они отличаются от личных звонков не только интерфейсом, но и логикой подключения, правами доступа и управлением участниками.
Личный звонок и голосовой канал
Личный звонок рассчитан на двух пользователей. Backend фиксирует звонящего, получателя, чат, время начала и завершения, итоговый статус и длительность. Сигналинг идёт через realtime-соединение.
Голосовой канал принадлежит сообществу. Доступ к нему определяется членством, ролями и разрешениями VIEW_CHANNEL, CONNECT_VOICE и SPEAK. Molvo запрашивает у backend короткоживущий доступ к медиакомнате, после чего клиент подключается к отдельному LiveKit-сервису.
Что видит участник
В интерфейсе канала отображается список подключённых людей и их состояния. Пользователь может включить или выключить свой микрофон, выйти из комнаты и открыть контекстное меню другого участника.
Состояние присутствия оперативное: оно поддерживается в памяти сервиса и обновляется через Socket.IO. После отключения действует короткое окно восстановления, чтобы временный сетевой сбой не выглядел как мгновенный выход из комнаты.
Индивидуальная громкость
У каждого участника можно изменить громкость только для себя. Значение сохраняется локально на устройстве и не меняет то, как этого человека слышат остальные. Диапазон усиления достигает 500%; повышенные значения используют Web Audio только после проверки входного сигнала, а при проблеме приложение возвращается к стандартному воспроизведению.
Локальное заглушение работает по тому же принципу: звук участника выключается на вашем устройстве. Это не серверный mute и не управление чужим микрофоном. Для модераторов предусмотрено отдельное серверное действие, защищённое разрешениями сообщества.
Переходы между разговорами
Одновременное участие в конфликтующих голосовых сессиях может приводить к непредсказуемому звуку. Поэтому Molvo различает переходы из канала в личный звонок, из звонка в канал и между каналами. Для конфликтных переходов показывается подтверждение, а предыдущая сессия завершается до запуска новой.
Настройки «не показывать снова» хранятся отдельно для разных типов переходов. Исправления этой логики вошли в 1.0.3-beta.2 и 1.0.4-beta.2.
Какие данные возникают при голосовом общении
Для личных звонков в PostgreSQL сохраняются метаданные: идентификаторы участников и чата, время, статусы, причины завершения и длительность. Для диагностики соединения клиент может отправлять технические события: версию приложения, платформу, состояние соединения, коды ошибок, идентификаторы звонка или voice-сессии и показатели медиапотока.
Серверная диагностическая выборка хранится в памяти с настроенным по умолчанию сроком семь дней и одновременно может попадать в инфраструктурные журналы. Фактический срок хранения таких журналов зависит от внешней конфигурации и должен быть утверждён отдельно.
Практический сценарий для игры
Создайте сообщество, добавьте голосовой канал и выдайте роли участникам. Текстовый канал рядом подойдёт для ссылок, расписания и файлов. В голосовом канале каждый настроит громкость команды на своём устройстве, а при необходимости локально отключит отдельный источник звука.
Molvo не обещает устранить все сетевые проблемы. Качество зависит от устройств, подключения и медиасервера. Приложение отслеживает разрывы, пытается восстановить сессию и показывает итоговое состояние, чтобы пользователь понимал, что произошло.
