PluginDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
imessage đi kèm hiện truy cập cùng bề mặt API riêng tư như BlueBubbles (react, edit, unsend, reply, sendWithEffect, quản lý nhóm, tệp đính kèm) bằng cách điều khiển steipete/imsg qua JSON-RPC. Nếu bạn đã chạy một máy Mac có cài imsg, bạn có thể bỏ máy chủ BlueBubbles và để Plugin giao tiếp trực tiếp với Messages.app.
Hỗ trợ BlueBubbles đã bị gỡ bỏ. OpenClaw chỉ hỗ trợ iMessage thông qua imsg. Hướng dẫn này dành cho việc di chuyển cấu hình channels.bluebubbles cũ sang channels.imessage; không có đường dẫn di chuyển nào khác được hỗ trợ.
Khi việc di chuyển này phù hợp
- Bạn đã chạy
imsgtrên cùng máy Mac (hoặc một máy có thể truy cập qua SSH) nơi Messages.app đã đăng nhập. - Bạn muốn giảm một thành phần vận hành — không có máy chủ BlueBubbles riêng, không có endpoint REST để xác thực, không có phần nối Webhook. Một tệp nhị phân CLI duy nhất thay vì máy chủ + ứng dụng khách + trình trợ giúp.
- Bạn đang dùng bản dựng macOS /
imsgđược hỗ trợ, nơi phép thăm dò API riêng tư báo cáoavailable: true.
imsg làm gì
imsg là một CLI macOS cục bộ cho Messages. OpenClaw khởi động imsg rpc như một tiến trình con và giao tiếp JSON-RPC qua stdin/stdout. Không có máy chủ HTTP, URL Webhook, daemon nền, launch agent, hoặc cổng nào cần mở.
- Dữ liệu đọc đến từ
~/Library/Messages/chat.dbbằng một handle SQLite chỉ đọc. - Tin nhắn đến trực tiếp đến từ
imsg watch/watch.subscribe, theo dõi các sự kiện hệ thống tệp củachat.dbvới cơ chế dự phòng bằng polling. - Gửi dùng tự động hóa Messages.app cho văn bản thông thường và gửi tệp.
- Các hành động nâng cao dùng
imsg launchđể tiêm trình trợ giúpimsgvào Messages.app. Đây là cơ chế mở khóa biên nhận đã đọc, chỉ báo đang nhập, gửi nội dung phong phú, chỉnh sửa, thu hồi, trả lời theo luồng, tapback, và quản lý nhóm. - Các bản dựng Linux có thể kiểm tra một bản sao
chat.db, nhưng không thể gửi, theo dõi cơ sở dữ liệu Mac trực tiếp, hoặc điều khiển Messages.app. Với OpenClaw iMessage, hãy chạyimsgtrên máy Mac đã đăng nhập hoặc thông qua một wrapper SSH đến máy Mac đó.
Trước khi bắt đầu
-
Cài đặt
imsgtrên máy Mac chạy Messages.app:Nếuimsg chatsthất bại vớiunable to open database file, đầu ra rỗng, hoặcauthorization denied, hãy cấp quyền Truy cập toàn bộ ổ đĩa cho terminal, trình soạn thảo, tiến trình Node, dịch vụ Gateway, hoặc tiến trình cha SSH khởi chạyimsg, rồi mở lại tiến trình cha đó. -
Xác minh các bề mặt đọc, theo dõi, gửi, và RPC trước khi thay đổi cấu hình OpenClaw:
Thay
42bằng một chat id thật từimsg chats. Việc gửi yêu cầu quyền Tự động hóa cho Messages.app. Nếu OpenClaw sẽ chạy qua SSH, hãy chạy các lệnh này thông qua cùng wrapper SSH hoặc ngữ cảnh người dùng mà OpenClaw sẽ dùng. -
Bật cầu nối API riêng tư khi bạn cần các hành động nâng cao:
imsg launchyêu cầu tắt SIP. Gửi cơ bản, lịch sử, và theo dõi hoạt động mà không cầnimsg launch; các hành động nâng cao thì không. -
Xác minh cầu nối thông qua OpenClaw:
Bạn cần
imessage.privateApi.available: true. Nếu nó báo cáofalse, hãy sửa điều đó trước — xem Phát hiện khả năng. -
Chụp nhanh cấu hình của bạn:
Dịch cấu hình
iMessage và BlueBubbles chia sẻ nhiều cấu hình cấp kênh. Các khóa thay đổi chủ yếu là phần truyền tải (máy chủ REST so với CLI cục bộ). Các khóa hành vi (dmPolicy, groupPolicy, allowFrom, v.v.) giữ nguyên ý nghĩa.
| BlueBubbles | iMessage tích hợp sẵn | Ghi chú |
|---|---|---|
channels.bluebubbles.enabled | channels.imessage.enabled | Cùng ngữ nghĩa. |
channels.bluebubbles.serverUrl | (đã xóa) | Không có máy chủ REST — plugin khởi chạy imsg rpc qua stdio. |
channels.bluebubbles.password | (đã xóa) | Không cần xác thực Webhook. |
| (ngầm định) | channels.imessage.cliPath | Đường dẫn đến imsg (mặc định imsg); dùng tập lệnh bọc cho SSH. |
| (ngầm định) | channels.imessage.dbPath | Ghi đè chat.db của Messages.app tùy chọn; tự phát hiện khi bỏ qua. |
| (ngầm định) | channels.imessage.remoteHost | host hoặc user@host — chỉ cần khi cliPath là một tập lệnh bọc SSH và bạn muốn tải tệp đính kèm bằng SCP. |
channels.bluebubbles.dmPolicy | channels.imessage.dmPolicy | Cùng các giá trị (pairing / allowlist / open / disabled). |
channels.bluebubbles.allowFrom | channels.imessage.allowFrom | Phê duyệt ghép cặp được chuyển tiếp theo handle, không theo token. |
channels.bluebubbles.groupPolicy | channels.imessage.groupPolicy | Cùng các giá trị (allowlist / open / disabled). |
channels.bluebubbles.groupAllowFrom | channels.imessage.groupAllowFrom | Giống nhau. |
channels.bluebubbles.groups | channels.imessage.groups | Sao chép nguyên văn mục này, bao gồm mọi mục ký tự đại diện groups: { "*": { ... } }. requireMention, tools, toolsBySender theo từng nhóm được chuyển tiếp. Với groupPolicy: "allowlist", khối groups trống hoặc bị thiếu sẽ âm thầm loại bỏ mọi tin nhắn nhóm — xem “Bẫy registry nhóm” bên dưới. |
channels.bluebubbles.sendReadReceipts | channels.imessage.sendReadReceipts | Mặc định true. Với plugin tích hợp sẵn, mục này chỉ kích hoạt khi phép dò API riêng tư đang hoạt động. |
channels.bluebubbles.includeAttachments | channels.imessage.includeAttachments | Cùng dạng, vẫn tắt theo mặc định. Nếu bạn từng có tệp đính kèm chạy trên BlueBubbles, bạn phải đặt lại mục này rõ ràng trong khối iMessage — nó không tự động chuyển tiếp ngầm định, và ảnh/phương tiện đi vào sẽ bị âm thầm loại bỏ mà không có dòng nhật ký Inbound message cho đến khi bạn làm vậy. |
channels.bluebubbles.attachmentRoots | channels.imessage.attachmentRoots | Các gốc cục bộ; cùng quy tắc ký tự đại diện. |
| (không áp dụng) | channels.imessage.remoteAttachmentRoots | Chỉ dùng khi remoteHost được đặt cho việc tải bằng SCP. |
channels.bluebubbles.mediaMaxMb | channels.imessage.mediaMaxMb | Mặc định 16 MB trên iMessage (mặc định của BlueBubbles là 8 MB). Đặt rõ ràng nếu bạn muốn giữ giới hạn thấp hơn. |
channels.bluebubbles.textChunkLimit | channels.imessage.textChunkLimit | Mặc định 4000 trên cả hai. |
channels.bluebubbles.coalesceSameSenderDms | channels.imessage.coalesceSameSenderDms | Cùng là tùy chọn bật rõ ràng. Chỉ dành cho DM — trò chuyện nhóm vẫn giữ cách chuyển từng tin nhắn tức thì trên cả hai kênh. Mở rộng debounce mặc định cho tin nhắn đến thành 2500 ms khi được bật mà không có messages.inbound.byChannel.imessage rõ ràng. Xem tài liệu iMessage § Gộp các DM gửi tách rời. |
channels.bluebubbles.enrichGroupParticipantsFromContacts | (không áp dụng) | iMessage đã đọc tên hiển thị của người gửi từ chat.db. |
channels.bluebubbles.actions.* | channels.imessage.actions.* | Các nút bật/tắt theo từng hành động: reactions, edit, unsend, reply, sendWithEffect, renameGroup, setGroupIcon, addParticipant, removeParticipant, leaveGroup, sendAttachment. |
channels.bluebubbles.accounts.*) chuyển đổi một-một sang channels.imessage.accounts.*.
Bẫy registry nhóm
Plugin iMessage tích hợp sẵn chạy hai cổng allowlist nhóm riêng biệt nối tiếp nhau. Cả hai đều phải vượt qua thì tin nhắn nhóm mới đến được agent:- Allowlist người gửi / mục tiêu trò chuyện (
channels.imessage.groupAllowFrom) — được kiểm tra bởiisAllowedIMessageSender. Khớp tin nhắn đến theo handle người gửi,chat_guid,chat_identifier, hoặcchat_id. Cùng dạng với BlueBubbles. - Registry nhóm (
channels.imessage.groups) — được kiểm tra bởiresolveChannelGroupPolicytừinbound-processing.ts:199. VớigroupPolicy: "allowlist", cổng này yêu cầu một trong hai:- một mục ký tự đại diện
groups: { "*": { ... } }(đặtallowAll = true), hoặc - một mục theo từng
chat_idrõ ràng tronggroups.
- một mục ký tự đại diện
warn để việc này không còn âm thầm ở mức nhật ký mặc định:
- Một
warnmột lần khi khởi động cho mỗi tài khoản khigroupPolicy: "allowlist"được đặt nhưngchannels.imessage.groupstrống (không có ký tự đại diện"*", không có mục theo từngchat_id) — kích hoạt trước khi có bất kỳ tin nhắn nào đến. - Một
warnmột lần theo từngchat_idvào lần đầu một nhóm cụ thể bị loại bỏ lúc chạy, nêu tên chat_id và khóa chính xác cần thêm vàogroupsđể cho phép nhóm đó.
groupAllowFrom và groupPolicy nhưng bỏ qua khối groups, vì groups: { "*": { "requireMention": true } } của BlueBubbles trông như một thiết lập nhắc tên không liên quan. Thực ra nó là phần thiết yếu cho cổng registry.
Cấu hình tối thiểu để giữ tin nhắn nhóm tiếp tục hoạt động sau groupPolicy: "allowlist":
requireMention: true dưới * là vô hại khi chưa cấu hình mẫu đề cập: runtime đặt canDetectMention = false và thoát sớm khỏi bước bỏ qua do đề cập tại inbound-processing.ts:512. Khi đã cấu hình mẫu đề cập (agents.list[].groupChat.mentionPatterns), nó hoạt động như mong đợi.
Nếu nhật ký Gateway có imessage: dropping group message from chat_id=<id> hoặc dòng khởi động imessage: groupPolicy="allowlist" but channels.imessage.groups is empty, cổng 2 đang chặn — hãy thêm khối groups.
Từng bước
-
Thêm một khối iMessage bên cạnh khối BlueBubbles hiện có. Chỉ giữ khối cũ làm nguồn sao chép cho đến khi đường dẫn mới được xác minh:
-
Thăm dò chạy thử — khởi động Gateway và xác nhận iMessage báo trạng thái khỏe mạnh:
Vì
imessage.enabledvẫn làfalse, chưa có lưu lượng iMessage đầu vào nào được định tuyến — nhưng--probekiểm tra cầu nối để bạn phát hiện vấn đề về quyền/cài đặt trước khi chuyển đổi. -
Chuyển đổi. Xóa cấu hình BlueBubbles và bật iMessage trong cùng một lần chỉnh sửa cấu hình:
Khởi động lại Gateway. Lưu lượng iMessage đầu vào giờ sẽ đi qua Plugin đi kèm.
- Xác minh DM. Gửi cho agent một tin nhắn trực tiếp; xác nhận phản hồi được gửi đến.
-
Xác minh nhóm riêng. DM và nhóm đi qua các đường dẫn mã khác nhau — DM thành công không chứng minh nhóm đang được định tuyến. Gửi cho agent một tin nhắn trong cuộc trò chuyện nhóm đã ghép đôi và xác nhận phản hồi được gửi đến. Nếu nhóm im lặng (không có phản hồi từ agent, không có lỗi), kiểm tra nhật ký Gateway để tìm
imessage: dropping group message from chat_id=<id>hoặc dòng khởi độngimessage: groupPolicy="allowlist" but channels.imessage.groups is empty— cả hai đều xuất hiện ở mức nhật ký mặc định. Nếu một trong hai xuất hiện, khốigroupscủa bạn đang thiếu hoặc rỗng — xem “Bẫy đăng ký nhóm” ở trên. -
Xác minh bề mặt hành động — từ một DM đã ghép đôi, yêu cầu agent thả phản ứng, chỉnh sửa, thu hồi, trả lời, gửi ảnh, và (trong nhóm) đổi tên nhóm / thêm hoặc xóa người tham gia. Mỗi hành động phải xuất hiện nguyên bản trong Messages.app. Nếu hành động nào báo lỗi “iMessage
<action>requires the imsg private API bridge”, hãy chạy lạiimsg launchvà làm mớichannels status --probe. -
Gỡ bỏ máy chủ và cấu hình BlueBubbles sau khi đã xác minh DM, nhóm và hành động của iMessage. OpenClaw sẽ không dùng
channels.bluebubbles.
Tổng quan tương đương hành động
| Hành động | BlueBubbles cũ | iMessage đi kèm |
|---|---|---|
| Gửi văn bản / dự phòng SMS | ✅ | ✅ |
| Gửi phương tiện (ảnh, video, tệp, thoại) | ✅ | ✅ |
Trả lời theo luồng (reply_to_guid) | ✅ | ✅ (đóng #51892) |
Tapback (react) | ✅ | ✅ |
| Chỉnh sửa / thu hồi (người nhận macOS 13+) | ✅ | ✅ |
| Gửi kèm hiệu ứng màn hình | ✅ | ✅ (đóng một phần #9394) |
| Văn bản định dạng đậm / nghiêng / gạch dưới / gạch ngang | ✅ | ✅ (định dạng typed-run qua attributedBody) |
| Đổi tên nhóm / đặt biểu tượng nhóm | ✅ | ✅ |
| Thêm / xóa người tham gia, rời nhóm | ✅ | ✅ |
| Biên nhận đã đọc và chỉ báo đang nhập | ✅ | ✅ (được kiểm soát bởi thăm dò API riêng tư) |
| Gộp DM cùng người gửi | ✅ | ✅ (chỉ DM; chọn bật qua channels.imessage.coalesceSameSenderDms) |
| Bắt kịp tin nhắn đầu vào nhận được khi Gateway ngừng chạy | ✅ (phát lại Webhook + lấy lịch sử) | ✅ (chọn bật qua channels.imessage.catchup.enabled; đóng #78649) |
channels.imessage.catchup.enabled là true, Gateway chạy một lượt chats.list + messages.history theo từng cuộc trò chuyện trên cùng client JSON-RPC mà imsg watch sử dụng, phát lại từng hàng đầu vào bị bỏ lỡ qua đường dẫn điều phối trực tiếp (danh sách cho phép, chính sách nhóm, bộ chống dội, bộ nhớ đệm echo), và lưu một con trỏ theo từng tài khoản để các lần khởi động tiếp theo tiếp tục từ nơi đã dừng. Xem Bắt kịp sau thời gian Gateway ngừng hoạt động để tinh chỉnh.
Ghép đôi, phiên và liên kết ACP
- Phê duyệt ghép đôi được chuyển tiếp theo handle. Bạn không cần phê duyệt lại người gửi đã biết —
channels.imessage.allowFromnhận diện cùng các chuỗi+15555550123/user@example.commà BlueBubbles đã dùng. - Phiên vẫn được giới hạn theo từng agent + cuộc trò chuyện. DM được gộp vào phiên chính của agent theo mặc định
session.dmScope=main; phiên nhóm vẫn tách biệt theo từngchat_id. Khóa phiên khác nhau (agent:<id>:imessage:group:<chat_id>so với khóa tương đương của BlueBubbles) — lịch sử hội thoại cũ dưới các khóa phiên BlueBubbles không được chuyển vào phiên iMessage. - Liên kết ACP tham chiếu
match.channel: "bluebubbles"cần được cập nhật thành"imessage". Các dạngmatch.peer.id(chat_id:,chat_guid:,chat_identifier:, handle trần) là giống hệt nhau.
Không có kênh rollback
Không có runtime BlueBubbles được hỗ trợ để chuyển lại. Nếu xác minh iMessage thất bại, đặtchannels.imessage.enabled: false, khởi động lại Gateway, sửa điểm chặn imsg, rồi thử chuyển đổi lại.
Bộ nhớ đệm trả lời nằm tại ~/.openclaw/state/imessage/reply-cache.jsonl (chế độ 0600, thư mục cha 0700). Có thể xóa an toàn nếu bạn muốn bắt đầu sạch.
Liên quan
- iMessage — tham chiếu đầy đủ cho kênh iMessage, bao gồm thiết lập
imsg launchvà phát hiện năng lực. /channels/bluebubbles— URL cũ chuyển hướng đến hướng dẫn di chuyển này.- Ghép đôi — xác thực DM và luồng ghép đôi.
- Định tuyến kênh — cách Gateway chọn kênh cho phản hồi đầu ra.