Voice Wake(全局唤醒词)
OpenClaw 将 wake words 视为由 Gateway 统一管理的一份全局列表。
- 不存在按 node 单独自定义的 wake words
- 任何 node/app UI 都可以编辑这份列表;修改会由 Gateway 持久化保存,并广播给所有端
- macOS 和 iOS 仍然保留本地的 Voice Wake 启用/禁用 开关(因为本地 UX 和权限机制不同)
- Android 当前默认关闭 Voice Wake,改为在 Voice tab 中使用手动麦克风流程
存储位置(Gateway host)
Wake words 存储在 gateway 机器上的:
~/.openclaw/settings/voicewake.json
结构如下:
{ "triggers": ["openclaw", "claude", "computer"], "updatedAtMs": 1730000000000 }
协议
Methods
voicewake.get→{ triggers: string[] }voicewake.set,参数为{ triggers: string[] }→{ triggers: string[] }
说明:
- Triggers 会被规范化处理(去除首尾空格、丢弃空值)
- 如果列表为空,则会回退到默认值
- 出于安全考虑,会施加限制(数量上限 / 长度上限)
Events
voicewake.changed,payload 为{ triggers: string[] }
接收方包括:
- 所有 WebSocket clients(macOS app、WebChat 等)
- 所有已连接的 nodes(iOS/Android),并且在 node 连接时也会收到一次初始“当前状态”推送
客户端行为
macOS app
- 使用全局列表来控制
VoiceWakeRuntime的 trigger 检测 - 在 Voice Wake settings 中编辑 “Trigger words” 时,会调用
voicewake.set,然后依赖广播机制让其他 clients 保持同步
iOS node
- 使用全局列表进行
VoiceWakeManager的 trigger 检测 - 在 Settings 中编辑 Wake Words 时,会调用
voicewake.set(通过 Gateway WS),同时也会保持本地 wake-word detection 的即时响应
Android node
- Android 运行时 / Settings 中当前禁用了 Voice Wake
- Android 语音交互改为在 Voice tab 中使用手动麦克风采集,而不是 wake-word triggers
