OpenClaw

OpenClaw iMessage (Legacy) 渠道

即时通讯
高级

通过 macOS 上的 imsg CLI 工具将 OpenClaw 连接到 Apple iMessage。此旧版集成使用 JSON-RPC over stdio 接口,通过原生 macOS 信息数据库读取和发送 iMessage。注意:此渠道已弃用——对于新部署,我们强烈建议使用 BlueBubbles,它提供了更强大的基于 REST API 的集成方案,并支持更多功能。

快速信息
难度高级
分类即时通讯
支持功能数2 / 6

iMessage (Legacy) 支持的功能

文本消息

支持

媒体与文件

支持

消息反应

不支持

消息线程

不支持

语音消息

不支持

群聊

不支持

iMessage (Legacy) 前置条件

  • 一台运行 macOS 的 Mac,且已在信息 app 中登录 Apple ID
  • 为 OpenClaw 和 imsg 二进制文件授予"完全磁盘访问权限"
  • 发送消息的自动化权限(通过 macOS TCC 弹窗授予)
  • 通过 Homebrew 安装 imsg CLI:brew install steipete/tap/imsg
  • OpenClaw Gateway 已安装并运行

iMessage (Legacy) 快速设置

1

安装 imsg CLI

运行 'brew install steipete/tap/imsg' 安装 iMessage CLI 工具。安装后,在 GUI 终端中运行一次 'imsg' 以触发 macOS 的权限授权弹窗(完全磁盘访问和自动化权限)。

2

授予 macOS 权限

打开系统设置 > 隐私与安全性。为 imsg 二进制文件和 OpenClaw 进程授予"完全磁盘访问权限"。信息 app 的自动化权限会在 imsg 首次尝试发送消息时自动弹出授权提示。

3

配置并启动

在 ~/.openclaw/openclaw.json 中添加 iMessage 渠道配置,设置 cliPath 和 dbPath。运行 'openclaw start' 启动 Gateway,然后发送一条测试 iMessage 来验证连接。

iMessage (Legacy) 配置示例

config.json
{
  "channels": {
    "imessage": {
      "enabled": true,
      "cliPath": "/opt/homebrew/bin/imsg",
      "dbPath": "/Users/<username>/Library/Messages/chat.db"
    }
  }
}

iMessage (Legacy) 深入了解

弃用说明

iMessage 渠道是一个旧版集成,可能在未来的 OpenClaw 版本中被移除。它依赖第三方 imsg CLI 和 macOS 特有的 TCC 权限系统,在系统更新后可能出现兼容性问题。 对于新部署,我们强烈建议迁移到 BlueBubbles 渠道,它提供: • 基于 REST API 的架构(无 CLI 依赖) • 表情回应支持 • 群聊支持 • 通过 Web 界面进行跨平台服务器管理 • 更可靠的基于 Webhook 的消息投递 现有的 iMessage 配置将继续工作,但此集成不会再添加新功能。
此渠道已弃用。请使用 BlueBubbles 进行新的 iMessage 集成。

架构概述

iMessage 集成通过 JSON-RPC over stdio 方式启动 imsg CLI 子进程来工作: 1. Gateway 启动 'imsg rpc' 作为子进程,通过 stdin/stdout 进行通信。 2. imsg CLI 使用 SQLite 从 macOS 信息数据库(chat.db)读取新消息。 3. 当新消息到达时,imsg 通过 JSON-RPC 通知 Gateway。 4. Gateway 将消息交由 AI 代理处理,并通过 imsg 发送回复,imsg 使用 macOS 自动化功能发送 iMessage。 此架构要求 Gateway 运行在已登录信息 app 的同一台 Mac 上。回复会确定性地路由回 iMessage,每个会话(私聊或群聊)都保持独立的会话隔离。

私聊策略

私聊策略控制机器人如何处理一对一的 iMessage 对话。 **pairing(默认)** — 未知发送者会收到一个配对码,必须确认后机器人才会响应。这可以防止未授权访问。 **allowlist** — 只有 allowFrom 中列出的手机号或 Apple ID 可以与机器人交互。 **open** — 任何 iMessage 发送者都会收到回复。需设置 allowFrom: ["*"] 来启用。 **disabled** — 机器人忽略所有私聊消息。
openclaw.json
{
  "channels": {
    "imessage": {
      "dmPolicy": "pairing",
      "allowFrom": ["+1234567890", "user@icloud.com"]
    }
  }
}

群聊配置

群聊策略控制机器人在 iMessage 群聊中的行为。 **open** — 机器人在被添加到的任何群聊中回复所有消息。 **allowlist** — 机器人仅在配置中明确列出的群组中回复。 **disabled(默认)** — 机器人不在群聊中回复。 启用群聊后,可以配置基于提及的触发机制,使机器人仅在被提及名称时才回复,减少繁忙群组中的干扰。
openclaw.json
{
  "channels": {
    "imessage": {
      "groupPolicy": "allowlist",
      "mentionPattern": "@bot"
    }
  }
}

