Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
สำหรับการปรับใช้ OpenClaw iMessage ให้ใช้
imsg บนโฮสต์ macOS Messages ที่ลงชื่อเข้าใช้แล้ว หาก Gateway ของคุณทำงานบน Linux หรือ Windows ให้ชี้ channels.imessage.cliPath ไปยังตัวครอบ SSH ที่เรียกใช้ imsg บน Macการตามเก็บข้อความช่วง Gateway หยุดทำงานเป็นแบบเลือกเปิดใช้ เมื่อเปิดใช้ (channels.imessage.catchup.enabled: true) Gateway จะเล่นซ้ำข้อความขาเข้าที่เข้ามาใน chat.db ขณะที่ออฟไลน์อยู่ (แครช รีสตาร์ต Mac sleep) ในการเริ่มต้นครั้งถัดไป ปิดไว้โดยค่าเริ่มต้น — ดู การตามเก็บหลังจาก Gateway หยุดทำงาน ปิด openclaw#78649imsg rpc และสื่อสารผ่าน JSON-RPC บน stdio (ไม่มีดีมอน/พอร์ตแยกต่างหาก) การกระทำขั้นสูงต้องใช้ imsg launch และการตรวจสอบ private API ที่สำเร็จ
Private API actions
การตอบกลับ, tapback, เอฟเฟกต์, ไฟล์แนบ และการจัดการกลุ่ม
Pairing
DM ของ iMessage ใช้โหมดการจับคู่เป็นค่าเริ่มต้น
Remote Mac
ใช้ตัวครอบ SSH เมื่อ Gateway ไม่ได้ทำงานบน Mac ที่ใช้ Messages
Configuration reference
อ้างอิงฟิลด์ iMessage ฉบับเต็ม
ตั้งค่าอย่างรวดเร็ว
- Local Mac (fast path)
- Remote Mac over SSH
ข้อกำหนดและสิทธิ์อนุญาต (macOS)
- Messages ต้องลงชื่อเข้าใช้บน Mac ที่เรียกใช้
imsg - ต้องมี Full Disk Access สำหรับบริบทโปรเซสที่เรียกใช้ OpenClaw/
imsg(การเข้าถึงฐานข้อมูล Messages) - ต้องมีสิทธิ์ Automation เพื่อส่งข้อความผ่าน Messages.app
- สำหรับการกระทำขั้นสูง (react / edit / unsend / threaded reply / effects / group ops) ต้องปิด System Integrity Protection — ดู การเปิดใช้ imsg private API ด้านล่าง การส่ง/รับข้อความพื้นฐานและสื่อใช้งานได้โดยไม่ต้องปิด
การเปิดใช้ imsg private API
imsg มาพร้อมโหมดการทำงานสองโหมด:
- โหมดพื้นฐาน (ค่าเริ่มต้น ไม่ต้องเปลี่ยน SIP): ข้อความและสื่อขาออกผ่าน
send, การเฝ้าดู/ประวัติขาเข้า, รายการแชท นี่คือสิ่งที่คุณได้ทันทีจากการติดตั้งbrew install steipete/tap/imsgใหม่พร้อมสิทธิ์ macOS มาตรฐานด้านบน - โหมด Private API:
imsgฉีด helper dylib เข้าไปในMessages.appเพื่อเรียกฟังก์ชันIMCoreภายใน นี่คือสิ่งที่ปลดล็อกreact,edit,unsend,reply(แบบเธรด),sendWithEffect,renameGroup,setGroupIcon,addParticipant,removeParticipant,leaveGroupรวมถึงตัวบ่งชี้การพิมพ์และใบตอบรับการอ่าน
imsg ระบุข้อกำหนดไว้อย่างชัดเจน:
ฟีเจอร์ขั้นสูง เช่นเทคนิคการฉีด helper ใช้ dylib ของread,typing,launch, การส่งแบบ rich ที่หนุนด้วยบริดจ์, การเปลี่ยนแปลงข้อความ และการจัดการแชท เป็นแบบเลือกเปิดใช้ ฟีเจอร์เหล่านี้ต้องปิด SIP และต้องฉีด helper dylib เข้าไปในMessages.appimsg launchจะปฏิเสธการฉีดเมื่อเปิดใช้ SIP อยู่
imsg เองเพื่อเข้าถึง private API ของ Messages ไม่มีเซิร์ฟเวอร์บุคคลที่สามหรือรันไทม์ BlueBubbles ในเส้นทาง OpenClaw iMessage
การตั้งค่า
-
ติดตั้ง (หรืออัปเกรด)
imsgบน Mac ที่เรียกใช้ Messages.app:เอาต์พุตimsg status --jsonรายงานbridge_version,rpc_methodsและselectorsรายเมธอด เพื่อให้คุณเห็นว่าบิลด์ปัจจุบันรองรับอะไรบ้างก่อนเริ่มใช้งาน -
ปิด System Integrity Protection ขั้นตอนนี้ขึ้นกับเวอร์ชัน macOS เพราะข้อกำหนดของ Apple ที่อยู่เบื้องหลังขึ้นกับ OS และฮาร์ดแวร์:
- macOS 10.13–10.15 (Sierra–Catalina): ปิด Library Validation ผ่าน Terminal, รีบูตเข้าสู่ Recovery Mode, เรียกใช้
csrutil disable, รีสตาร์ต - macOS 11+ (Big Sur และใหม่กว่า), Intel: Recovery Mode (หรือ Internet Recovery),
csrutil disable, รีสตาร์ต - macOS 11+, Apple Silicon: ลำดับการเริ่มต้นด้วยปุ่มเปิด/ปิดเพื่อเข้าสู่ Recovery; บน macOS เวอร์ชันล่าสุดให้กดปุ่ม Left Shift ค้างไว้เมื่อคลิก Continue แล้วจึง
csrutil disableการตั้งค่าเครื่องเสมือนใช้ขั้นตอนแยกต่างหาก — ให้ถ่ายสแนปช็อต VM ก่อน - macOS 26 / Tahoe: นโยบาย library-validation และการตรวจสอบ private-entitlement ของ
imagentเข้มงวดขึ้นอีก;imsgอาจต้องใช้บิลด์ที่อัปเดตเพื่อให้ตามทัน หากการฉีดimsg launchหรือselectorsเฉพาะเริ่มคืนค่า false หลังจากอัปเกรด macOS รุ่นหลัก ให้ตรวจสอบบันทึกประจำรุ่นของimsgก่อนสรุปว่าขั้นตอน SIP สำเร็จ
imsg launch - macOS 10.13–10.15 (Sierra–Catalina): ปิด Library Validation ผ่าน Terminal, รีบูตเข้าสู่ Recovery Mode, เรียกใช้
-
ฉีด helper เมื่อปิด SIP และ Messages.app ลงชื่อเข้าใช้แล้ว:
imsg launchจะปฏิเสธการฉีดเมื่อ SIP ยังเปิดอยู่ ดังนั้นคำสั่งนี้จึงใช้ยืนยันได้ด้วยว่าขั้นตอนที่ 2 มีผลแล้ว -
ตรวจสอบบริดจ์จาก OpenClaw:
รายการ iMessage ควรรายงาน
worksและimsg status --json | jq '.selectors'ควรแสดงretractMessagePart: trueพร้อมกับ selector สำหรับ edit / typing / read ใด ๆ ที่บิลด์ macOS ของคุณเปิดเผย การกั้นตามเมธอดของ Plugin OpenClaw ในactions.tsจะโฆษณาเฉพาะการกระทำที่ selector พื้นฐานเป็นtrueดังนั้นพื้นผิวการกระทำที่คุณเห็นในรายการเครื่องมือของเอเจนต์จะสะท้อนสิ่งที่บริดจ์ทำได้จริงบนโฮสต์นี้
openclaw channels status --probe รายงานว่าช่องทางเป็น works แต่การกระทำเฉพาะโยนข้อผิดพลาด “iMessage <action> requires the imsg private API bridge” ขณะ dispatch ให้เรียกใช้ imsg launch อีกครั้ง — helper อาจหลุดออกไปได้ (Messages.app รีสตาร์ต, อัปเดต OS ฯลฯ) และสถานะ available: true ที่แคชไว้จะยังคงโฆษณาการกระทำจนกว่าการ probe ครั้งถัดไปจะรีเฟรช
เมื่อคุณปิด SIP ไม่ได้
หากการปิด SIP ไม่เป็นที่ยอมรับสำหรับโมเดลภัยคุกคามของคุณ:imsgจะถอยกลับไปใช้โหมดพื้นฐาน — ข้อความ + สื่อ + การรับเท่านั้น- Plugin OpenClaw ยังคงโฆษณาการส่งข้อความ/สื่อและการเฝ้าดูขาเข้า เพียงแต่ซ่อน
react,edit,unsend,reply,sendWithEffectและ group ops จากพื้นผิวการกระทำ (ตามการกั้นความสามารถรายเมธอด) - คุณสามารถเรียกใช้ Mac ที่ไม่ใช่ Apple Silicon แยกต่างหาก (หรือ Mac สำหรับบอตโดยเฉพาะ) โดยปิด SIP สำหรับภาระงาน iMessage ในขณะที่ยังคงเปิด SIP บนอุปกรณ์หลักของคุณ ดู ผู้ใช้ macOS สำหรับบอตโดยเฉพาะ (ตัวตน iMessage แยกต่างหาก) ด้านล่าง
การควบคุมการเข้าถึงและการกำหนดเส้นทาง
- DM policy
- Group policy + mentions
- เซสชันและการตอบกลับแบบกำหนดแน่นอน
channels.imessage.dmPolicy ควบคุมข้อความโดยตรง:pairing(ค่าเริ่มต้น)allowlistopen(ต้องให้allowFromมี"*")disabled
channels.imessage.allowFromรายการ allowlist ต้องระบุผู้ส่ง: handle หรือกลุ่มการเข้าถึงผู้ส่งแบบคงที่ (accessGroup:<name>) ใช้ channels.imessage.groupAllowFrom สำหรับเป้าหมายแชท เช่น chat_id:*, chat_guid:* หรือ chat_identifier:*; ใช้ channels.imessage.groups สำหรับคีย์รีจิสทรี chat_id แบบตัวเลขการผูกการสนทนา ACP
แชต iMessage แบบเดิมยังสามารถผูกกับเซสชัน ACP ได้ด้วย โฟลว์ผู้ปฏิบัติงานแบบเร็ว:- เรียกใช้
/acp spawn codex --bind hereภายในข้อความโดยตรงหรือแชตกลุ่มที่ได้รับอนุญาต - ข้อความในอนาคตในการสนทนา iMessage เดียวกันนั้นจะถูกกำหนดเส้นทางไปยังเซสชัน ACP ที่สร้างขึ้น
/newและ/resetจะรีเซ็ตเซสชัน ACP ที่ผูกไว้เดิมในตำแหน่งเดิม/acp closeจะปิดเซสชัน ACP และลบการผูก
bindings[] ที่มี type: "acp" และ match.channel: "imessage"
match.peer.id สามารถใช้:
- แฮนเดิลข้อความโดยตรงที่ทำให้เป็นมาตรฐานแล้ว เช่น
+15555550123หรือuser@example.com chat_id:<id>(แนะนำสำหรับการผูกกลุ่มที่เสถียร)chat_guid:<guid>chat_identifier:<identifier>
รูปแบบการดีพลอย
ผู้ใช้ macOS สำหรับบอตโดยเฉพาะ (ตัวตน iMessage แยกต่างหาก)
ผู้ใช้ macOS สำหรับบอตโดยเฉพาะ (ตัวตน iMessage แยกต่างหาก)
ใช้ Apple ID และผู้ใช้ macOS เฉพาะ เพื่อแยกทราฟฟิกบอตออกจากโปรไฟล์ Messages ส่วนตัวของคุณโฟลว์ทั่วไป:
- สร้าง/ลงชื่อเข้าใช้ผู้ใช้ macOS เฉพาะ
- ลงชื่อเข้าใช้ Messages ด้วย Apple ID ของบอตในผู้ใช้นั้น
- ติดตั้ง
imsgในผู้ใช้นั้น - สร้าง SSH wrapper เพื่อให้ OpenClaw เรียกใช้
imsgในบริบทของผู้ใช้นั้นได้ - ชี้
channels.imessage.accounts.<id>.cliPathและ.dbPathไปยังโปรไฟล์ผู้ใช้นั้น
Mac ระยะไกลผ่าน Tailscale (ตัวอย่าง)
Mac ระยะไกลผ่าน Tailscale (ตัวอย่าง)
โทโพโลยีทั่วไป:ใช้คีย์ SSH เพื่อให้ทั้ง SSH และ SCP ไม่ต้องโต้ตอบ
ตรวจสอบให้แน่ใจก่อนว่าโฮสต์คีย์ได้รับความเชื่อถือแล้ว (เช่น
- Gateway ทำงานบน Linux/VM
- iMessage +
imsgทำงานบน Mac ใน tailnet ของคุณ - wrapper
cliPathใช้ SSH เพื่อเรียกใช้imsg remoteHostเปิดใช้งานการดึงไฟล์แนบผ่าน SCP
ssh bot@mac-mini.tailnet-1234.ts.net) เพื่อให้ known_hosts ถูกเติมข้อมูลรูปแบบหลายบัญชี
รูปแบบหลายบัญชี
iMessage รองรับการกำหนดค่ารายบัญชีใต้
channels.imessage.accountsแต่ละบัญชีสามารถแทนที่ฟิลด์ต่าง ๆ เช่น cliPath, dbPath, allowFrom, groupPolicy, mediaMaxMb, การตั้งค่าประวัติ และ allowlist ของรากไฟล์แนบสื่อ การแบ่งชิ้น และเป้าหมายการส่งมอบ
ไฟล์แนบและสื่อ
ไฟล์แนบและสื่อ
- การนำเข้าไฟล์แนบขาเข้า ปิดอยู่โดยค่าเริ่มต้น — ตั้งค่า
channels.imessage.includeAttachments: trueเพื่อส่งต่อรูปภาพ บันทึกเสียง วิดีโอ และไฟล์แนบอื่น ๆ ไปยังเอเจนต์ เมื่อปิดใช้งาน ข้อความ iMessage ที่มีเฉพาะไฟล์แนบจะถูกทิ้งก่อนถึงเอเจนต์ และอาจไม่สร้างบรรทัดบันทึกInbound messageเลย - เส้นทางไฟล์แนบระยะไกลสามารถดึงผ่าน SCP ได้เมื่อตั้งค่า
remoteHost - เส้นทางไฟล์แนบต้องตรงกับรากที่อนุญาต:
channels.imessage.attachmentRoots(ในเครื่อง)channels.imessage.remoteAttachmentRoots(โหมด SCP ระยะไกล)- รูปแบบรากเริ่มต้น:
/Users/*/Library/Messages/Attachments
- SCP ใช้การตรวจสอบโฮสต์คีย์แบบเข้มงวด (
StrictHostKeyChecking=yes) - ขนาดสื่อขาออกใช้
channels.imessage.mediaMaxMb(ค่าเริ่มต้น 16 MB)
การแบ่งชิ้นขาออก
การแบ่งชิ้นขาออก
- ขีดจำกัดชิ้นข้อความ:
channels.imessage.textChunkLimit(ค่าเริ่มต้น 4000) - โหมดการแบ่งชิ้น:
channels.imessage.chunkModelength(ค่าเริ่มต้น)newline(แบ่งโดยยึดย่อหน้าก่อน)
รูปแบบการระบุที่อยู่
รูปแบบการระบุที่อยู่
เป้าหมายแบบชัดเจนที่แนะนำ:
chat_id:123(แนะนำสำหรับการกำหนดเส้นทางที่เสถียร)chat_guid:...chat_identifier:...
imessage:+1555...sms:+1555...user@example.com
แอ็กชัน Private API
เมื่อimsg launch กำลังทำงานและ openclaw channels status --probe รายงาน privateApi.available: true เครื่องมือข้อความสามารถใช้แอ็กชันเนทีฟของ iMessage เพิ่มเติมจากการส่งข้อความปกติได้
แอ็กชันที่ใช้ได้
แอ็กชันที่ใช้ได้
- react: เพิ่ม/ลบ tapback ของ iMessage (
messageId,emoji,remove) tapback ที่รองรับแมปไปยัง love, like, dislike, laugh, emphasize และ question - reply: ส่งการตอบกลับแบบเธรดไปยังข้อความที่มีอยู่ (
messageId,textหรือmessageรวมถึงchatGuid,chatId,chatIdentifierหรือto) - sendWithEffect: ส่งข้อความพร้อมเอฟเฟกต์ iMessage (
textหรือmessage,effectหรือeffectId) - edit: แก้ไขข้อความที่ส่งแล้วบนเวอร์ชัน macOS/Private API ที่รองรับ (
messageId,textหรือnewText) - unsend: ถอนข้อความที่ส่งแล้วบนเวอร์ชัน macOS/Private API ที่รองรับ (
messageId) - upload-file: ส่งสื่อ/ไฟล์ (
bufferเป็น base64 หรือmedia/path/filePathที่เติมข้อมูลแล้ว,filename,asVoiceแบบไม่บังคับ) นามแฝงแบบเดิม:sendAttachment - renameGroup, setGroupIcon, addParticipant, removeParticipant, leaveGroup: จัดการแชตกลุ่มเมื่อเป้าหมายปัจจุบันเป็นการสนทนากลุ่ม
รหัสข้อความ
รหัสข้อความ
บริบท iMessage ขาเข้ามีทั้งค่า
MessageSid แบบสั้นและ GUID ข้อความแบบเต็มเมื่อมี รหัสแบบสั้นมีขอบเขตอยู่ในแคชการตอบกลับในหน่วยความจำล่าสุด และจะถูกตรวจสอบกับแชตปัจจุบันก่อนใช้งาน หากรหัสแบบสั้นหมดอายุหรือเป็นของแชตอื่น ให้ลองใหม่ด้วย MessageSidFull แบบเต็มการตรวจจับความสามารถ
การตรวจจับความสามารถ
OpenClaw จะซ่อนแอ็กชัน Private API เฉพาะเมื่อสถานะ probe ที่แคชไว้ระบุว่า bridge ไม่พร้อมใช้งาน หากไม่ทราบสถานะ แอ็กชันจะยังคงแสดงอยู่ และ dispatch จะ probe แบบ lazy เพื่อให้แอ็กชันแรกสำเร็จได้หลัง
imsg launch โดยไม่ต้องรีเฟรชสถานะด้วยตนเองแยกต่างหากใบตอบรับการอ่านและการพิมพ์
ใบตอบรับการอ่านและการพิมพ์
เมื่อ bridge ของ Private API ทำงาน แชตขาเข้าที่ได้รับการยอมรับจะถูกทำเครื่องหมายว่าอ่านแล้วก่อน dispatch และจะแสดงฟองการพิมพ์ให้ผู้ส่งเห็นขณะเอเจนต์กำลังสร้างคำตอบ ปิดการทำเครื่องหมายว่าอ่านแล้วด้วย:บิลด์
imsg รุ่นเก่าที่มาก่อนรายการความสามารถรายเมธอดจะปิดการพิมพ์/การอ่านแบบเงียบ ๆ OpenClaw จะบันทึกคำเตือนหนึ่งครั้งต่อการรีสตาร์ท เพื่อให้ระบุสาเหตุของใบตอบรับที่หายไปได้tapback ขาเข้า
tapback ขาเข้า
OpenClaw สมัครรับ tapback ของ iMessage และกำหนดเส้นทางปฏิกิริยาที่ได้รับการยอมรับเป็นเหตุการณ์ระบบแทนข้อความปกติ ดังนั้น tapback จากผู้ใช้จะไม่ทริกเกอร์ลูปการตอบกลับตามปกติโหมดการแจ้งเตือนควบคุมโดย
channels.imessage.reactionNotifications:"own"(ค่าเริ่มต้น): แจ้งเตือนเฉพาะเมื่อผู้ใช้ตอบสนองต่อข้อความที่บอตเป็นผู้เขียน"all": แจ้งเตือนสำหรับ tapback ขาเข้าทั้งหมดจากผู้ส่งที่ได้รับอนุญาต"off": เพิกเฉยต่อ tapback ขาเข้า
channels.imessage.accounts.<id>.reactionNotificationsการเขียนการกำหนดค่า
iMessage อนุญาตให้ช่องทางเริ่มการเขียนการกำหนดค่าได้โดยค่าเริ่มต้น (สำหรับ/config set|unset เมื่อ commands.config: true)
ปิดใช้งาน:
การรวมข้อความส่วนตัวที่ส่งแยก (คำสั่ง + URL ในการเขียนครั้งเดียว)
เมื่อผู้ใช้พิมพ์คำสั่งและ URL พร้อมกัน — เช่นDump https://example.com/article — แอป Messages ของ Apple จะแยกการส่งออกเป็น สองแถว chat.db แยกกัน:
- ข้อความตัวอักษร (
"Dump") - บอลลูนตัวอย่าง URL (
"https://...") พร้อมรูปภาพ OG-preview เป็นไฟล์แนบ
imsg เพิ่มเข้ามา
channels.imessage.coalesceSameSenderDms เลือกให้ DM รวมแถวต่อเนื่องจากผู้ส่งคนเดียวกันเป็นรอบเดียวของเอเจนต์ แชทกลุ่มยังคงส่งต่อทีละข้อความเพื่อรักษาโครงสร้างรอบของผู้ใช้หลายคนไว้
- ควรเปิดใช้เมื่อใด
- การเปิดใช้
- ข้อแลกเปลี่ยน
เปิดใช้เมื่อ:
- คุณจัดส่ง Skills ที่คาดหวัง
command + payloadในข้อความเดียว (dump, paste, save, queue ฯลฯ) - ผู้ใช้ของคุณวาง URL, รูปภาพ หรือเนื้อหายาว ๆ ควบคู่กับคำสั่ง
- คุณยอมรับ latency ของรอบ DM ที่เพิ่มขึ้นได้ (ดูด้านล่าง)
- คุณต้องการ latency ของคำสั่งต่ำสุดสำหรับ trigger DM คำเดียว
- flow ทั้งหมดของคุณเป็นคำสั่งแบบครั้งเดียวจบโดยไม่มี payload ตามมา
สถานการณ์และสิ่งที่เอเจนต์เห็น
| ผู้ใช้พิมพ์ | chat.db สร้าง | ปิดแฟล็ก (ค่าเริ่มต้น) | เปิดแฟล็ก + หน้าต่าง 2500 ms |
|---|---|---|---|
Dump https://example.com (ส่งครั้งเดียว) | 2 แถวห่างกัน ~1 s | เอเจนต์ 2 รอบ: มีแค่ “Dump” แล้วตามด้วย URL | รอบเดียว: ข้อความที่รวมแล้ว Dump https://example.com |
Save this 📎image.jpg caption (ไฟล์แนบ + ข้อความ) | 2 แถว | 2 รอบ (ไฟล์แนบตกหล่นเมื่อรวม) | รอบเดียว: รักษาข้อความ + รูปภาพไว้ |
/status (คำสั่งเดี่ยว) | 1 แถว | ส่งต่อทันที | รอได้สูงสุดถึงหน้าต่าง แล้วส่งต่อ |
| วาง URL เพียงอย่างเดียว | 1 แถว | ส่งต่อทันที | ส่งต่อทันที (มีเพียงหนึ่งรายการใน bucket) |
| ส่งข้อความ + URL เป็นสองข้อความแยกกันโดยตั้งใจ ห่างกันหลายนาที | 2 แถวนอกหน้าต่าง | 2 รอบ | 2 รอบ (หน้าต่างหมดอายุระหว่างกัน) |
| DM จำนวนมากอย่างรวดเร็ว (>10 DM สั้น ๆ ภายในหน้าต่าง) | N แถว | N รอบ | รอบเดียว เอาต์พุตมีขอบเขตจำกัด (ใช้รายการแรก + ล่าสุด และใช้ขีดจำกัดข้อความ/ไฟล์แนบ) |
| สองคนพิมพ์ในแชทกลุ่ม | N แถวจากผู้ส่ง M คน | M+ รอบ (หนึ่งรอบต่อ bucket ของผู้ส่ง) | M+ รอบ — แชทกลุ่มจะไม่ถูกนำมารวมกัน |
การตามข้อความหลัง Gateway หยุดทำงาน
เมื่อ Gateway ออฟไลน์ (แครช รีสตาร์ท Mac เข้าสู่โหมดพัก เครื่องปิด)imsg watch จะกลับมาทำงานต่อจากสถานะ chat.db ปัจจุบันเมื่อ Gateway กลับขึ้นมา — ตามค่าเริ่มต้น สิ่งใดก็ตามที่เข้ามาในช่วงขาดหายจะไม่ถูกเห็นเลย การตามข้อความย้อนหลังจะเล่นซ้ำข้อความเหล่านั้นในการเริ่มต้นครั้งถัดไป เพื่อให้เอเจนต์ไม่พลาด traffic ขาเข้าโดยไม่รู้ตัว
การตามข้อความย้อนหลังถูก ปิดไว้ตามค่าเริ่มต้น เปิดใช้เป็นรายช่องทาง:
วิธีทำงาน
ทำงานหนึ่งรอบต่อการเริ่มต้นmonitorIMessageProvider แต่ละครั้ง โดยเรียงลำดับเป็น imsg launch พร้อม → watch.subscribe → performIMessageCatchup → วนลูปส่งต่อสด ตัวการตามข้อความย้อนหลังเองใช้ chats.list + messages.history รายแชทผ่าน JSON-RPC client เดียวกับที่ imsg watch ใช้ สิ่งใดก็ตามที่เข้ามาระหว่างรอบการตามข้อความย้อนหลังจะไหลผ่านการส่งต่อสดตามปกติ cache inbound-dedupe ที่มีอยู่จะดูดซับส่วนที่ซ้อนทับกับแถวที่เล่นซ้ำ
แต่ละแถวที่เล่นซ้ำจะถูกป้อนผ่านเส้นทางการส่งต่อสด (evaluateIMessageInbound + dispatchInboundMessage) ดังนั้นรายการอนุญาต นโยบายกลุ่ม debouncer echo cache และใบยืนยันการอ่านจะทำงานเหมือนกันทั้งกับข้อความที่เล่นซ้ำและข้อความสด
ความหมายของ cursor และการ retry
การตามข้อความย้อนหลังเก็บ cursor รายบัญชีไว้ที่<openclawStateDir>/imessage/catchup/<account>__<hash>.json (ไดเรกทอรีสถานะ OpenClaw มีค่าเริ่มต้นเป็น ~/.openclaw และ override ได้ด้วย OPENCLAW_STATE_DIR):
- cursor จะเลื่อนไปข้างหน้าหลัง dispatch สำเร็จแต่ละครั้ง และจะค้างไว้เมื่อ dispatch ของแถว throw — การเริ่มต้นครั้งถัดไปจะลองแถวเดิมอีกครั้งจาก cursor ที่ค้างไว้
- หลังจาก throw ติดต่อกัน
maxFailureRetriesครั้งกับguidเดียวกัน การตามข้อความย้อนหลังจะบันทึกwarnและบังคับเลื่อน cursor ข้ามข้อความที่ติดค้าง เพื่อให้การเริ่มต้นครั้งต่อ ๆ ไปเดินหน้าต่อได้ - guid ที่ยอมแพ้ไปแล้วจะถูกข้ามทันทีที่พบ (ไม่มีความพยายาม dispatch) ในการรันภายหลัง และถูกนับใต้
skippedGivenUpในสรุปการรัน
สัญญาณที่ผู้ปฏิบัติการเห็นได้
WARN ... capped to perRunLimit หมายความว่าการเริ่มต้นครั้งเดียวไม่ได้ระบาย backlog ทั้งหมด เพิ่ม perRunLimit (สูงสุด 500) หากช่วงขาดหายของคุณเกินการผ่านค่าเริ่มต้น 50 แถวเป็นประจำ
เมื่อใดควรปล่อยให้ปิดไว้
- Gateway ทำงานต่อเนื่องพร้อม watchdog รีสตาร์ทอัตโนมัติ และช่วงขาดหายมัก < สองสามวินาที — ค่าเริ่มต้นที่ปิดไว้ก็เพียงพอ
- ปริมาณ DM ต่ำ และข้อความที่พลาดไปจะไม่เปลี่ยนพฤติกรรมของเอเจนต์ — หน้าต่างเริ่มต้น
firstRunLookbackMinutesอาจ dispatch บริบทเก่าที่ไม่คาดคิดเมื่อเปิดใช้ครั้งแรก
firstRunLookbackMinutes (ค่าเริ่มต้น 30 นาที) ไม่ใช่หน้าต่าง maxAgeMinutes ทั้งหมด — วิธีนี้หลีกเลี่ยงการเล่นซ้ำประวัติยาว ๆ ของข้อความก่อนเปิดใช้
การแก้ปัญหา
ไม่พบ imsg หรือไม่รองรับ RPC
ไม่พบ imsg หรือไม่รองรับ RPC
ตรวจสอบไบนารีและการรองรับ RPC:หาก probe รายงานว่าไม่รองรับ RPC ให้อัปเดต
imsg หากการดำเนินการผ่าน private API ไม่พร้อมใช้งาน ให้รัน imsg launch ใน session ผู้ใช้ macOS ที่ล็อกอินอยู่ แล้ว probe อีกครั้ง หาก Gateway ไม่ได้ทำงานบน macOS ให้ใช้การตั้งค่า Mac ระยะไกลผ่าน SSH ด้านบนแทนพาธ imsg ภายในเครื่องตามค่าเริ่มต้นGateway ไม่ได้ทำงานบน macOS
Gateway ไม่ได้ทำงานบน macOS
ค่าเริ่มต้น จากนั้นรัน:
cliPath: "imsg" ต้องทำงานบน Mac ที่ลงชื่อเข้าใช้ Messages บน Linux หรือ Windows ให้ตั้งค่า channels.imessage.cliPath เป็น wrapper script ที่ SSH ไปยัง Mac เครื่องนั้นและรัน imsg "$@"DM ถูกละเว้น
DM ถูกละเว้น
ตรวจสอบ:
channels.imessage.dmPolicychannels.imessage.allowFrom- การอนุมัติการจับคู่ (
openclaw pairing list imessage)
ข้อความกลุ่มถูกละเว้น
ข้อความกลุ่มถูกละเว้น
ตรวจสอบ:
channels.imessage.groupPolicychannels.imessage.groupAllowFrom- พฤติกรรมรายการอนุญาต
channels.imessage.groups - การกำหนดค่ารูปแบบการกล่าวถึง (
agents.list[].groupChat.mentionPatterns)
ไฟล์แนบระยะไกลล้มเหลว
ไฟล์แนบระยะไกลล้มเหลว
ตรวจสอบ:
channels.imessage.remoteHostchannels.imessage.remoteAttachmentRoots- การยืนยันตัวตนด้วยคีย์ SSH/SCP จากโฮสต์ Gateway
- host key มีอยู่ใน
~/.ssh/known_hostsบนโฮสต์ Gateway - สิทธิ์อ่านพาธระยะไกลบน Mac ที่รัน Messages
พลาดพรอมต์สิทธิ์ของ macOS
พลาดพรอมต์สิทธิ์ของ macOS
รันอีกครั้งในเทอร์มินัล GUI แบบ interactive ในบริบทผู้ใช้/session เดียวกัน และอนุมัติพรอมต์:ยืนยันว่า Full Disk Access + Automation ได้รับอนุญาตสำหรับบริบทของโปรเซสที่รัน OpenClaw/
imsgตัวชี้ไปยังเอกสารอ้างอิงการกำหนดค่า
ที่เกี่ยวข้อง
- ภาพรวมช่องทาง — ช่องทางที่รองรับทั้งหมด
- การนำ BlueBubbles ออกและพาธ iMessage ของ imsg — ประกาศและสรุปการย้าย
- ย้ายมาจาก BlueBubbles — ตารางแปลงการกำหนดค่าและขั้นตอนการเปลี่ยนระบบทีละขั้นตอน
- การจับคู่ — การยืนยันตัวตน DM และ flow การจับคู่
- กลุ่ม — พฤติกรรมแชทกลุ่มและการควบคุมด้วยการกล่าวถึง
- การกำหนดเส้นทางช่องทาง — การกำหนดเส้นทาง session สำหรับข้อความ
- ความปลอดภัย — โมเดลการเข้าถึงและการเสริมความแข็งแกร่ง