在短信和 iMessage 上使用 OpenClaw 听起来很简单,但实际操作起来却并非如此:短信需要电话号码提供商和入站 Webhook。iMessage 没有官方的公共 API,所以你要么运行一个 Mac 网桥,要么付费使用托管服务来运行它。

本指南涵盖了真正经得起时间考验的配置方案,细节丰富,足以让你在VPS上搭建一个稳定的环境,而无需每天维护。我会尽量做到实用,但也不会否认其中的利弊权衡。

如果您还没有部署 OpenClaw,请先通过 SSH 进行 OpenClaw 入门,以便在添加移动渠道之前拥有一个可用的网关。

OpenClaw 中的“短信和 iMessage 集成”是什么意思?

OpenClaw 使用频道来连接消息平台。Telegram、WhatsApp、Discord、Slack、短信、iMessage:它们都只是频道,具有相同的两项职责。

  • 入站:接收来自用户的消息并将其转换为规范化事件
  • 外发:将客服人员的回复发送回同一对话线程

一旦消息被规范化,OpenClaw 的其他部分就不再关心它的来源。代理程序会获取文本、可选附件、元数据、频道 ID 和对话标识符。内存和状态按频道和对话进行键控,这可以防止短信对话污染 iMessage 群聊,也能防止两者与你的 Discord 实验混淆。

如果你已经运行多个聊天平台,OpenClaw 的多渠道设置就能解释其中的一般规律。短信和 iMessage 也遵循同样的逻辑,只是基础设施更繁琐一些。

在修改配置之前,先确定你的路径。

有两个决定会影响其他一切。

决策1:您需要双向聊天功能还是只需要提醒功能?

仅发送消息要简单得多。例如,技能可以在任务完成、付款失败或服务器宕机时发送短信。双向聊天则意味着需要接收 Webhook、路由、垃圾邮件控制,以及更清晰地了解助手通过电话渠道的权限。

决策 2:谁负责“电话方面”?

对于短信服务,您可以通过 Twilio 等云服务提供商运行手机端,或者将手机变成网关。对于 iMessage,除非您使用托管的 iMessage API 服务,否则几乎总是需要 Mac 网桥。

先选定你想要的。如果你试图“保留多种选择”,最终只会得到一个半成品管道,它既脆弱又难以保障安全。

短信渠道选项 A:使用 Twilio

Twilio 是默认选择,因为它稳定可靠。文档详尽,Webhook 模型易于理解,而且如果出现问题,通常可以在控制台日志中看到。

Twilio 的短信文档在这里:Twilio 短信文档。他们的安全文档也涵盖了 webhook 请求验证,如果您公开了入站端点,则应该实现此功能。

使用 Twilio 你能获得什么

您将获得一个可以收发消息的号码。此外,您还将获得一个来自 Twilio 的 Webhook,用于向您的服务器发送入站消息,以及一个用于发送出站消息的 REST API。

最让人意外的是费用。你需要按条短信付费,有时还要按运营商线路付费。对于少量或中等量的短信来说,这没什么问题,但如果你打算像聊天软件一样整天使用短信,你就会明显感觉到费用上涨了。

OpenClaw 的仅发送短信

这是最简单的设置,也是一个很好的起点。要考虑的是“在重要事情发生时给我发送消息”,而不是“替换我所有的消息传递系统”。

Twilio 至少需要:

  • 账户 SID
  • 身份验证令牌
  • 来自号码或消息服务 SID

一个基本的出站请求如下所示:

curl -X POST "https://api.twilio.com/2010-04-01/Accounts/$TWILIO_ACCOUNT_SID/Messages.json" \
-u "$TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN" \
--data-urlencode "To=+15551234567" \
--data-urlencode "From=+15557654321" \
--data-urlencode "Body=OpenClaw finished the task."

在 OpenClaw 中,这通常以技能的形式实现。如果您想将其编写成一个可重用的、带有环境变量和安全输入处理的简洁技能,OpenClaw 技能指南是合适的参考资料。

使用 Twilio Webhook 的双向短信

双向短信不再仅仅是“发送通知”,而是开始运行真正的沟通渠道。

