imessage 外掛支援 iMessage;此外掛會透過 JSON-RPC 驅動 steipete/imsg,並使用與 BlueBubbles 相同的私有 API 介面(react、edit、unsend、reply、sendWithEffect、原生投票、群組管理、附件)。單一命令列介面執行檔取代了 BlueBubbles 伺服器、用戶端應用程式與網路鉤子串接:不再有 REST 端點,也不再有網路鉤子驗證。
本指南將舊的 channels.bluebubbles 設定遷移至 channels.imessage。沒有其他受支援的遷移路徑。在目前的 OpenClaw 中,殘留的 channels.bluebubbles 區塊不會生效,沒有任何執行階段會讀取它。
如需簡短公告與操作人員摘要,請參閱 BlueBubbles 移除與 imsg iMessage 路徑。
遷移檢查清單
若你已熟悉舊的 BlueBubbles 設定,以下是最短且安全的路徑:- 直接在執行 Messages.app 的 Mac 上驗證
imsg(imsg chats、imsg history、imsg send、imsg rpc --help)。 - 將行為設定鍵從
channels.bluebubbles複製至channels.imessage:dmPolicy、allowFrom、groupPolicy、groupAllowFrom、groups、includeAttachments、attachmentRoots、mediaMaxMb、textChunkLimit和actions。 - 移除已不存在的傳輸設定鍵:
serverUrl、password、網路鉤子 URL,以及 BlueBubbles 伺服器設定。 - 如果閘道並非在 Messages Mac 上執行,請將
channels.imessage.cliPath設為 SSH 包裝程式,並設定remoteHost以供遠端擷取附件。 - 啟用
channels.imessage、重新啟動閘道,然後執行openclaw channels status --probe --channel imessage。 - 測試一則私訊、一個允許的群組、附件(若已啟用),以及你預期代理程式使用的每個私有 API 動作。
- 驗證 iMessage 路徑後,刪除 BlueBubbles 伺服器與舊的
channels.bluebubbles設定。
imsg 的功能
imsg 是 Messages 的本機 macOS 命令列介面。OpenClaw 會以子程序啟動 imsg rpc,並透過 stdin/stdout 使用 JSON-RPC 通訊。不需要公開任何 HTTP 伺服器、網路鉤子 URL、背景常駐程式、啟動代理程式或連接埠。
- 透過唯讀 SQLite 控制代碼從
~/Library/Messages/chat.db讀取資料。 - 即時傳入訊息來自
imsg watch/watch.subscribe;它會追蹤chat.db檔案系統事件,並以輪詢作為備援。 - 一般文字與檔案傳送會使用 Messages.app 自動化。
- 進階動作會使用
imsg launch,將imsg輔助程式注入 Messages.app。這會解鎖已讀回條、輸入指示器、豐富內容傳送、編輯、收回、討論串回覆、點按回應、投票與群組管理。 - Linux 組建可以檢查複製的
chat.db,但無法傳送、監看即時 Mac 資料庫,或驅動 Messages.app。若要使用 OpenClaw iMessage,請在已登入的 Mac 上執行imsg,或透過連至該 Mac 的 SSH 包裝程式執行。
開始之前
-
在執行 Messages.app 的 Mac 上安裝
imsg:在一般本機設定中,OpenClaw 設定流程可在已登入 Messages 的 Mac 上,經使用者確認後安裝或更新 Homebrew 的imsg。手動設定與 SSH 包裝程式拓撲仍由操作人員管理:請在將執行imsg的相同本機或遠端使用者情境中,重複執行 Homebrew 更新。如果imsg chats因unable to open database file而失敗、輸出為空,或出現authorization denied,請將「完整磁碟存取權」授予啟動imsg的終端機、編輯器、Node 程序、閘道服務或 SSH 父程序,然後重新開啟該父程序。 -
在變更 OpenClaw 設定之前,驗證讀取、監看、傳送與 RPC 介面:
將
42替換為imsg chats中的真實聊天 ID。傳送需要 Messages.app 的 Automation 權限。如果 OpenClaw 將透過 SSH 執行,請透過 OpenClaw 將使用的相同 SSH 包裝程式或使用者情境執行這些命令。如果讀取正常,但傳送因 AppleEvents-1743而失敗,請檢查 Automation 權限是否已套用至/usr/libexec/sshd-keygen-wrapper;請參閱 SSH 包裝程式傳送因 AppleEvents -1743 而失敗。 -
啟用私有 API 橋接器。強烈建議為 OpenClaw iMessage 啟用此功能,因為回覆、點按回應、效果、投票、附件回覆與群組動作皆依賴此功能:
imsg launch需要停用 SIP(在新版 macOS 上,還需要放寬程式庫驗證限制——請參閱啟用 imsg 私有 API)。基本傳送、歷史記錄與監看功能可在沒有imsg launch的情況下運作;完整的 OpenClaw iMessage 動作介面則無法運作。 -
啟用
channels.imessage並啟動閘道後,透過 OpenClaw 驗證橋接器:iMessage 帳號應回報works;使用--json時,探測承載資料會包含privateApi.available: true。如果回報false,請先修正該問題——請參閱功能偵測。探測需要可連線的閘道(否則命令列介面會退回僅輸出設定),而且只會探測已設定並啟用的帳號。 -
建立設定快照:
設定轉換
iMessage 與 BlueBubbles 共用大多數頻道層級的行為設定鍵。改變的是傳輸方式(REST 伺服器與本機命令列介面之別)以及群組登錄設定鍵格式。
多帳號設定(
channels.bluebubbles.accounts.*)會一對一轉換為 channels.imessage.accounts.*。
群組登錄陷阱
內建 iMessage 外掛會依序執行兩道群組閘門。群組訊息必須同時通過兩者,才能送達代理程式:- 傳送者/聊天目標允許清單(
channels.imessage.groupAllowFrom)——比對傳送者控制代碼或聊天目標(chat_id:、chat_guid:、chat_identifier:項目)。未設定groupAllowFrom時,此閘門會回退至allowFrom;明確設定groupAllowFrom: []會停用該回退機制,並捨棄groupPolicy: "allowlist"下的每一則群組訊息。 - 群組登錄(
channels.imessage.groups)——以數字 iMessagechat_id為索引鍵:- 沒有
groups區塊(或區塊為空):只要閘門 1 的有效傳送者允許清單非空,群組就能通過此閘門;存取權由傳送者篩選控制,且啟動時不會觸發全部捨棄警告。 groups有項目但沒有"*":只有列出的chat_id索引鍵能通過。即使在groupPolicy: "open"下,只要列出任何群組,登錄就會變成允許清單。groups: { "*": { ... } }:所有群組都能通過此閘門。
- 沒有
groups 項目的索引鍵,而 iMessage 登錄則使用數字 chat_id。逐字複製各群組項目會建立非空的登錄,但其中的索引鍵永遠無法比對,因此每一則群組訊息都會在閘門 2 遭到捨棄。請逐字複製 "*" 萬用字元;使用 imsg chats 中的 chat_id 值,重新設定特定群組項目的索引鍵。
兩種捨棄路徑都可透過預設記錄層級的 warn 行查看:
- 每個帳號在啟動時一次:當設定了
groupPolicy: "allowlist",且有效的群組傳送者允許清單為空時:imessage: groupPolicy="allowlist" for account "<id>" but no group sender allowlist is configured ...。設定groupAllowFrom(或allowFrom)以允許傳送者;僅新增groups無法滿足傳送者閘門。 - 執行階段中每個
chat_id一次:當登錄捨棄群組時:imessage: dropping group message from chat_id=<id> ... not in channels.imessage.groups allowlist,其中會指出要新增的確切索引鍵。
groupPolicy: "allowlist"、僅限定傳送者的最小設定:
groups 項目可限定允許的聊天,或設定 requireMention 等各聊天選項;請逐字複製 BlueBubbles 的 "*" 項目,但使用數字 iMessage chat_id 值重新設定特定項目的索引鍵。
逐步操作
-
轉換設定。編輯時請讓新區塊維持停用;目前的 OpenClaw 會忽略舊的
channels.bluebubbles區塊,因此可將其保留在旁作為參考: -
切換並探測。 設定
channels.imessage.enabled: true、重新啟動閘道,並確認頻道回報狀態正常:探測需要可連線的閘道,且只會探測已設定並啟用的帳戶。使用開始之前中的直接imsg命令來驗證 Mac 本身。 - 驗證私訊。 傳送直接訊息給代理程式;確認回覆成功送達。
-
分別驗證群組。 私訊和群組使用不同的程式碼路徑——私訊成功不代表群組路由正常。請在允許的群組聊天中傳送訊息,並確認回覆成功送達。如果群組毫無回應(沒有代理程式回覆,也沒有錯誤),請檢查閘道記錄中是否出現上方「群組登錄陷阱」提到的兩行
warn。啟動警告表示實際生效的傳送者允許清單為空;每個chat_id的警告則表示已有內容的groups登錄中不包含該聊天。 -
驗證動作介面。 從已配對的私訊中,要求代理程式加入回應、編輯、收回、回覆、傳送照片,以及(在群組中)重新命名群組或新增/移除參與者。每項動作都應原生呈現在 Messages.app 中。如果任何動作擲回
iMessage <action> requires the imsg private API bridge,請再次執行imsg launch,並使用openclaw channels status --probe重新整理。 -
移除 BlueBubbles 伺服器和
channels.bluebubbles區塊,但請先確認 iMessage 私訊、群組和動作均已通過驗證。OpenClaw 不會讀取channels.bluebubbles。
動作功能對照一覽
iMessage 會復原閘道停機期間遺漏的訊息:啟動時,它會透過
imsg watch.subscribe since_rowid 從最後派送的 rowid 開始重播、依 GUID 去重,並使用過期待處理訊息的時間限制來抑制 Push 清空造成的「待處理訊息炸彈」。此程序透過 imsg RPC 連線執行,因此也適用於遠端 SSH cliPath 設定;本機設定因為可以讀取 chat.db,所以復原時間範圍較寬。請參閱橋接器或閘道重新啟動後的輸入訊息復原。
配對、工作階段和 ACP 繫結
- 允許清單會依識別代號沿用。
channels.imessage.allowFrom可辨識 BlueBubbles 使用的相同+15555550123/user@example.com字串——請逐字複製。 - 配對儲存區的核准不會轉移。 配對儲存區依頻道區分,且沒有任何機制會遷移舊的 BlueBubbles 儲存區。僅透過配對獲得核准的傳送者,必須在 iMessage 下重新配對一次,否則你需要將他們的識別代號新增至
allowFrom。 - 工作階段仍以每個代理程式 + 聊天為範圍。在預設的
session.dmScope=main下,私訊會合併至代理程式的主要工作階段;群組工作階段則會依各個chat_id(agent:<agentId>:imessage:group:<chat_id>)保持隔離。BlueBubbles 工作階段金鑰下的舊對話記錄不會轉移至 iMessage 工作階段。 - ACP 繫結中引用的
match.channel: "bluebubbles"必須改為"imessage"。match.peer.id格式(chat_id:、chat_guid:、chat_identifier:、單獨的識別代號)完全相同。
沒有復原頻道
沒有受支援的 BlueBubbles 執行階段可供切換回去。如果 iMessage 驗證失敗,請設定channels.imessage.enabled: false、重新啟動閘道、修正 imsg 阻礙,然後重試移轉。
回覆快取位於 SQLite 外掛狀態中。openclaw doctor --fix 會在舊的 imessage/reply-cache.jsonl 輔助檔案存在時匯入並封存它。
相關內容
- 移除 BlueBubbles 與 imsg iMessage 路徑——簡短公告與操作人員摘要。
- iMessage——完整的 iMessage 頻道參考資料,包括
imsg launch設定與功能偵測。 /channels/bluebubbles——重新導向至本移轉指南的舊版 URL。- 配對——私訊驗證與配對流程。
- 頻道路由——閘道如何為輸出回覆選擇頻道。