语音唤醒(全局唤醒词)

OpenClaw 将唤醒词视为一个全局列表,由 Gateway 统一管理。

  • 没有按节点自定义的唤醒词。
  • 任何节点/应用界面都可以编辑这个列表;修改由 Gateway 持久化并广播给所有端。
  • macOS 和 iOS 保留本地的语音唤醒启用/禁用开关(本地 UX 和权限有差异)。
  • Android 目前保持语音唤醒关闭,在 Voice 标签页中使用手动麦克风流程。

存储位置(Gateway 主机)

唤醒词保存在 Gateway 机器上:

  • ~/.openclaw/settings/voicewake.json

数据结构:

{ "triggers": ["openclaw", "claude", "computer"], "updatedAtMs": 1730000000000 }

协议

方法

  • voicewake.get{ triggers: string[] }
  • voicewake.set,参数 { triggers: string[] }{ triggers: string[] }

说明:

  • 触发词会被标准化(去空格、移除空值)。空列表回退到默认值。
  • 出于安全考虑会执行数量/长度限制。

事件

  • voicewake.changed,payload 为 { triggers: string[] }

接收方:

  • 所有 WebSocket 客户端(macOS 应用、WebChat 等)
  • 所有已连接的节点(iOS/Android),节点连接时也会收到初始的”当前状态”推送。

客户端行为

macOS 应用

  • 使用全局列表控制 VoiceWakeRuntime 的触发词。
  • 在语音唤醒设置中编辑”Trigger words”时调用 voicewake.set,然后依靠广播保持其他客户端同步。

iOS 节点

  • 使用全局列表进行 VoiceWakeManager 的触发检测。
  • 在设置中编辑 Wake Words 时通过 Gateway WS 调用 voicewake.set,同时保持本地唤醒词检测的响应性。

Android 节点

  • Android 运行时/设置中语音唤醒目前处于禁用状态。
  • Android 语音使用 Voice 标签页中的手动麦克风录制,而非唤醒词触发。