以下是正常流程:

  • 用户向您的 Twilio 号码发送短信
  • Twilio 会向您的端点发送一个包含发件人、收件人和消息内容的 webhook。
  • 您的处理程序会将消息转发给 OpenClaw 钩子。
  • OpenClaw 生成回复
  • 您的处理程序通过 Twilio 的 REST API 将回复发送回 Twilio。

Twilio 发送的 webhook 有效负载默认采用表单编码。您的处理程序需要将其规范化为 OpenClaw 可以一致处理的格式。

一个简洁的方法是将收到的短信转发到网关,/hooks/agent这样网关就仍然是“来自外部的消息”的唯一控制平面。如果您已经为其他服务提供了接口,请保持相同的身份验证方式和日志记录约定。

此外,未经安全加固,请勿将 OpenClaw 网关直接暴露在互联网上。在启用入站 Webhook 之前,请先将OpenClaw 安全地托管在 VPS 上。

Webhook 处理程序职责

你的 webhook 处理程序需要做的不仅仅是传递文本。

  • 请确认请求确实来自 Twilio。
  • 按发送方号码限制速率
  • 确定“to”在OpenClaw术语中的含义(对话键)
  • 将入站数据转换为钩子调用
  • 通过 Twilio 发送外发回复。

如果忽略签名验证,第一个找到你端点的垃圾邮件发送者就能把它变成一个昂贵的玩具。如果忽略速率限制,一个愤怒的人就能更快地做到同样的事情。

消息长度和输出控制

短信很短。如果您的代理返回 1200 个字符,根据服务提供商和路由的不同,短信可能会被拆分或截断。不要抱有侥幸心理,务必设置输出控制。

常见选项:

  • 限制短信对话的最大回复长度
  • 将冗长的答案总结成简短版本,并附上“回复更多”的提示。
  • 发送指向更长内容的链接,而不是将内容直接发送到短信中。

如果您已经使用 OpenClaw 处理文档任务,那么PDF 摘要和提取指南与短信输出限制非常契合,因为它展示了如何将结果压缩成有用的摘要。

短信通道选项 B:使用 Android 网关

如果觉得 Twilio 价格昂贵,或者您希望消息从您的实际 SIM 卡号码发出,那么基于手机的短信网关是一个切实可行的替代方案。

textbee.dev就是一个例子,它可以将 Android 设备变成短信 API。该设备会使用您的套餐发送短信,并公开一个 HTTP 接口,您可以从服务器调用该接口。

这种方法适用于什么情况?

我喜欢 Android 网关方案,它适用于个人助理和原型开发。但对于业务关键型产品线,则取决于你对手机一些奇怪行为的容忍度,例如电池优化、应用后台限制,或者偶尔在凌晨两点强制更新。

建筑学

  • OpenClaw 在您的服务器上运行
  • Android 设备运行短信网关应用程序
  • 出站消息从 OpenClaw 发送到 Android HTTP API
  • 收到的消息要么直接推送到您的服务器,要么轮询后转发到 OpenClaw 钩子函数中。

同样的安全规则也适用:验证入站事件、限制速率并尽量减少日志记录。短信内容也以一些看似枯燥的方式涉及敏感信息。它包含地址、发票、密码重置链接以及数量惊人的个人数据。

iMessage 选项 A:使用 BlueBubbles

苹果公司没有提供可供 Linux 系统调用的公开 iMessage API。因此,最常见的实际解决方案是使用 macOS 桥接器访问“信息”应用,并公开一个可供集成的 REST 接口。

BlueBubbles 是最容易上手的选择,因为它就是为这个角色而设计的。项目网站:BlueBubbles

BlueBubbles 能给你带来什么

BlueBubbles 运行在已登录 iMessage 的 Mac 上。它提供用于发送消息的 API,并可以发送接收消息的 Webhook,包括群聊标识符和消息元数据。它并不完美,但比自研的 AppleScript 代码要稳定得多。

极简的 BlueBubbles 集成设计

