语音唤醒
OpenClaw 将唤醒词视为由 Gateway(网关) 拥有的单一全局列表。
- 不存在针对特定节点的自定义唤醒词。
- 任何节点/应用 UI 都可以编辑该列表;更改由 Gateway(网关) 持久化并广播给所有人。
- macOS 和 iOS 保留本地的语音唤醒启用/禁用开关(本地 UX 和权限不同)。
- Android 目前保持语音唤醒关闭,并在语音标签中使用手动麦克风流程。
存储(Gateway(网关) 主机)
Section titled “存储(Gateway(网关) 主机)”唤醒词存储在网关机器上的:
~/.openclaw/settings/voicewake.json
结构:
{ "triggers": ["openclaw", "claude", "computer"], "updatedAtMs": 1730000000000 }voicewake.get→{ triggers: string[] }voicewake.set带参数{ triggers: string[] }→{ triggers: string[] }
注意:
- 触发器会被规范化(去除首尾空格,丢弃空值)。空列表将回退到默认值。
- 为了安全起见,会执行限制(计数/长度上限)。
路由方法(触发器 → 目标)
Section titled “路由方法(触发器 → 目标)”voicewake.routing.get→{ config: VoiceWakeRoutingConfig }voicewake.routing.set带参数{ config: VoiceWakeRoutingConfig }→{ config: VoiceWakeRoutingConfig }
VoiceWakeRoutingConfig 结构:
{ "version": 1, "defaultTarget": { "mode": "current" }, "routes": [{ "trigger": "robot wake", "target": { "sessionKey": "agent:main:main" } }], "updatedAtMs": 1730000000000}路由目标仅支持以下之一:
{ "mode": "current" }{ "agentId": "main" }{ "sessionKey": "agent:main:main" }
voicewake.changed载荷{ triggers: string[] }voicewake.routing.changed载荷{ config: VoiceWakeRoutingConfig }
接收方:
- 所有 WebSocket 客户端(macOS 应用、WebChat 等)
- 所有连接的节点(iOS/Android),以及节点连接时作为初始“当前状态”推送。
macOS 应用
Section titled “macOS 应用”- 使用全局列表来过滤
VoiceWakeRuntime触发器。 - 在“语音唤醒”设置中编辑“触发词”会调用
voicewake.set,然后依赖广播来使其他客户端保持同步。
iOS 节点
Section titled “iOS 节点”- 使用全局列表进行
VoiceWakeManager触发器检测。 - 在设置中编辑唤醒词会调用
voicewake.set(通过 Gateway(网关) WS),同时保持本地唤醒词检测的响应性。
Android 节点
Section titled “Android 节点”- 语音唤醒目前在 Android 运行时/设置中已禁用。
- Android 语音使用语音选项卡中的手动麦克风捕获,而不是唤醒词触发器。