Channels 导读

Coming from BlueBubbles:消息从哪扇门跑进来

Coming from BlueBubbles 像一扇接消息的门。你要看清门铃装在哪、钥匙交给谁、什么人能进来,以及门口最容易被绊一跤的是哪块砖。原文最响的一记鼓点,其实是:The bundled i小纸条消息 新本领插件 now reaches the same private 对话接口 surface as BlueBubbles (reac…。

先听这页的人话版

Coming from BlueBubbles

这一页不是在堆术语,它像把“Coming from BlueBubbles”这台小机器搬到桌上,当着你的面拆开给你看。你先不用全记住,先抓住它到底在忙什么:The bundled i小纸条消息 新本领插件 now reaches the same private 对话接口 surface as BlueBubbles (react, edit,…。

如果把这页当成“给普通人看的版本”,你最应该带走的是:它到底在教你一件什么事、什么时候要这样做、以及哪里最容易踩坑。

原始路径:/channels/imessage-from-bluebubbles 章节数量:12 查看原文

第 1 站

Start Here

这一节更像安装或配置步骤,重点不是概念,而是“按什么顺序做才不会卡住”。

这段在解决什么

这一节更像安装或配置步骤,重点不是概念,而是“按什么顺序做才不会卡住”。

为什么值得看

很多文档看起来长,其实是在防你漏掉前置条件。

真要动手时

真正照做时,先找前置条件,再找必填项,最后看验证方法。

先别急着背术语

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The bundled i小纸条消息 新本领插件 now reaches the same private 对话接口 surface as BlueBubbles (react, edit, unsend, reply, sendWith…。

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The bundled i小纸条消息 新本领插件 now reaches the same private 对话接口 surface as BlueBubbles (react, edit, unsend, reply, sendWith…。

原文小纸条

The bundled imessage plugin now reaches the same private API surface as BlueBubbles (react, edit, unsend, reply, sendWithEffect, group management, attachments) by driving steipete/imsg over JSON-RPC. If you already run a Mac with imsg installed, you can drop the BlueBubbles server and let the plugin talk to Messages.app directly.

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:BlueBubbles support was removed. OpenClaw supports i小纸条消息 through imsg only. This guide is for migrating old 消息通道s.blue…。

原文小纸条

BlueBubbles support was removed. OpenClaw supports iMessage through imsg only. This guide is for migrating old channels.bluebubbles configs to channels.imessage; there is no other supported migration path.

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Note。

原文小纸条

Note

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:For the short announcement and operator summary, see BlueBubbles removal and the imsg i小纸条消息 path.

原文小纸条

For the short announcement and operator summary, see BlueBubbles removal and the imsg iMessage path.

第 2 站

Migration checklist

这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。

这段在解决什么

这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。

为什么值得看

这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。

真要动手时

你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。

先别急着背术语

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Use this checklist when you already know your old BlueBubbles 设置说明书 and want the shortest safe path: 1. Verify imsg dir…。

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Use this checklist when you already know your old BlueBubbles 设置说明书 and want the shortest safe path:。

原文小纸条

Use this checklist when you already know your old BlueBubbles config and want the shortest safe path:

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:1. Verify imsg directly on the Mac that runs 小纸条消息s.app (imsg chats, imsg history, imsg send, and imsg rpc --help). 2.…。

原文小纸条

1. Verify imsg directly on the Mac that runs Messages.app (imsg chats, imsg history, imsg send, and imsg rpc --help). 2. Copy behavior keys from channels.bluebubbles to channels.imessage: dmPolicy, allowFrom, groupPolicy, groupAllowFrom, groups, includeAttachments, attachmentRoots, mediaMaxMb, textChunkLimit, coalesceSameSenderDms, and actions. 3. Drop transport keys that no longer exist: serverUrl, password, webhook URLs, and BlueBubbles server setup. 4. If the Gateway is not running on the Messages Mac, set channels.imessage.cliPath to an SSH wrapper and set remoteHost for remote attachment fetches. 5. With the Gateway stopped, enable channels.imessage, then run openclaw channels status --probe --channel imessage. 6. Test one DM, one allowed group, attachments if enabled, and every private API action you expect the agent to use. 7. Delete the BlueBubbles server and old channels.bluebubbles config after the iMessage path is verified.

第 3 站

When this migration makes sense

这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。

这段在解决什么

这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。

为什么值得看

你理解的是能力边界,不只是功能名字。

真要动手时

如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。

先别急着背术语

这一小段像旁白,在提醒我们镜头已经切到下一站。

像准备清单

这一串条目别硬背,把它当成“When this migration makes sense”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:You already run imsg on the same Mac (or…、You want one fewer moving part — no separ…、You are on a supported macOS / imsg build…。

原文小纸条
  • You already run imsg on the same Mac (or one reachable over SSH) where Messages.app is signed in.
  • You want one fewer moving part — no separate BlueBubbles server, no REST endpoint to authenticate, no webhook plumbing. Single CLI binary instead of a server + client app + helper.
  • You are on a supported macOS / imsg build where the private API probe reports available: true.

第 4 站

What imsg does

这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。

这段在解决什么

这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。

为什么值得看

你理解的是能力边界,不只是功能名字。

真要动手时

如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。

先别急着背术语

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:imsg is a local macOS CLI for 小纸条消息s. OpenClaw starts imsg rpc as a child process and talks JSON-RPC over stdin/stdout.…。

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:imsg is a local macOS CLI for 小纸条消息s. OpenClaw starts imsg rpc as a child process and talks JSON-RPC over stdin/stdout.…。

原文小纸条

imsg is a local macOS CLI for Messages. OpenClaw starts imsg rpc as a child process and talks JSON-RPC over stdin/stdout. There is no HTTP server, webhook URL, background daemon, launch agent, or port to expose.

像准备清单

这一串条目别硬背,把它当成“What imsg does”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Reads come from ~/Library/小纸条消息s/chat.db…、Live inbound 小纸条消息s come from imsg watch…、Sends use 小纸条消息s.app 自动小闹钟 for normal tex…、Advanced actions use imsg launch to injec…。

原文小纸条
  • Reads come from ~/Library/Messages/chat.db using a read-only SQLite handle.
  • Live inbound messages come from imsg watch / watch.subscribe, which follows chat.db filesystem events with a polling fallback.
  • Sends use Messages.app automation for normal text and file sends.
  • Advanced actions use imsg launch to inject the imsg helper into Messages.app. That is what unlocks read receipts, typing indicators, rich sends, edit, unsend, threaded reply, tapbacks, and group management.
  • Linux builds can inspect a copied chat.db, but cannot send, watch the live Mac database, or drive Messages.app. For OpenClaw iMessage, run imsg on the signed-in Mac or through an SSH wrapper to that Mac.

第 5 站

Before you start

这一节更像安装或配置步骤,重点不是概念,而是“按什么顺序做才不会卡住”。

这段在解决什么

这一节更像安装或配置步骤,重点不是概念,而是“按什么顺序做才不会卡住”。

为什么值得看

很多文档看起来长,其实是在防你漏掉前置条件。

真要动手时

真正照做时,先找前置条件,再找必填项,最后看验证方法。

先别急着背术语

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:1. Install imsg on the Mac that runs 小纸条消息s.app: If imsg chats fails with unable to open database file, empty output, o…。

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:1. Install imsg on the Mac that runs 小纸条消息s.app:。

原文小纸条

1. Install imsg on the Mac that runs Messages.app:

像讲绘本

这一小段像旁白,在提醒我们镜头已经切到下一站。

原文小纸条

``bash brew install steipete/tap/imsg imsg --version imsg chats --limit 3 ``

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:If imsg chats fails with unable to open database file, empty output, or authorization denied, grant Full Disk Access to…。

原文小纸条

If imsg chats fails with unable to open database file, empty output, or authorization denied, grant Full Disk Access to the terminal, editor, Node process, Gateway service, or SSH parent process that launches imsg, then reopen that parent process.

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:2. Verify the read, watch, send, and RPC surfaces before changing OpenClaw 设置说明书:。

原文小纸条

2. Verify the read, watch, send, and RPC surfaces before changing OpenClaw config:

像讲绘本

这一小段像旁白,在提醒我们镜头已经切到下一站。

原文小纸条

``bash imsg chats --limit 10 --json | jq -s imsg history --chat-id 42 --limit 10 --attachments --json | jq -s imsg watch --chat-id 42 --reactions --json imsg send --chat-id 42 --text "OpenClaw imsg test" imsg rpc --help ``

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Replace 42 with a real chat id from imsg chats. Sending requires 自动小闹钟 permission for 小纸条消息s.app. If OpenClaw will run…。

原文小纸条

Replace 42 with a real chat id from imsg chats. Sending requires Automation permission for Messages.app. If OpenClaw will run through SSH, run these commands through the same SSH wrapper or user context that OpenClaw will use.

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:3. Enable the private 对话接口 bridge when you need advanced actions:。

原文小纸条

3. Enable the private API bridge when you need advanced actions:

像讲绘本

这一小段像旁白,在提醒我们镜头已经切到下一站。

原文小纸条

``bash imsg launch imsg status --json ``

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:imsg launch requires SIP to be disabled. Basic send, history, and watch work without imsg launch; advanced actions do n…。

原文小纸条

imsg launch requires SIP to be disabled. Basic send, history, and watch work without imsg launch; advanced actions do not.

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:4. After you add an enabled 消息通道s.i小纸条消息 设置说明书, verify the bridge through OpenClaw:。

原文小纸条

4. After you add an enabled channels.imessage config, verify the bridge through OpenClaw:

像讲绘本

这一小段像旁白,在提醒我们镜头已经切到下一站。

原文小纸条

``bash openclaw channels status --probe ``

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:You want i小纸条消息.private对话接口.available: true. If it reports false, fix that first — see Capability detection. 消息通道s stat…。

原文小纸条

You want imessage.privateApi.available: true. If it reports false, fix that first — see Capability detection. channels status --probe only probes configured, enabled accounts.

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:5. Snapshot your 设置说明书:。

原文小纸条

5. Snapshot your config:

像讲绘本

这一小段像旁白,在提醒我们镜头已经切到下一站。

原文小纸条

``bash cp ~/.openclaw/openclaw.json5 ~/.openclaw/openclaw.json5.bak ``

第 6 站

设置说明书 translation

这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。

这段在解决什么

这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。

为什么值得看

这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。

真要动手时

你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。

先别急着背术语

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:i小纸条消息 and BlueBubbles share a lot of 消息通道-level 设置说明书. The keys that change are mostly transport (REST 大房子服务器 vs local…。

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:i小纸条消息 and BlueBubbles share a lot of 消息通道-level 设置说明书. The keys that change are mostly transport (REST 大房子服务器 vs local…。

原文小纸条

iMessage and BlueBubbles share a lot of channel-level config. The keys that change are mostly transport (REST server vs local CLI). Behavior keys (dmPolicy, groupPolicy, allowFrom, etc.) keep the same meaning.

像整理表格

这段是在把几种选项排成表格,左边像标签,右边像说明。手机上可以横向滑动原文表格。

原文表格
BlueBubblesbundled iMessageNotes
channels.bluebubbles.enabledchannels.imessage.enabledSame semantics.
channels.bluebubbles.serverUrl_(removed)_No REST server — the plugin spawns imsg rpc over stdio.
channels.bluebubbles.password_(removed)_No webhook authentication needed.
_(implicit)_channels.imessage.cliPathPath to imsg (default imsg); use a wrapper script for SSH.
_(implicit)_channels.imessage.dbPathOptional Messages.app chat.db override; auto-detected when omitted.
_(implicit)_channels.imessage.remoteHosthost or user@host — only needed when cliPath is an SSH wrapper and you want SCP attachment fetches.
channels.bluebubbles.dmPolicychannels.imessage.dmPolicySame values (pairing / allowlist / open / disabled).
channels.bluebubbles.allowFromchannels.imessage.allowFromPairing approvals carry over by handle, not by token.
channels.bluebubbles.groupPolicychannels.imessage.groupPolicySame values (allowlist / open / disabled).
channels.bluebubbles.groupAllowFromchannels.imessage.groupAllowFromSame.
channels.bluebubbles.groupschannels.imessage.groups**Copy this verbatim, including any groups: { "*": { ... } } wildcard entry.** Per-group requireMention, tools, toolsBySender carry over. With groupPolicy: "allowlist", an empty or missing groups block silently drops every group message — see "Group registry footgun" below.
channels.bluebubbles.sendReadReceiptschannels.imessage.sendReadReceiptsDefault true. With the bundled plugin this only fires when the private API probe is up.
channels.bluebubbles.includeAttachmentschannels.imessage.includeAttachmentsSame shape, **same off-by-default**. If you had attachments flowing on BlueBubbles you must re-set this explicitly on the iMessage block — it does not carry over implicitly, and inbound photos/media will be silently dropped with no Inbound message log line until you do.
channels.bluebubbles.attachmentRootschannels.imessage.attachmentRootsLocal roots; same wildcard rules.
_(N/A)_channels.imessage.remoteAttachmentRootsOnly used when remoteHost is set for SCP fetches.
channels.bluebubbles.mediaMaxMbchannels.imessage.mediaMaxMbDefault 16 MB on iMessage (BlueBubbles default was 8 MB). Set explicitly if you want to keep the lower cap.
channels.bluebubbles.textChunkLimitchannels.imessage.textChunkLimitDefault 4000 on both.
channels.bluebubbles.coalesceSameSenderDmschannels.imessage.coalesceSameSenderDmsSame opt-in. DM-only — group chats keep instant per-message dispatch on both channels. Widens the default inbound debounce to 2500 ms when enabled without an explicit messages.inbound.byChannel.imessage. See iMessage docs § Coalescing split-send DMs.
channels.bluebubbles.enrichGroupParticipantsFromContacts_(N/A)_iMessage already reads sender display names from chat.db.
channels.bluebubbles.actions.*channels.imessage.actions.*Per-action toggles: reactions, edit, unsend, reply, sendWithEffect, renameGroup, setGroupIcon, addParticipant, removeParticipant, leaveGroup, sendAttachment.
像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Multi-account 设置说明书s (消息通道s.bluebubbles.accounts.*) translate one-to-one to 消息通道s.i小纸条消息.accounts.*.

原文小纸条

Multi-account configs (channels.bluebubbles.accounts.*) translate one-to-one to channels.imessage.accounts.*.

第 7 站

大家一起的房间 registry footgun

这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。

这段在解决什么

这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。

为什么值得看

这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。

真要动手时

你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。

先别急着背术语

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The bundled i小纸条消息 新本领插件 runs **two** separate 大家一起的房间 allowlist gates back-to-back. Both must pass for a 大家一起的房间 小纸条消息…。

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The bundled i小纸条消息 新本领插件 runs **two** separate 大家一起的房间 allowlist gates back-to-back. Both must pass for a 大家一起的房间 小纸条消息…。

原文小纸条

The bundled iMessage plugin runs **two** separate group allowlist gates back-to-back. Both must pass for a group message to reach the agent:

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:1. **Sender / chat-target allowlist** (消息通道s.i小纸条消息.大家一起的房间AllowFrom) — checked by isAllowedI小纸条消息Sender. Matches inbou…。

原文小纸条

1. **Sender / chat-target allowlist** (channels.imessage.groupAllowFrom) — checked by isAllowedIMessageSender. Matches inbound messages by sender handle, chat_guid, chat_identifier, or chat_id. Same shape as BlueBubbles. 2. **Group registry** (channels.imessage.groups) — checked by resolveChannelGroupPolicy from inbound-processing.ts:199. With groupPolicy: "allowlist", this gate requires either:

像准备清单

这一串条目别硬背,把它当成“Group registry footgun”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:a 大家一起的房间s: { "*": { ... } } wildcard ent…、an explicit per-chat_id entry under 大家一起的…。

原文小纸条
  • a groups: { "*": { ... } } wildcard entry (sets allowAll = true), or
  • an explicit per-chat_id entry under groups.
像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:If gate 1 passes but gate 2 fails, the 小纸条消息 is dropped. The 新本领插件 emits two warn-level signals so this is no longer si…。

原文小纸条

If gate 1 passes but gate 2 fails, the message is dropped. The plugin emits two warn-level signals so this is no longer silent at default log level:

像准备清单

这一串条目别硬背,把它当成“Group registry footgun”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:A one-time startup warn per account when…、A one-time per-chat_id warn the first tim…。

原文小纸条
  • A one-time startup warn per account when groupPolicy: "allowlist" is set but channels.imessage.groups is empty (no "*" wildcard, no per-chat_id entries) — fired before any messages land.
  • A one-time per-chat_id warn the first time a specific group is dropped at runtime, naming the chat_id and the exact key to add to groups to allow it.
像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:DMs continue to work because they take a different code path.

原文小纸条

DMs continue to work because they take a different code path.

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:This is the most common BlueBubbles → bundled-i小纸条消息 migration failure mode: operators copy 大家一起的房间AllowFrom and 大家一起的房…。

原文小纸条

This is the most common BlueBubbles → bundled-iMessage migration failure mode: operators copy groupAllowFrom and groupPolicy but skip the groups block, because BlueBubbles' groups: { "*": { "requireMention": true } } looks like an unrelated mention setting. It's actually load-bearing for the registry gate.

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The minimum 设置说明书 to keep 大家一起的房间 小纸条消息s flowing after 大家一起的房间Policy: "allowlist":。

原文小纸条

The minimum config to keep group messages flowing after groupPolicy: "allowlist":

像魔法口令拆解

这段不是对白,而是一叠设置卡片,像在给系统贴门牌、路线和规矩。

  • 大括号像两只手把同一组设置拢住,意思是“这些东西算一伙”。
  • 这里在给“channels”挂牌子,告诉系统它该指向“{”。
  • 这里在给“imessage”挂牌子,告诉系统它该指向“{”。
原文代码块
{
  channels: {
    imessage: {
      groupPolicy: "allowlist",
      groupAllowFrom: ["+15555550123", "chat_guid:any;-;..."],
      groups: {
        "*": { requireMention: true },
      },
    },
  },
}
像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:requireMention: true under * is harmless when no mention patterns are 设置说明书ured: the runtime sets canDetectMention = fa…。

原文小纸条

requireMention: true under * is harmless when no mention patterns are configured: the runtime sets canDetectMention = false and short-circuits the mention drop at inbound-processing.ts:512. With mention patterns configured (agents.list[].groupChat.mentionPatterns), it works as expected.

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:If the 门口的小门卫 logs i小纸条消息: dropping 大家一起的房间 小纸条消息 from chat_id=<id> or the startup line i小纸条消息: 大家一起的房间Policy="allowlis…。

原文小纸条

If the gateway logs imessage: dropping group message from chat_id=<id> or the startup line imessage: groupPolicy="allowlist" but channels.imessage.groups is empty, gate 2 is dropping — add the groups block.

第 8 站

Step-by-step

这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。

这段在解决什么

这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。

为什么值得看

这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。

真要动手时

你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。

先别急着背术语

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:1. Add an i小纸条消息 block alongside the existing BlueBubbles block. Keep it disabled while the 门口的小门卫 is still routing Blu…。

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:1. Add an i小纸条消息 block alongside the existing BlueBubbles block. Keep it disabled while the 门口的小门卫 is still routing Blu…。

原文小纸条

1. Add an iMessage block alongside the existing BlueBubbles block. Keep it disabled while the Gateway is still routing BlueBubbles traffic:

像讲绘本

这一小段像旁白,在提醒我们镜头已经切到下一站。

原文小纸条

``json5 { channels: { bluebubbles: { enabled: true, // ... existing config ... }, imessage: { enabled: false, cliPath: "/opt/homebrew/bin/imsg", dmPolicy: "pairing", allowFrom: ["+15555550123"], // copy from bluebubbles.allowFrom groupPolicy: "allowlist", groupAllowFrom: [], // copy from bluebubbles.groupAllowFrom groups: { "*": { requireMention: true } }, // copy from bluebubbles.groups — silently drops groups if missing, see "Group registry footgun" above actions: { reactions: true, edit: true, unsend: true, reply: true, sendWithEffect: true, sendAttachment: true, }, }, }, } ``

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:2. **Probe before traffic matters** — stop the 门口的小门卫, temporarily enable the i小纸条消息 block, and confirm i小纸条消息 reports…。

原文小纸条

2. **Probe before traffic matters** — stop the Gateway, temporarily enable the iMessage block, and confirm iMessage reports healthy from the CLI:

像讲绘本

这一小段像旁白,在提醒我们镜头已经切到下一站。

原文小纸条

``bash openclaw gateway stop # edit config: channels.imessage.enabled = true openclaw channels status --probe --channel imessage # expect imessage.privateApi.available: true ``

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:消息通道s status --probe only probes 设置说明书ured, enabled accounts. Do not restart the 门口的小门卫 with both BlueBubbles and i小纸条消…。

原文小纸条

channels status --probe only probes configured, enabled accounts. Do not restart the Gateway with both BlueBubbles and iMessage enabled unless you intentionally want both channel monitors running. If you are not cutting over immediately, set channels.imessage.enabled back to false before restarting the Gateway. Use the direct imsg commands in Before you start to validate the Mac before enabling OpenClaw traffic.

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:3. **Cut over.** Once the enabled i小纸条消息 account reports healthy, remove the BlueBubbles 设置说明书 and keep i小纸条消息 enabled:。

原文小纸条

3. **Cut over.** Once the enabled iMessage account reports healthy, remove the BlueBubbles config and keep iMessage enabled:

像讲绘本

这一小段像旁白,在提醒我们镜头已经切到下一站。

原文小纸条

``json5 { channels: { imessage: { enabled: true /* ... */ }, }, } ``

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Restart the 门口的小门卫. Inbound i小纸条消息 traffic now flows through the bundled 新本领插件.

原文小纸条

Restart the gateway. Inbound iMessage traffic now flows through the bundled plugin.

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:4. **Verify DMs.** Send the 机器人朋友 a direct 小纸条消息; confirm the reply lands.

原文小纸条

4. **Verify DMs.** Send the agent a direct message; confirm the reply lands.

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:5. **Verify 大家一起的房间s separately.** DMs and 大家一起的房间s take different code paths — DM success does not prove 大家一起的房间s are…。

原文小纸条

5. **Verify groups separately.** DMs and groups take different code paths — DM success does not prove groups are routing. Send the agent a message in a paired group chat and confirm the reply lands. If the group goes silent (no agent reply, no error), check the gateway log for imessage: dropping group message from chat_id=<id> or the startup imessage: groupPolicy="allowlist" but channels.imessage.groups is empty line — both fire at the default log level. If either appears, your groups block is missing or empty — see "Group registry footgun" above.

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:6. **Verify the action surface** — from a paired DM, ask the 机器人朋友 to react, edit, unsend, reply, send a photo, and (in…。

原文小纸条

6. **Verify the action surface** — from a paired DM, ask the agent to react, edit, unsend, reply, send a photo, and (in a group) rename the group / add or remove a participant. Each action should land natively in Messages.app. If any throws "iMessage <action> requires the imsg private API bridge", run imsg launch again and refresh channels status --probe.

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:7. **Remove the BlueBubbles 大房子服务器 and 设置说明书** once i小纸条消息 DMs, 大家一起的房间s, and actions are verified. OpenClaw will not u…。

原文小纸条

7. **Remove the BlueBubbles server and config** once iMessage DMs, groups, and actions are verified. OpenClaw will not use channels.bluebubbles.

第 9 站

Action parity at a glance

这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。

这段在解决什么

这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。

为什么值得看

这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。

真要动手时

你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。

先别急着背术语

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:i小纸条消息 catchup is now available as an opt-in feature on the bundled 新本领插件. On 门口的小门卫 startup, if 消息通道s.i小纸条消息.catchup.e…。

像整理表格

这段是在把几种选项排成表格,左边像标签,右边像说明。手机上可以横向滑动原文表格。

原文表格
Actionlegacy BlueBubblesbundled iMessage
Send text / SMS fallback
Send media (photo, video, file, voice)
Threaded reply (reply_to_guid)✅ (closes #51892)
Tapback (react)
Edit / unsend (macOS 13+ recipients)
Send with screen effect✅ (closes part of #9394)
Rich text bold / italic / underline / strikethrough✅ (typed-run formatting via attributedBody)
Rename group / set group icon
Add / remove participant, leave group
Read receipts and typing indicator✅ (gated on private API probe)
Same-sender DM coalescing✅ (DM-only; opt-in via channels.imessage.coalesceSameSenderDms)
Catchup of inbound messages received while gateway is down✅ (webhook replay + history fetch)✅ (opt-in via channels.imessage.catchup.enabled; closes #78649)
像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:i小纸条消息 catchup is now available as an opt-in feature on the bundled 新本领插件. On 门口的小门卫 startup, if 消息通道s.i小纸条消息.catchup.e…。

原文小纸条

iMessage catchup is now available as an opt-in feature on the bundled plugin. On gateway startup, if channels.imessage.catchup.enabled is true, the gateway runs one chats.list + per-chat messages.history pass against the same JSON-RPC client used by imsg watch, replays each missed inbound row through the live dispatch path (allowlists, group policy, debouncer, echo cache), and persists a per-account cursor so subsequent startups pick up where they left off. See Catching up after gateway downtime for tuning.

第 10 站

Pairing, sessions, and ACP bindings

这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。

这段在解决什么

这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。

为什么值得看

这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。

真要动手时

你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。

先别急着背术语

这一小段像旁白,在提醒我们镜头已经切到下一站。

像准备清单

这一串条目别硬背,把它当成“Pairing, sessions, and ACP bindings”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:**Pairing approvals** carry over by handl…、**Sessions** stay scoped per 机器人朋友 + chat…、**ACP bindings** referencing match.消息通道:…。

原文小纸条
  • **Pairing approvals** carry over by handle. You do not need to re-approve known senders — channels.imessage.allowFrom recognizes the same +15555550123 / user@example.com strings BlueBubbles used.
  • **Sessions** stay scoped per agent + chat. DMs collapse into the agent main session under default session.dmScope=main; group sessions stay isolated per chat_id. The session keys differ (agent:<id>:imessage:group:<chat_id> vs the BlueBubbles equivalent) — old conversation history under BlueBubbles session keys does not carry into iMessage sessions.
  • **ACP bindings** referencing match.channel: "bluebubbles" need to be updated to "imessage". The match.peer.id shapes (chat_id:, chat_guid:, chat_identifier:, bare handle) are identical.

第 11 站

No rollback 消息通道

这一节更像安装或配置步骤,重点不是概念,而是“按什么顺序做才不会卡住”。

这段在解决什么

这一节更像安装或配置步骤,重点不是概念,而是“按什么顺序做才不会卡住”。

为什么值得看

很多文档看起来长,其实是在防你漏掉前置条件。

真要动手时

真正照做时,先找前置条件,再找必填项,最后看验证方法。

先别急着背术语

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:There is no supported BlueBubbles runtime to switch back to. If i小纸条消息 verification fails, set 消息通道s.i小纸条消息.enabled: fa…。

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:There is no supported BlueBubbles runtime to switch back to. If i小纸条消息 verification fails, set 消息通道s.i小纸条消息.enabled: fa…。

原文小纸条

There is no supported BlueBubbles runtime to switch back to. If iMessage verification fails, set channels.imessage.enabled: false, restart the Gateway, fix the imsg blocker, and retry the cutover.

像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The reply cache lives at ~/.openclaw/state/i小纸条消息/reply-cache.jsonl (mode 0600, parent dir 0700). It is safe to delete…。

原文小纸条

The reply cache lives at ~/.openclaw/state/imessage/reply-cache.jsonl (mode 0600, parent dir 0700). It is safe to delete if you want a clean slate.

第 12 站

Related

这一节更像安装或配置步骤,重点不是概念,而是“按什么顺序做才不会卡住”。

这段在解决什么

这一节更像安装或配置步骤,重点不是概念,而是“按什么顺序做才不会卡住”。

为什么值得看

很多文档看起来长,其实是在防你漏掉前置条件。

真要动手时

真正照做时,先找前置条件,再找必填项,最后看验证方法。

先别急着背术语

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:---。

像准备清单

这一串条目别硬背,把它当成“Related”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:BlueBubbles removal and the imsg i小纸条消息 p…、i小纸条消息 — full i小纸条消息 消息通道 reference, incl…、/消息通道s/bluebubbles — legacy URL that redi…、Pairing — DM authentication and pairing f…。

原文小纸条
  • BlueBubbles removal and the imsg iMessage path — short announcement and operator summary.
  • iMessage — full iMessage channel reference, including imsg launch setup and capability detection.
  • /channels/bluebubbles — legacy URL that redirects to this migration guide.
  • Pairing — DM authentication and pairing flow.
  • Channel Routing — how the gateway picks a channel for outbound replies.
像讲绘本

如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:---。

原文小纸条

---

AdSense 连接验证已经放在页面头部;广告单元等站点审批通过后再启用。

google-adsense-account: ca-pub-3833673520933536