让整合过程保持枯燥乏味:

  • BlueBubbles 会收到来自 macOS Messages 的消息事件。
  • BlueBubbles 会向您的服务器发送一个 webhook。
  • 您的服务器对事件进行规范化处理,并将其转发给 OpenClaw 钩子。
  • OpenClaw 回复包含文本和可选附件引用
  • 您的服务器通过 BlueBubbles API 向其发送出站回复。

关键在于,你应该像对待 Twilio 一样对待 BlueBubbles,将其视为服务提供商。对所有连接进行身份验证,避免直接暴露在公共互联网上。最好使用 VPN 或隧道。Mac 上的“信息”数据库和信息历史记录极其敏感。

通过同一台Mac电脑转发短信

如果在 macOS 上启用短信转发,Mac 可以转发绿色气泡短信和 iMessage 信息。这可以简化您的设置,因为您可以将“移动消息”视为一个桥梁。虽然很方便,但也使风险集中在这台 Mac 上,因此如果可以,最好将这台机器专门用于此桥梁功能。

附件和媒体限制

媒体功能是iMessage设置容易出错的地方。发送图片、语音消息或大型文件的聊天机器人需要严格限制。

  • 在集成层中设置媒体最大尺寸
  • 尽量使用文件链接,而不是推送大型附件。
  • 如果您处理照片,请从图像中删除 EXIF 元数据。

即使 BlueBubbles 支持此功能,也不意味着您的助手可以滥用此功能。手机短信默认是高信任度的,请保持礼貌和简洁。

iMessage选项B:使用imsg CLI

imsg CLI 方法比较老旧,也更需要手动操作。它通常依赖于 macOS 的自动化功能,并需要访问以下位置的 Messages 数据库:

~/Library/Messages/chat.db

这个数据库包含的信息远不止“最近的几条消息”。它基本上记录了你的所有聊天记录,所以 macOS 在这方面的权限设置非常严格。

您必须在 macOS 上进行哪些设置

  • “信息”应用已登录到您要使用的 Apple ID。
  • 读取 chat.db 的进程被授予完全磁盘访问权限
  • 自动化权限允许通过 Messages.app 发送消息
  • Mac 用户会话保持登录状态。

一旦运行正常,它就很好用。问题在于,系统更新、隐私权限重置或数据库架构更改后,它可能会变得不稳定。

远程 MAC 桥接模式

一种常见的设计是在 VPS 上运行 OpenClaw,然后使用 SSH 调用 Mac 上的 imsg。实际上,你需要将 CLI 路径封装在一个脚本中,该脚本通过 SSH 执行远程命令。这样可以保证网关在 Linux 系统上的稳定性,同时将仅限 Apple 设备运行的功能留在 Apple 硬件上。

如果您已经在 systemd 下运行网关,并且希望实现可预测的重启和日志控制,那么您现有的 systemd 配置方式也同样重要。OpenClaw的 systemd 设置指南也适用,因为同样的“运行一个实例,干净地重启”原则可以防止重复消息和奇怪的重放问题。

托管式 iMessage API 服务

托管式 iMessage API 服务之所以存在,是因为很多团队不想维护 Mac 网桥。其理念很简单:他们运行网桥,并公开 Webhook 和 REST 端点。

如果你接受信任模型,这不失为一个合理的选择。消息会经过你无法控制的基础设施。对某些人来说,这是个致命的缺陷。而对另一些人来说,这是在无需时刻维护Mac mini的情况下发布企业级产品线的唯一途径。

如果选择这种方式,请像对待云短信服务提供商一样对待它:验证签名、轮换密钥、尽量减少日志,并且不要将消息正文存储超过所需的时间。

路由和会话身份

我看到的最大实施错误是将“发送者身份”与“对话身份”混淆。短信通常是一对一的,所以人们容易疏忽。而 iMessage 可以是一对一的,也可以是群聊,还可以是参与者不断变化的完整对话。

使用稳定的会话键:

  • 对于短信,发件人号码可以作为您的对话密钥。
  • 对于 iMessage,请使用桥接器中的聊天 GUID 或稳定聊天标识符。

如果您的集成层因为“是同一个 Apple ID”而将所有 iMessage 消息合并到一个线程中,那么您的代理内存很快就会变得毫无用处。

