Mainstream messaging
iMessage
Trạng thái: tích hợp CLI bên ngoài gốc. Gateway khởi chạy imsg rpc và giao tiếp qua JSON-RPC trên stdio (không có daemon/cổng riêng).
Tiếp tục dùng cho định tuyến hiện có dựa trên BlueBubbles; tránh dùng cho thiết lập mới khi imsg phù hợp.
Tin nhắn riêng iMessage mặc định dùng chế độ ghép nối.
Tham chiếu đầy đủ các trường iMessage.
Thiết lập nhanh
Máy Mac cục bộ (đường nhanh)
Cài đặt và xác minh imsg
brew install steipete/tap/imsg
imsg rpc --help
Cấu hình OpenClaw
{
channels: {
imessage: {
enabled: true,
cliPath: "/usr/local/bin/imsg",
dbPath: "/Users/user/Library/Messages/chat.db",
},
},
}
Khởi động gateway
openclaw gateway
Phê duyệt ghép nối tin nhắn riêng đầu tiên (dmPolicy mặc định)
openclaw pairing list imessage
openclaw pairing approve imessage <CODE>
Yêu cầu ghép nối hết hạn sau 1 giờ.
Máy Mac từ xa qua SSH
OpenClaw chỉ yêu cầu một cliPath tương thích stdio, vì vậy bạn có thể trỏ cliPath đến một tập lệnh wrapper SSH vào máy Mac từ xa và chạy imsg.
#!/usr/bin/env bash
exec ssh -T gateway-host imsg "$@"
Cấu hình được khuyến nghị khi bật tệp đính kèm:
{
channels: {
imessage: {
enabled: true,
cliPath: "~/.openclaw/scripts/imsg-ssh",
remoteHost: "user@gateway-host", // used for SCP attachment fetches
includeAttachments: true,
// Optional: override allowed attachment roots.
// Defaults include /Users/*/Library/Messages/Attachments
attachmentRoots: ["/Users/*/Library/Messages/Attachments"],
remoteAttachmentRoots: ["/Users/*/Library/Messages/Attachments"],
},
},
}
Nếu remoteHost chưa được đặt, OpenClaw cố gắng tự động phát hiện bằng cách phân tích tập lệnh wrapper SSH.
remoteHost phải là host hoặc user@host (không có khoảng trắng hoặc tùy chọn SSH).
OpenClaw dùng kiểm tra host-key nghiêm ngặt cho SCP, vì vậy khóa máy chủ chuyển tiếp phải đã tồn tại trong ~/.ssh/known_hosts.
Đường dẫn tệp đính kèm được xác thực theo các gốc được phép (attachmentRoots / remoteAttachmentRoots).
Yêu cầu và quyền (macOS)
- Messages phải được đăng nhập trên máy Mac chạy
imsg. - Full Disk Access là bắt buộc cho ngữ cảnh tiến trình chạy OpenClaw/
imsg(truy cập DB Messages). - Quyền Automation là bắt buộc để gửi tin nhắn qua Messages.app.
Kiểm soát truy cập và định tuyến
Chính sách tin nhắn riêng
channels.imessage.dmPolicy kiểm soát tin nhắn trực tiếp:
pairing(mặc định)allowlistopen(yêu cầuallowFrombao gồm"*")disabled
Trường danh sách cho phép: channels.imessage.allowFrom.
Mục trong danh sách cho phép có thể là handle hoặc đích trò chuyện (chat_id:*, chat_guid:*, chat_identifier:*).
Chính sách nhóm + lượt nhắc
channels.imessage.groupPolicy kiểm soát xử lý nhóm:
allowlist(mặc định khi được cấu hình)opendisabled
Danh sách cho phép người gửi nhóm: channels.imessage.groupAllowFrom.
Phương án dự phòng khi chạy: nếu groupAllowFrom chưa được đặt, kiểm tra người gửi nhóm iMessage sẽ dùng lại allowFrom khi có.
Ghi chú khi chạy: nếu channels.imessage hoàn toàn bị thiếu, runtime dùng lại groupPolicy="allowlist" và ghi cảnh báo (ngay cả khi channels.defaults.groupPolicy được đặt).
Gating theo lượt nhắc cho nhóm:
- iMessage không có siêu dữ liệu lượt nhắc gốc
- phát hiện lượt nhắc dùng các mẫu regex (
agents.list[].groupChat.mentionPatterns, dự phòngmessages.groupChat.mentionPatterns) - khi không có mẫu nào được cấu hình, không thể thực thi gating theo lượt nhắc
Lệnh điều khiển từ người gửi được ủy quyền có thể bỏ qua gating theo lượt nhắc trong nhóm.
Phiên và phản hồi xác định
- Tin nhắn riêng dùng định tuyến trực tiếp; nhóm dùng định tuyến nhóm.
- Với
session.dmScope=mainmặc định, tin nhắn riêng iMessage gộp vào phiên chính của agent. - Phiên nhóm được cô lập (
agent:<agentId>:imessage:group:<chat_id>). - Phản hồi được định tuyến trở lại iMessage bằng siêu dữ liệu kênh/đích gốc.
Hành vi luồng giống nhóm:
Một số luồng iMessage nhiều người tham gia có thể đến với is_group=false.
Nếu chat_id đó được cấu hình rõ ràng trong channels.imessage.groups, OpenClaw xử lý nó như lưu lượng nhóm (gating nhóm + cô lập phiên nhóm).
Liên kết hội thoại ACP
Các cuộc trò chuyện iMessage cũ cũng có thể được liên kết với phiên ACP.
Luồng thao tác nhanh:
- Chạy
/acp spawn codex --bind herebên trong tin nhắn riêng hoặc cuộc trò chuyện nhóm được phép. - Các tin nhắn sau này trong cùng hội thoại iMessage đó được định tuyến đến phiên ACP đã khởi tạo.
/newvà/resetđặt lại cùng phiên ACP đã liên kết tại chỗ./acp closeđóng phiên ACP và xóa liên kết.
Các liên kết bền vững được cấu hình được hỗ trợ thông qua các mục bindings[] cấp cao nhất với type: "acp" và match.channel: "imessage".
match.peer.id có thể dùng:
- handle tin nhắn riêng đã chuẩn hóa như
+15555550123hoặc[email protected] chat_id:<id>(được khuyến nghị cho liên kết nhóm ổn định)chat_guid:<guid>chat_identifier:<identifier>
Ví dụ:
{
agents: {
list: [
{
id: "codex",
runtime: {
type: "acp",
acp: { agent: "codex", backend: "acpx", mode: "persistent" },
},
},
],
},
bindings: [
{
type: "acp",
agentId: "codex",
match: {
channel: "imessage",
accountId: "default",
peer: { kind: "group", id: "chat_id:123" },
},
acp: { label: "codex-group" },
},
],
}
Xem ACP Agents để biết hành vi liên kết ACP dùng chung.
Mẫu triển khai
Người dùng macOS bot chuyên dụng (danh tính iMessage riêng)
Dùng Apple ID và người dùng macOS chuyên dụng để lưu lượng bot được cô lập khỏi hồ sơ Messages cá nhân của bạn.
Luồng điển hình:
- Tạo/đăng nhập một người dùng macOS chuyên dụng.
- Đăng nhập vào Messages bằng Apple ID của bot trong người dùng đó.
- Cài đặt
imsgtrong người dùng đó. - Tạo wrapper SSH để OpenClaw có thể chạy
imsgtrong ngữ cảnh người dùng đó. - Trỏ
channels.imessage.accounts.<id>.cliPathvà.dbPathđến hồ sơ người dùng đó.
Lần chạy đầu tiên có thể yêu cầu phê duyệt GUI (Automation + Full Disk Access) trong phiên người dùng bot đó.
Máy Mac từ xa qua Tailscale (ví dụ)
Cấu trúc liên kết phổ biến:
- gateway chạy trên Linux/VM
- iMessage +
imsgchạy trên máy Mac trong tailnet của bạn - wrapper
cliPathdùng SSH để chạyimsg remoteHostbật tải tệp đính kèm qua SCP
Ví dụ:
{
channels: {
imessage: {
enabled: true,
cliPath: "~/.openclaw/scripts/imsg-ssh",
remoteHost: "[email protected]",
includeAttachments: true,
dbPath: "/Users/bot/Library/Messages/chat.db",
},
},
}
#!/usr/bin/env bash
exec ssh -T [email protected] imsg "$@"
Dùng khóa SSH để cả SSH và SCP đều không tương tác.
Đảm bảo khóa máy chủ được tin cậy trước (ví dụ ssh [email protected]) để known_hosts được điền.
Mẫu nhiều tài khoản
iMessage hỗ trợ cấu hình theo từng tài khoản trong channels.imessage.accounts.
Mỗi tài khoản có thể ghi đè các trường như cliPath, dbPath, allowFrom, groupPolicy, mediaMaxMb, cài đặt lịch sử và danh sách cho phép gốc tệp đính kèm.
Phương tiện, chia đoạn và đích gửi
Tệp đính kèm và phương tiện
- thu nạp tệp đính kèm đầu vào là tùy chọn:
channels.imessage.includeAttachments - đường dẫn tệp đính kèm từ xa có thể được tải qua SCP khi
remoteHostđược đặt - đường dẫn tệp đính kèm phải khớp với các gốc được phép:
channels.imessage.attachmentRoots(cục bộ)channels.imessage.remoteAttachmentRoots(chế độ SCP từ xa)- mẫu gốc mặc định:
/Users/*/Library/Messages/Attachments
- SCP dùng kiểm tra host-key nghiêm ngặt (
StrictHostKeyChecking=yes) - kích thước phương tiện gửi đi dùng
channels.imessage.mediaMaxMb(mặc định 16 MB)
Chia đoạn gửi đi
- giới hạn đoạn văn bản:
channels.imessage.textChunkLimit(mặc định 4000) - chế độ chia đoạn:
channels.imessage.chunkModelength(mặc định)newline(tách ưu tiên đoạn văn)
Định dạng định địa chỉ
Đích rõ ràng được ưu tiên:
chat_id:123(được khuyến nghị cho định tuyến ổn định)chat_guid:...chat_identifier:...
Đích handle cũng được hỗ trợ:
imessage:+1555...sms:+1555...[email protected]
imsg chats --limit 20
Ghi cấu hình
iMessage cho phép ghi cấu hình do kênh khởi tạo theo mặc định (cho /config set|unset khi commands.config: true).
Tắt:
{
channels: {
imessage: {
configWrites: false,
},
},
}
Khắc phục sự cố
Không tìm thấy imsg hoặc RPC không được hỗ trợ
Xác thực binary và hỗ trợ RPC:
imsg rpc --help
openclaw channels status --probe
Nếu probe báo RPC không được hỗ trợ, hãy cập nhật imsg.
Tin nhắn riêng bị bỏ qua
Kiểm tra:
channels.imessage.dmPolicychannels.imessage.allowFrom- phê duyệt ghép nối (
openclaw pairing list imessage)
Tin nhắn nhóm bị bỏ qua
Kiểm tra:
channels.imessage.groupPolicychannels.imessage.groupAllowFrom- hành vi danh sách cho phép
channels.imessage.groups - cấu hình mẫu lượt nhắc (
agents.list[].groupChat.mentionPatterns)
Tệp đính kèm từ xa thất bại
Kiểm tra:
channels.imessage.remoteHostchannels.imessage.remoteAttachmentRoots- xác thực khóa SSH/SCP từ máy chủ gateway
- khóa máy chủ tồn tại trong
~/.ssh/known_hoststrên máy chủ gateway - khả năng đọc đường dẫn từ xa trên máy Mac chạy Messages
Đã bỏ lỡ lời nhắc quyền macOS
Chạy lại trong terminal GUI tương tác trong cùng ngữ cảnh người dùng/phiên và phê duyệt lời nhắc:
imsg chats --limit 1
imsg send <handle> "test"
Xác nhận Full Disk Access + Automation đã được cấp cho ngữ cảnh tiến trình chạy OpenClaw/imsg.
Con trỏ tham chiếu cấu hình
Liên quan
- Tổng quan về kênh — tất cả các kênh được hỗ trợ
- Ghép đôi — xác thực DM và luồng ghép đôi
- Nhóm — hành vi trò chuyện nhóm và cơ chế kiểm soát theo lượt nhắc đến
- Định tuyến kênh — định tuyến phiên cho tin nhắn
- Bảo mật — mô hình truy cập và gia cố bảo mật