Mainstream messaging
iMessage
สถานะ: การผสานรวม CLI ภายนอกแบบเนทีฟ Gateway สร้าง imsg rpc และสื่อสารผ่าน JSON-RPC บน stdio (ไม่มี daemon/พอร์ตแยกต่างหาก)
ใช้ต่อไปสำหรับการกำหนดเส้นทางที่มีอยู่ซึ่งรองรับด้วย BlueBubbles; หลีกเลี่ยงสำหรับการตั้งค่าใหม่เมื่อ imsg เหมาะสม
DM ของ iMessage ใช้โหมดการจับคู่เป็นค่าเริ่มต้น
เอกสารอ้างอิงฟิลด์ iMessage แบบเต็ม
การตั้งค่าอย่างรวดเร็ว
Mac ภายในเครื่อง (เส้นทางเร็ว)
ติดตั้งและตรวจสอบ imsg
brew install steipete/tap/imsg
imsg rpc --help
กำหนดค่า OpenClaw
{
channels: {
imessage: {
enabled: true,
cliPath: "/usr/local/bin/imsg",
dbPath: "/Users/user/Library/Messages/chat.db",
},
},
}
เริ่ม Gateway
openclaw gateway
อนุมัติการจับคู่ DM ครั้งแรก (dmPolicy ค่าเริ่มต้น)
openclaw pairing list imessage
openclaw pairing approve imessage <CODE>
คำขอจับคู่จะหมดอายุหลังจาก 1 ชั่วโมง
Mac ระยะไกลผ่าน SSH
OpenClaw ต้องการเพียง cliPath ที่เข้ากันได้กับ stdio ดังนั้นคุณจึงสามารถชี้ cliPath ไปยังสคริปต์ wrapper ที่ SSH ไปยัง Mac ระยะไกลและเรียกใช้ imsg
#!/usr/bin/env bash
exec ssh -T gateway-host imsg "$@"
การกำหนดค่าที่แนะนำเมื่อเปิดใช้งานไฟล์แนบ:
{
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"],
},
},
}
หากไม่ได้ตั้งค่า remoteHost OpenClaw จะพยายามตรวจจับโดยอัตโนมัติด้วยการแยกวิเคราะห์สคริปต์ SSH wrapper
remoteHost ต้องเป็น host หรือ user@host (ไม่มีช่องว่างหรือตัวเลือก SSH)
OpenClaw ใช้การตรวจสอบ host-key อย่างเข้มงวดสำหรับ SCP ดังนั้นคีย์ของโฮสต์ relay ต้องมีอยู่แล้วใน ~/.ssh/known_hosts
เส้นทางไฟล์แนบจะถูกตรวจสอบกับรากที่อนุญาต (attachmentRoots / remoteAttachmentRoots)
ข้อกำหนดและสิทธิ์ (macOS)
- ต้องลงชื่อเข้าใช้ Messages บน Mac ที่เรียกใช้
imsg - ต้องมี Full Disk Access สำหรับบริบทกระบวนการที่เรียกใช้ OpenClaw/
imsg(การเข้าถึง DB ของ Messages) - ต้องมีสิทธิ์ Automation เพื่อส่งข้อความผ่าน Messages.app
การควบคุมการเข้าถึงและการกำหนดเส้นทาง
นโยบาย DM
channels.imessage.dmPolicy ควบคุมข้อความโดยตรง:
pairing(ค่าเริ่มต้น)allowlistopen(ต้องให้allowFromรวม"*")disabled
ฟิลด์ allowlist: channels.imessage.allowFrom
รายการ allowlist อาจเป็น handle หรือเป้าหมายแชท (chat_id:*, chat_guid:*, chat_identifier:*)
นโยบายกลุ่ม + การกล่าวถึง
channels.imessage.groupPolicy ควบคุมการจัดการกลุ่ม:
allowlist(ค่าเริ่มต้นเมื่อกำหนดค่าแล้ว)opendisabled
allowlist ผู้ส่งกลุ่ม: channels.imessage.groupAllowFrom
การสำรองขณะรันไทม์: หากไม่ได้ตั้งค่า groupAllowFrom การตรวจสอบผู้ส่งกลุ่ม iMessage จะถอยกลับไปใช้ allowFrom เมื่อพร้อมใช้งาน
หมายเหตุขณะรันไทม์: หาก channels.imessage หายไปทั้งหมด รันไทม์จะถอยกลับไปใช้ groupPolicy="allowlist" และบันทึกคำเตือน (แม้จะตั้งค่า channels.defaults.groupPolicy ไว้ก็ตาม)
การควบคุมการกล่าวถึงสำหรับกลุ่ม:
- iMessage ไม่มีเมตาดาต้าการกล่าวถึงแบบเนทีฟ
- การตรวจจับการกล่าวถึงใช้แพตเทิร์น regex (
agents.list[].groupChat.mentionPatterns, สำรองเป็นmessages.groupChat.mentionPatterns) - หากไม่มีแพตเทิร์นที่กำหนดค่าไว้ จะไม่สามารถบังคับใช้การควบคุมการกล่าวถึงได้
คำสั่งควบคุมจากผู้ส่งที่ได้รับอนุญาตสามารถข้ามการควบคุมการกล่าวถึงในกลุ่มได้
เซสชันและการตอบกลับแบบกำหนดแน่นอน
- DM ใช้การกำหนดเส้นทางโดยตรง; กลุ่มใช้การกำหนดเส้นทางกลุ่ม
- ด้วยค่าเริ่มต้น
session.dmScope=mainDM ของ iMessage จะถูกรวมเข้าในเซสชันหลักของเอเจนต์ - เซสชันกลุ่มถูกแยกออกจากกัน (
agent:<agentId>:imessage:group:<chat_id>) - การตอบกลับจะส่งกลับไปยัง iMessage โดยใช้เมตาดาต้าช่องทาง/เป้าหมายต้นทาง
พฤติกรรมเธรดที่คล้ายกลุ่ม:
เธรด iMessage ที่มีผู้เข้าร่วมหลายคนบางรายการอาจมาถึงพร้อม is_group=false
หาก chat_id นั้นถูกกำหนดค่าไว้อย่างชัดเจนภายใต้ channels.imessage.groups OpenClaw จะถือว่าเป็นทราฟฟิกกลุ่ม (การควบคุมกลุ่ม + การแยกเซสชันกลุ่ม)
การผูกการสนทนา ACP
แชท iMessage แบบเดิมยังสามารถผูกกับเซสชัน ACP ได้ด้วย
โฟลว์ผู้ปฏิบัติงานแบบเร็ว:
- เรียกใช้
/acp spawn codex --bind hereภายใน DM หรือแชทกลุ่มที่อนุญาต - ข้อความในอนาคตในบทสนทนา iMessage เดียวกันนั้นจะถูกกำหนดเส้นทางไปยังเซสชัน ACP ที่สร้างขึ้น
/newและ/resetรีเซ็ตเซสชัน ACP ที่ผูกไว้เดิมในตำแหน่งเดิม/acp closeปิดเซสชัน ACP และลบการผูก
รองรับการผูกถาวรที่กำหนดค่าไว้ผ่านรายการระดับบนสุด bindings[] ที่มี type: "acp" และ match.channel: "imessage"
match.peer.id สามารถใช้:
- handle DM ที่ปรับให้เป็นรูปแบบมาตรฐาน เช่น
+15555550123หรือ[email protected] chat_id:<id>(แนะนำสำหรับการผูกกลุ่มที่เสถียร)chat_guid:<guid>chat_identifier:<identifier>
ตัวอย่าง:
{
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" },
},
],
}
ดู เอเจนต์ ACP สำหรับพฤติกรรมการผูก ACP ที่ใช้ร่วมกัน
รูปแบบการปรับใช้
ผู้ใช้ macOS สำหรับบอทโดยเฉพาะ (ข้อมูลประจำตัว iMessage แยกต่างหาก)
ใช้ Apple ID และผู้ใช้ macOS โดยเฉพาะเพื่อให้ทราฟฟิกของบอทแยกออกจากโปรไฟล์ Messages ส่วนตัวของคุณ
โฟลว์ทั่วไป:
- สร้าง/ลงชื่อเข้าใช้ผู้ใช้ macOS โดยเฉพาะ
- ลงชื่อเข้าใช้ Messages ด้วย Apple ID ของบอทในผู้ใช้นั้น
- ติดตั้ง
imsgในผู้ใช้นั้น - สร้าง SSH wrapper เพื่อให้ OpenClaw เรียกใช้
imsgในบริบทผู้ใช้นั้นได้ - ชี้
channels.imessage.accounts.<id>.cliPathและ.dbPathไปยังโปรไฟล์ผู้ใช้นั้น
การเรียกใช้ครั้งแรกอาจต้องมีการอนุมัติ GUI (Automation + Full Disk Access) ในเซสชันผู้ใช้บอทนั้น
Mac ระยะไกลผ่าน Tailscale (ตัวอย่าง)
โทโพโลยีทั่วไป:
- Gateway ทำงานบน Linux/VM
- iMessage +
imsgทำงานบน Mac ใน tailnet ของคุณ - wrapper ของ
cliPathใช้ SSH เพื่อเรียกใช้imsg remoteHostเปิดใช้งานการดึงไฟล์แนบผ่าน SCP
ตัวอย่าง:
{
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 "$@"
ใช้คีย์ SSH เพื่อให้ทั้ง SSH และ SCP ไม่ต้องโต้ตอบ
ตรวจสอบให้แน่ใจก่อนว่าคีย์โฮสต์เชื่อถือได้แล้ว (เช่น ssh [email protected]) เพื่อให้ known_hosts ถูกเติมข้อมูล
รูปแบบหลายบัญชี
iMessage รองรับการกำหนดค่ารายบัญชีภายใต้ channels.imessage.accounts
แต่ละบัญชีสามารถ override ฟิลด์ เช่น cliPath, dbPath, allowFrom, groupPolicy, mediaMaxMb, การตั้งค่าประวัติ และ allowlist รากไฟล์แนบได้
สื่อ การแบ่งชิ้น และเป้าหมายการส่ง
ไฟล์แนบและสื่อ
- การรับไฟล์แนบขาเข้าเป็นตัวเลือก:
channels.imessage.includeAttachments - สามารถดึงเส้นทางไฟล์แนบระยะไกลผ่าน SCP เมื่อมีการตั้งค่า
remoteHost - เส้นทางไฟล์แนบต้องตรงกับรากที่อนุญาต:
channels.imessage.attachmentRoots(ภายในเครื่อง)channels.imessage.remoteAttachmentRoots(โหมด SCP ระยะไกล)- แพตเทิร์นรากค่าเริ่มต้น:
/Users/*/Library/Messages/Attachments
- SCP ใช้การตรวจสอบ host-key อย่างเข้มงวด (
StrictHostKeyChecking=yes) - ขนาดสื่อขาออกใช้
channels.imessage.mediaMaxMb(ค่าเริ่มต้น 16 MB)
การแบ่งขาออกเป็นชิ้น
- ขีดจำกัดชิ้นข้อความ:
channels.imessage.textChunkLimit(ค่าเริ่มต้น 4000) - โหมดการแบ่งชิ้น:
channels.imessage.chunkModelength(ค่าเริ่มต้น)newline(การแบ่งโดยให้ย่อหน้ามาก่อน)
รูปแบบการระบุที่อยู่
เป้าหมายแบบชัดเจนที่แนะนำ:
chat_id:123(แนะนำสำหรับการกำหนดเส้นทางที่เสถียร)chat_guid:...chat_identifier:...
รองรับเป้าหมายแบบ handle ด้วย:
imessage:+1555...sms:+1555...[email protected]
imsg chats --limit 20
การเขียนการกำหนดค่า
iMessage อนุญาตให้ช่องทางเริ่มเขียนการกำหนดค่าได้ตามค่าเริ่มต้น (สำหรับ /config set|unset เมื่อ commands.config: true)
ปิดใช้งาน:
{
channels: {
imessage: {
configWrites: false,
},
},
}
การแก้ไขปัญหา
ไม่พบ imsg หรือไม่รองรับ RPC
ตรวจสอบไบนารีและการรองรับ RPC:
imsg rpc --help
openclaw channels status --probe
หาก probe รายงานว่าไม่รองรับ RPC ให้อัปเดต imsg
DM ถูกละเว้น
ตรวจสอบ:
channels.imessage.dmPolicychannels.imessage.allowFrom- การอนุมัติการจับคู่ (
openclaw pairing list imessage)
ข้อความกลุ่มถูกละเว้น
ตรวจสอบ:
channels.imessage.groupPolicychannels.imessage.groupAllowFrom- พฤติกรรม allowlist ของ
channels.imessage.groups - การกำหนดค่าแพตเทิร์นการกล่าวถึง (
agents.list[].groupChat.mentionPatterns)
ไฟล์แนบระยะไกลล้มเหลว
ตรวจสอบ:
channels.imessage.remoteHostchannels.imessage.remoteAttachmentRoots- การรับรองความถูกต้องด้วยคีย์ SSH/SCP จากโฮสต์ Gateway
- คีย์โฮสต์มีอยู่ใน
~/.ssh/known_hostsบนโฮสต์ Gateway - ความสามารถในการอ่านเส้นทางระยะไกลบน Mac ที่เรียกใช้ Messages
พลาดพรอมป์สิทธิ์ macOS
เรียกใช้อีกครั้งในเทอร์มินัล GUI แบบโต้ตอบในบริบทผู้ใช้/เซสชันเดียวกัน และอนุมัติพรอมป์:
imsg chats --limit 1
imsg send <handle> "test"
ยืนยันว่า Full Disk Access + Automation ได้รับการอนุญาตสำหรับบริบทกระบวนการที่เรียกใช้ OpenClaw/imsg
ตัวชี้ไปยังเอกสารอ้างอิงการกำหนดค่า
ที่เกี่ยวข้อง
- ภาพรวมช่องทาง — ช่องทางที่รองรับทั้งหมด
- การจับคู่ — การยืนยันตัวตนผ่าน DM และขั้นตอนการจับคู่
- กลุ่ม — พฤติกรรมแชตกลุ่มและการควบคุมด้วยการกล่าวถึง
- การกำหนดเส้นทางช่องทาง — การกำหนดเส้นทางเซสชันสำหรับข้อความ
- ความปลอดภัย — โมเดลการเข้าถึงและการเสริมความแข็งแกร่ง