虐待控制和安全边界

一旦你把某个电话号码关联到某个代理,人们就会试探它的安全性。有时是朋友,有时是陌生人(或者心怀不轨的陌生人)。从一开始就要设定界限。

个人助理的白名单模式

如果这适合你,请将你的号码以及一两个信任的联系人加入白名单。以后你可以再放宽限制。一开始就完全开放,只会让你半夜被垃圾邮件吵醒,还要为此支付费用。

速率限制和配额

速率限制应存在于多个层面:

  • 在公共 webhook 边缘(按 IP 地址、按发送者)
  • 在提供商层(尽可能使用 Twilio 设置)
  • 在 OpenClaw hook 入口点(拒绝突发和重复数据)

移动渠道上的快速注射风险

移动即时通讯给人一种随意的感觉,这使其成为快速植入恶意软件的绝佳渠道。如果你的代理启用了相关工具,就要假设有人会尝试“粘贴此命令”之类的诈骗手段。

因此,加强安全防护并非可有可无。

如果您想要一个可靠的基准,请使用OpenClaw 安全最佳实践作为检查清单,并实际实施那些枯燥的部分,例如最小权限用户、限制文件系统访问和严格的 webhook 身份验证。

Webhooks 的可靠性和重试次数

移动渠道理应提供即时响应。但实际上,Webhook 会失败,反向代理会重新加载,证书会过期,服务器会重启。服务提供商会重试,有时甚至会多次重试相同的有效负载。

你的集成层应该是幂等的:如果同一个入站事件到达两次,你应该检测到这一点,并避免发送两次回复。对于短信来说,重复信息很烦人。对于 iMessage 群聊来说,重复信息很快就会变得很尴尬。

如果您需要重试机制、请求检查以及稳定的入站 URL,但又不想直接暴露网关,Webhook 中继可以帮到您。Hookdeck就是一个提供重试和重放工具的例子。

在VPS上运行此程序而不使其变得脆弱

移动渠道受益于始终在线的服务器。笔记本电脑会进入睡眠状态。家庭实验室会断电。虚拟专用服务器(VPS)很无聊,而这正是关键所在。

保持网关稳定,如果需要特殊逻辑,请将 webhook 处理程序单独存放,并谨慎记录日志。消息正文不应该出现在冗长的调试日志中,它们总会在最糟糕的时刻泄露敏感信息。

如果您也在 Discord 或 Slack 上使用 OpenClaw,那么保持配置的简洁性至关重要。如果您需要一个可用的聊天频道集成参考,那么“将 OpenClaw 连接到 Discord”教程是一个不错的起点,因为它能引导您思考频道标识和消息传递的问题。

常见故障模式及其调试方法

收到入站消息,但 OpenClaw 没有响应。

按顺序检查链条:

  • 提供商 webhook 发送日志
  • 您的 webhook 处理程序日志
  • OpenClaw 网关日志

如果处理程序从未调用 OpenClaw,请修复处理程序。如果处理程序调用 OpenClaw 但返回 401 错误,请修复钩子身份验证。如果 OpenClaw 处理了消息但提供程序从未收到出站调用,请修复出站凭据或网络问题。

重复回复

这通常意味着需要重试或运行多个进程。请确保只有一个网关实例。如果您使用 systemd,请避免出于习惯运行第二个手动进程。

iMessage Bridge 工作一天后就停止工作了。

在 macOS 系统中,权限和后台行为是常见的问题根源。系统更新可能会重置隐私权限,睡眠设置也可能中断长时间保持的连接。请将 Mac Bridge 视为一个小型生产服务,而不是一个偶尔关闭的个人桌面。

短信中长回复显示不正常

短信拆分很麻烦。应该设置回复次数上限,并优先发送简短摘要。如果用户想要了解详情,可以提供类似“回复详情”的后续操作,并发送精简的结构化信息。

最后还有一点……

移动即时通讯看似随意,实则是一个高度信任的渠道。务必严格控制权限,保持信息简洁,并避免记录消息内容,除非你愿意为此后悔。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