通过 SSH 远程 Mac 部署

对于无头或远程部署场景,imsg CLI 可以通过 SSH 在另一台 Mac 上运行。Gateway 通过 SSH 连接启动 imsg 进程,附件通过 SCP 传输。 这在运行信息 app 的 Mac 位于不同位置时非常有用(例如 Mac Mini 服务器),而 Gateway 运行在其他地方。 要求: • 基于 SSH 密钥的认证(无交互式提示) • 远程 Mac 必须已安装 imsg 并授予权限 • SCP 必须可用于附件传输
openclaw.json
{
  "channels": {
    "imessage": {
      "remoteHost": "mac-server.local",
      "cliPath": "/usr/local/bin/imsg"
    }
  }
}
使用 SSH 密钥认证以避免交互式密码提示。
Tailscale 等工具可以简化对 Mac 服务器的远程访问。

macOS 权限(TCC)

iMessage 集成需要特定的 macOS 隐私权限(由 TCC 框架管理): **完全磁盘访问** — 读取信息数据库(chat.db)所需。imsg 二进制文件和 OpenClaw 进程都需要此权限。 **自动化** — 通过信息 app 发送消息所需。此权限通常在 imsg 首次尝试发送时通过系统弹窗授予。 如果在无头环境中运行(例如通过 SSH 或 launchd),权限弹窗可能不会出现。此时,需要在交互式 GUI 终端会话中运行一次 'imsg' 来触发弹窗,然后可以恢复无头运行。
macOS 权限弹窗仅在 GUI 会话中出现。请在无头部署前至少以交互方式运行一次 imsg。

iMessage (Legacy) 配置参考

enabled
Type: booleanDefault: true

启用或禁用 iMessage 渠道

cliPath
Type: stringDefault: "/usr/local/bin/imsg"

imsg CLI 二进制文件的路径。Homebrew 在 Apple Silicon Mac 上安装到 /opt/homebrew/bin/imsg,在 Intel Mac 上安装到 /usr/local/bin/imsg

dbPath
Type: stringDefault: "~/Library/Messages/chat.db"

macOS 信息 SQLite 数据库的路径

dmPolicy
Type: stringDefault: "pairing"

私聊访问策略:'pairing'、'allowlist'、'open' 或 'disabled'

groupPolicy
Type: stringDefault: "disabled"

群聊策略:'open'、'allowlist' 或 'disabled'

allowFrom
Type: string[]Default: []

允许联系机器人的手机号或 Apple ID

includeAttachments
Type: booleanDefault: false

是否处理传入消息中的媒体附件

mediaMaxMb
Type: numberDefault: 10

媒体附件的最大文件大小(MB)

textChunkLimit
Type: numberDefault: 4000

每条发送消息的最大字符数

chunkMode
Type: stringDefault: "length"

文本分割模式:'length'(按字符数)或 'newline'(按段落)

historyLimit
Type: numberDefault: 20

作为对话上下文包含的最大历史消息数

configWrites
Type: booleanDefault: true

允许通过 iMessage 使用 /config set|unset 命令

remoteHost
Type: stringDefault: ""

用于在远程 Mac 上运行 imsg 的 SSH 主机名

iMessage (Legacy) 常见问题

iMessage (Legacy) 故障排查

机器人无法收发消息

imsg 二进制文件或 OpenClaw 进程缺少 macOS 权限(完全磁盘访问或自动化)。

打开系统设置 > 隐私与安全性。确认 imsg 和 OpenClaw 都已获得完全磁盘访问权限。在 GUI 终端中运行 'imsg' 以触发缺失的权限弹窗。授权后重启 Gateway。
权限弹窗不出现

进程运行在无头环境中(SSH、launchd),macOS 无法显示 TCC 弹窗。

通过 GUI 会话(屏幕共享或物理访问)登录 Mac。在 Terminal.app 中运行 'imsg' 以触发弹窗。权限授予后可恢复无头运行。
错误:chat.db 未找到或访问被拒绝

dbPath 配置不正确,或未授予完全磁盘访问权限。

确认 dbPath 指向正确的信息数据库(通常为 ~/Library/Messages/chat.db)。在系统设置中确保 OpenClaw 进程已启用完全磁盘访问权限。
远程 SSH 连接失败

未配置 SSH 密钥认证,或远程主机不可达。

确保 Gateway 主机和远程 Mac 之间已设置 SSH 密钥认证。使用 'ssh <remoteHost> imsg --version' 手动测试连接。检查防火墙和网络连通性。