mirror of
https://fastgit.cc/github.com/openclaw/openclaw
synced 2026-04-30 22:12:32 +08:00
2.8 KiB
2.8 KiB
summary, read_when, title
| summary | read_when | title | ||
|---|---|---|---|---|
| Global voice wake words (Gateway-owned) and how they sync across nodes |
|
Voice wake |
OpenClaw treats wake words as a single global list owned by the Gateway.
- There are no per-node custom wake words.
- Any node/app UI may edit the list; changes are persisted by the Gateway and broadcast to everyone.
- macOS and iOS keep local Voice Wake enabled/disabled toggles (local UX + permissions differ).
- Android currently keeps Voice Wake off and uses a manual mic flow in the Voice tab.
Storage (Gateway host)
Wake words are stored on the gateway machine at:
~/.openclaw/settings/voicewake.json
Shape:
{ "triggers": ["openclaw", "claude", "computer"], "updatedAtMs": 1730000000000 }
Protocol
Methods
voicewake.get→{ triggers: string[] }voicewake.setwith params{ triggers: string[] }→{ triggers: string[] }
Notes:
- Triggers are normalized (trimmed, empties dropped). Empty lists fall back to defaults.
- Limits are enforced for safety (count/length caps).
Routing methods (trigger → target)
voicewake.routing.get→{ config: VoiceWakeRoutingConfig }voicewake.routing.setwith params{ config: VoiceWakeRoutingConfig }→{ config: VoiceWakeRoutingConfig }
VoiceWakeRoutingConfig shape:
{
"version": 1,
"defaultTarget": { "mode": "current" },
"routes": [{ "trigger": "robot wake", "target": { "sessionKey": "agent:main:main" } }],
"updatedAtMs": 1730000000000
}
Route targets support exactly one of:
{ "mode": "current" }{ "agentId": "main" }{ "sessionKey": "agent:main:main" }
Events
voicewake.changedpayload{ triggers: string[] }voicewake.routing.changedpayload{ config: VoiceWakeRoutingConfig }
Who receives it:
- All WebSocket clients (macOS app, WebChat, etc.)
- All connected nodes (iOS/Android), and also on node connect as an initial “current state” push.
Client behavior
macOS app
- Uses the global list to gate
VoiceWakeRuntimetriggers. - Editing “Trigger words” in Voice Wake settings calls
voicewake.setand then relies on the broadcast to keep other clients in sync.
iOS node
- Uses the global list for
VoiceWakeManagertrigger detection. - Editing Wake Words in Settings calls
voicewake.set(over the Gateway WS) and also keeps local wake-word detection responsive.
Android node
- Voice Wake is currently disabled in Android runtime/Settings.
- Android voice uses manual mic capture in the Voice tab instead of wake-word triggers.