OpenClaw 中文文档 — iMessage 与 Signal 接入

本文覆盖两个定位较为特殊的渠道:iMessage(苹果生态专属)和 Signal(端到端加密、隐私导向)。两者的接入架构与主流渠道有显著差异,值得单独分析。

iMessage

方案选择

OpenClaw 提供两种 iMessage 接入方案:

方案 状态 接入方式 推荐度
BlueBubbles 内置插件,生产就绪 REST API + Webhook 推荐
imsg(旧版) 已弃用 JSON-RPC over stdio 不推荐

新部署应使用 BlueBubbles。以下仅讨论 BlueBubbles 方案。

架构

BlueBubbles 方案的架构分三层:

Messages.app (macOS) ← BlueBubbles 服务端 (REST API) ← OpenClaw Gateway (HTTP + Webhook)

关键约束:iMessage 只能运行在 macOS 上,因此 BlueBubbles 服务端必须部署在 Mac 上。Gateway 可以运行在任何平台,通过网络与 BlueBubbles 通信。

配置流程

第 1 步:在 Mac 上安装 BlueBubbles 服务端,启用 Web API 并设置密码。推荐 macOS Sequoia (15)。

第 2 步:配置 OpenClaw

{
  channels: {
    bluebubbles: {
      enabled: true,
      serverUrl: "http://192.168.1.100:1234",
      password: "your-password",
      webhookPath: "/bluebubbles-webhook",
    },
  },
}

第 3 步:将 BlueBubbles webhook 指向 Gateway

第 4 步:启动 Gateway 并通过配对审批首次私信

安全模型

值得注意的是,BlueBubbles 的 webhook 认证始终是必需的——OpenClaw 在读取请求体之前就验证密码。但 localhost 请求会被信任,这意味着同一主机的反向代理可能无意中绕过密码认证。如果使用反向代理,需要在代理层配置认证并设置 gateway.trustedProxies

功能矩阵

BlueBubbles 的功能覆盖度在 OpenClaw 所有渠道中属于较高水平:

功能 支持状态 备注
编辑消息 macOS 13+ macOS 26 Tahoe 暂不可用
撤回消息 macOS 13+
回复线程 支持 按消息 GUID
消息效果 支持 猛击、大声等
Tapback 回应 支持 需 private API
群组管理 支持 重命名/图标/成员管理
语音备忘录 支持 MP3/CAF 格式
输入指示 支持 自动发送
已读回执 默认启用 可配置
附件 支持 默认上限 8 MB

macOS 虚拟机部署注意事项

在虚拟机或无头环境中,Messages.app 可能进入空闲状态。解决方案是使用 AppleScript + LaunchAgent 定期唤醒:

tell application "Messages"
  if not running then launch
  set _chatCount to (count of chats)
end tell

配合 LaunchAgent 每 300 秒执行一次。

Signal

接入架构

Signal 渠道通过 signal-cli 接入(非嵌入式 libsignal),Gateway 通过 HTTP JSON-RPC + SSE 与 signal-cli 通信。

设置路径

路径 A:QR 关联

signal-cli 关联到现有 Signal 账号:

signal-cli link -n "OpenClaw"

在 Signal 手机端扫码。此方式保留手机端的 Signal 应用。

路径 B:短信注册

适合专用号码场景:

# 安装 signal-cli(Linux 原生构建)
VERSION=$(curl -Ls -o /dev/null -w %{url_effective} https://github.com/AsamK/signal-cli/releases/latest | sed -e 's/^.*\/v//')
curl -L -O "https://github.com/AsamK/signal-cli/releases/download/v${VERSION}/signal-cli-${VERSION}-Linux-native.tar.gz"
sudo tar xf "signal-cli-${VERSION}-Linux-native.tar.gz" -C /opt
sudo ln -sf /opt/signal-cli /usr/local/bin/

# 注册(可能需要验证码)
signal-cli -a +15551234567 register --captcha '<SIGNALCAPTCHA_URL>'
signal-cli -a +15551234567 verify <CODE>

值得注意的是,短信注册可能使该号码的主 Signal 应用会话失效。这是 Signal 协议的设计——同一号码只能有一个主设备。推荐使用专用号码或选择 QR 关联方式。

配置

{
  channels: {
    signal: {
      enabled: true,
      account: "+15551234567",
      cliPath: "signal-cli",
      dmPolicy: "pairing",
      allowFrom: ["+15557654321"],
    },
  },
}

访问控制

私信策略与其他渠道一致。白名单接受 E.164 号码和 uuid:<id> 格式。

群组策略的一个重要差异:Signal 没有原生提及元数据。提及检测完全依赖 mentionPatterns 正则配置。没有配置模式时,群组中的提及门控无法执行。

运行时行为

特性 说明
路由 确定性:回复始终返回 Signal
会话 私信共享主会话;群组按 groupId 隔离
输入指示 通过 signal-cli sendTyping 发送
已读回执 私信可选(sendReadReceipts),群组不支持
表情回应 支持,需要 targetAuthor 用于群组
媒体 附件支持,默认上限 8 MB

外部守护进程模式

如果 signal-cli 启动慢(JVM 冷启动)或需要共享进程,可以单独管理守护进程:

{
  channels: {
    signal: {
      httpUrl: "http://127.0.0.1:8080",
      autoStart: false,
    },
  },
}

安全注意事项

  • signal-cli~/.local/share/signal-cli/data/ 存储账号密钥
  • 保持 signal-cli 更新:上游明确指出旧版本可能因 Signal 服务器 API 变更而失效
  • 迁移服务器前务必备份 Signal 账号状态
  • 维持 dmPolicy: "pairing" 除非有明确需求

架构对比

维度 iMessage (BlueBubbles) Signal
协议 REST API + Webhook JSON-RPC + SSE
平台约束 macOS(BlueBubbles 服务端) 跨平台
加密 iMessage E2EE Signal 协议 E2EE
本地状态 中等(BlueBubbles 管理) 较多(signal-cli 账号数据)
消息功能 丰富(编辑/撤回/效果/群管) 基础 + 表情回应
提及机制 正则检测 正则检测(无原生提及)

从设计角度来看,两个渠道都需要额外的外部依赖(BlueBubbles 服务端 / signal-cli),这增加了部署和维护的复杂度。但对于有特定平台需求(苹果生态或隐私优先)的用户来说,这些是必要的取舍。

本文是渠道篇的第四篇。下一篇覆盖企业平台:飞书、Teams、Google Chat 等。


完整中文文档:OpenClaw 中文文档

GitHub 仓库:openclaw/openclaw

posted @ 2026-03-23 22:09  wakeupxm  阅读(1)  评论(0)    收藏  举报