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

结构如下:

  1. { "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