Nodes and media
Голосовая активация
Слова активации представляют собой единый глобальный список, принадлежащий Gateway — отдельных пользовательских списков для каждого узла нет. Любой узел или интерфейс приложения может изменить список; Gateway сохраняет изменение и рассылает его всем подключенным клиентам.
- macOS: локальный переключатель включения и отключения голосовой активации. Требуется macOS 26+; сведения о работе функции и режиме PTT см. в разделе Голосовая активация (macOS).
- iOS: локальный переключатель включения и отключения голосовой активации в настройках.
- Android: не поддерживает голосовую активацию. На вкладке «Голос» вместо срабатывания по словам активации используется ручной захват звука с микрофона.
Хранение
Слова активации и правила маршрутизации хранятся в базе данных состояния Gateway, по умолчанию ~/.openclaw/state/openclaw.sqlite (можно переопределить с помощью OPENCLAW_STATE_DIR), в таблицах voicewake_triggers, voicewake_routing_config, voicewake_routing_routes. Устаревшие settings/voicewake.json и settings/voicewake-routing.json используются только как входные данные миграции openclaw doctor --fix — среда выполнения никогда их не читает.
Протокол
Список триггеров
| Метод | Параметры | Результат |
|---|---|---|
voicewake.get |
нет | { triggers: string[] } |
voicewake.set |
{ triggers: string[] } |
{ triggers: string[] } |
voicewake.set нормализует входные данные: удаляет пробелы по краям, отбрасывает пустые элементы, сохраняет не более 32 триггеров и обрезает каждый из них до 64 кодовых единиц UTF-16, не разделяя суррогатные пары. Если результат пуст, используются встроенные значения по умолчанию (openclaw, claude, computer).
Маршрутизация (от триггера к цели)
| Метод | Параметры | Результат |
|---|---|---|
voicewake.routing.get |
нет | { config: VoiceWakeRoutingConfig } |
voicewake.routing.set |
{ config: VoiceWakeRoutingConfig } |
{ config: VoiceWakeRoutingConfig } |
{ "version": 1, "defaultTarget": { "mode": "current" }, "routes": [{ "trigger": "robot wake", "target": { "sessionKey": "agent:main:main" } }], "updatedAtMs": 1730000000000}Каждая цель маршрута target поддерживает ровно один из следующих вариантов:
{ "mode": "current" }{ "agentId": "main" }{ "sessionKey": "agent:main:main" }
Ограничения: не более 32 маршрутов, текст триггера — не более 64 символов. Триггеры маршрутов нормализуются для сопоставления и обнаружения дубликатов: переводятся в нижний регистр, из каждого слова удаляются начальные и конечные знаки препинания, а последовательности пробельных символов объединяются ("Hey, Bot!!" и "hey bot" совпадают и считаются дубликатами). Эта нормализация строже простого удаления пробелов по краям, применяемого к глобальному списку триггеров выше.
События
| Событие | Полезная нагрузка |
|---|---|
voicewake.changed |
{ triggers: string[] } |
voicewake.routing.changed |
{ config: VoiceWakeRoutingConfig } |
Оба события рассылаются каждому клиенту WebSocket с областью доступа на чтение (приложению macOS, WebChat и аналогичным клиентам), а также каждому подключенному узлу. Узел также получает оба события в виде начального снимка состояния сразу после подключения.
Поведение клиентов
- macOS: вызывает
voicewake.set/voicewake.getи отслеживаетvoicewake.changed, чтобы поддерживать синхронизацию с другими клиентами. - iOS: вызывает
voicewake.set/voicewake.getи отслеживаетvoicewake.changed, чтобы локальное обнаружение слов активации своевременно реагировало на изменения. - Android: не объявляет возможность
voiceWakeи не обрабатывает обновления слов активации.