Nodes and media
Голосова активація
Слова активації — це єдиний глобальний список, яким керує Gateway — окремих користувацьких списків для кожного вузла немає. Будь-який вузол або інтерфейс застосунку може редагувати список; Gateway зберігає зміну та транслює її всім підключеним клієнтам.
- macOS: локальний перемикач увімкнення/вимкнення голосової активації. Потрібна macOS 26+; подробиці про виконання/PTT див. у розділі Голосова активація (macOS).
- iOS: локальний перемикач увімкнення/вимкнення голосової активації в налаштуваннях.
- Android: локальний перемикач увімкнення/вимкнення голосової активації та редактор слів активації в Settings → Voice. Потрібне вбудоване розпізнавання мовлення на пристрої 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.set/voicewake.get, прослуховуєvoicewake.changedі оголошуєvoiceWake, коли функцію ввімкнено. Розпізнавання відбувається лише на пристрої та лише на передньому плані; воно призупиняється, коли Talk, ручне диктування, запис голосової нотатки або озвучення повідомлення використовує аудіо.