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

浙公网安备 33010602011771号