Nodes and media
Aktywacja głosowa
Słowa aktywujące są jedną globalną listą należącą do Gateway — nie ma niestandardowych list dla poszczególnych węzłów. Każdy węzeł lub interfejs aplikacji może edytować listę; Gateway utrwala zmianę i rozsyła ją do wszystkich połączonych klientów.
- macOS: lokalny przełącznik włączania/wyłączania aktywacji głosowej. Wymaga systemu macOS 26+; szczegóły dotyczące środowiska uruchomieniowego/PTT zawiera sekcja Aktywacja głosowa (macOS).
- iOS: lokalny przełącznik włączania/wyłączania aktywacji głosowej w Settings.
- Android: lokalny przełącznik włączania/wyłączania aktywacji głosowej i edytor słów aktywujących w Settings → Voice. Wymaga rozpoznawania mowy na urządzeniu z systemem Android.
Przechowywanie
Słowa aktywujące i reguły routingu znajdują się w bazie danych stanu Gateway, domyślnie ~/.openclaw/state/openclaw.sqlite (można to zmienić za pomocą OPENCLAW_STATE_DIR), w tabelach voicewake_triggers, voicewake_routing_config, voicewake_routing_routes. Starsze settings/voicewake.json i settings/voicewake-routing.json służą wyłącznie jako dane wejściowe migracji openclaw doctor --fix — środowisko uruchomieniowe nigdy ich nie odczytuje.
Protokół
Lista wyzwalaczy
| Metoda | Parametry | Wynik |
|---|---|---|
voicewake.get |
brak | { triggers: string[] } |
voicewake.set |
{ triggers: string[] } |
{ triggers: string[] } |
voicewake.set normalizuje dane wejściowe: usuwa białe znaki z początku i końca, odrzuca puste wpisy, zachowuje najwyżej 32 wyzwalacze i skraca każdy z nich do 64 jednostek kodowych UTF-16 bez rozdzielania par surogatów. Pusty wynik powoduje użycie wbudowanych wartości domyślnych (openclaw, claude, computer).
Routing (od wyzwalacza do celu)
| Metoda | Parametry | Wynik |
|---|---|---|
voicewake.routing.get |
brak | { 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}Każdy target trasy obsługuje dokładnie jedną z następujących wartości:
{ "mode": "current" }{ "agentId": "main" }{ "sessionKey": "agent:main:main" }
Limity: najwyżej 32 trasy, tekst wyzwalacza o długości najwyżej 64 znaków. Wyzwalacze tras są normalizowane na potrzeby dopasowywania i wykrywania duplikatów przez zmianę liter na małe, usuwanie początkowych i końcowych znaków interpunkcyjnych z każdego słowa oraz zwijanie białych znaków ("Hey, Bot!!" i "hey bot" są dopasowywane i uznawane za duplikaty) — jest to bardziej rygorystyczna normalizacja niż samo usuwanie białych znaków z początku i końca, stosowane powyżej dla globalnej listy wyzwalaczy.
Zdarzenia
| Zdarzenie | Ładunek |
|---|---|
voicewake.changed |
{ triggers: string[] } |
voicewake.routing.changed |
{ config: VoiceWakeRoutingConfig } |
Oba są rozsyłane do każdego klienta WebSocket z zakresem odczytu (aplikacji macOS, WebChat i podobnych) oraz do każdego połączonego węzła. Węzeł otrzymuje również oba zdarzenia jako początkową migawkę bezpośrednio po połączeniu.
Zachowanie klientów
- macOS: wywołuje
voicewake.set/voicewake.geti nasłuchujevoicewake.changed, aby zachować synchronizację z innymi klientami. - iOS: wywołuje
voicewake.set/voicewake.geti nasłuchujevoicewake.changed, aby lokalne wykrywanie słów aktywujących reagowało bez opóźnień. - Android: wywołuje
voicewake.set/voicewake.get, nasłuchujevoicewake.changedi po włączeniu ogłaszavoiceWake. Rozpoznawanie odbywa się na urządzeniu i tylko na pierwszym planie; zostaje wstrzymane, gdy Talk, ręczne dyktowanie, nagrywanie notatki głosowej lub odtwarzanie mowy z wiadomości korzysta z dźwięku.