Mainstream messaging
ย้ายมาจาก BlueBubbles
การรองรับ BlueBubbles ถูกยกเลิกแล้ว OpenClaw รองรับ iMessage ผ่าน Plugin imessage ที่มาพร้อมระบบเท่านั้น ซึ่งควบคุม steipete/imsg ผ่าน JSON-RPC และเข้าถึงพื้นผิว API ส่วนตัวเดียวกับที่ BlueBubbles เคยใช้ (react, edit, unsend, reply, sendWithEffect, แบบสำรวจแบบเนทีฟ, การจัดการกลุ่ม, ไฟล์แนบ) ไบนารี CLI เดียวเข้ามาแทนที่เซิร์ฟเวอร์ BlueBubbles + แอปไคลเอนต์ + ระบบเชื่อมต่อ Webhook ทั้งหมด โดยไม่มีปลายทาง REST และไม่มีการยืนยันตัวตนของ Webhook
คู่มือนี้อธิบายการย้ายการกำหนดค่าเก่า channels.bluebubbles ไปยัง channels.imessage ไม่มีเส้นทางการย้ายอื่นที่รองรับ ใน OpenClaw เวอร์ชันปัจจุบัน บล็อก channels.bluebubbles ที่หลงเหลืออยู่จะไม่มีผล เนื่องจากไม่มีรันไทม์ใดอ่านบล็อกนี้
รายการตรวจสอบการย้าย
เส้นทางที่สั้นและปลอดภัยที่สุดเมื่อคุณทราบการกำหนดค่า BlueBubbles เดิมอยู่แล้ว:
- ตรวจสอบ
imsgโดยตรงบน Mac ที่ใช้งาน Messages.app (imsg chats,imsg history,imsg send,imsg rpc --help) - คัดลอกคีย์ด้านพฤติกรรมจาก
channels.bluebubblesไปยังchannels.imessage:dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,includeAttachments,attachmentRoots,mediaMaxMb,textChunkLimit,coalesceSameSenderDmsและactions - ลบคีย์การรับส่งข้อมูลที่ไม่มีอีกต่อไป ได้แก่
serverUrl,password, URL ของ Webhook และการตั้งค่าเซิร์ฟเวอร์ BlueBubbles - หาก Gateway ไม่ได้ทำงานบน Mac ที่ใช้ Messages ให้ตั้งค่า
channels.imessage.cliPathเป็นตัวห่อหุ้ม SSH และตั้งค่าremoteHostสำหรับการดึงไฟล์แนบจากระยะไกล - เปิดใช้
channels.imessageรีสตาร์ต Gateway แล้วเรียกใช้openclaw channels status --probe --channel imessage - ทดสอบข้อความส่วนตัวหนึ่งข้อความ กลุ่มที่อนุญาตหนึ่งกลุ่ม ไฟล์แนบหากเปิดใช้ และการดำเนินการ API ส่วนตัวทุกอย่างที่คุณคาดว่าเอเจนต์จะใช้
- ลบเซิร์ฟเวอร์ BlueBubbles และการกำหนดค่าเก่า
channels.bluebubblesหลังจากตรวจสอบแล้วว่าเส้นทาง iMessage ทำงานถูกต้อง
imsg ทำอะไร
imsg คือ CLI ภายในเครื่องสำหรับ Messages บน macOS OpenClaw เริ่ม imsg rpc เป็นโพรเซสลูกและสื่อสารด้วย JSON-RPC ผ่าน stdin/stdout ไม่มีเซิร์ฟเวอร์ HTTP, URL ของ Webhook, ดีมอนเบื้องหลัง, เอเจนต์เริ่มต้นระบบ หรือพอร์ตที่ต้องเปิดให้เข้าถึง
- การอ่านข้อมูลมาจาก
~/Library/Messages/chat.dbโดยใช้ตัวจัดการ SQLite แบบอ่านอย่างเดียว - ข้อความขาเข้าแบบสดมาจาก
imsg watch/watch.subscribeซึ่งติดตามเหตุการณ์ระบบไฟล์ของchat.dbโดยมีการสำรวจเป็นระยะเป็นกลไกสำรอง - การส่งใช้ระบบอัตโนมัติของ Messages.app สำหรับการส่งข้อความและไฟล์ทั่วไป
- การดำเนินการขั้นสูงใช้
imsg launchเพื่อฉีดตัวช่วยimsgเข้าไปใน Messages.app ซึ่งจะปลดล็อกการแจ้งว่าอ่านข้อความแล้ว ตัวบ่งชี้การกำลังพิมพ์ การส่งเนื้อหาแบบสมบูรณ์ การแก้ไข การยกเลิกส่ง การตอบกลับแบบเธรด tapback แบบสำรวจ และการจัดการกลุ่ม - บิลด์สำหรับ Linux สามารถตรวจสอบ
chat.dbที่คัดลอกมาได้ แต่ไม่สามารถส่งข้อความ เฝ้าดูฐานข้อมูลสดบน Mac หรือควบคุม Messages.app ได้ สำหรับ iMessage ของ OpenClaw ให้เรียกใช้imsgบน Mac ที่ลงชื่อเข้าใช้แล้ว หรือผ่านตัวห่อหุ้ม SSH ไปยัง Mac เครื่องนั้น
ก่อนเริ่มต้น
-
ติดตั้ง
imsgบน Mac ที่ใช้งาน Messages.app:bash brew install steipete/tap/imsgbrew update && brew upgrade imsgimsg --versionimsg chats --limit 3สำหรับการตั้งค่าภายในเครื่องทั่วไป การตั้งค่า OpenClaw สามารถเสนอการติดตั้งหรืออัปเดต
imsgผ่าน Homebrew โดยให้ผู้ใช้ยืนยัน บน Mac ที่ลงชื่อเข้าใช้ Messages แล้ว ส่วนการตั้งค่าด้วยตนเองและโทโพโลยีแบบตัวห่อหุ้ม SSH ยังคงอยู่ภายใต้การจัดการของผู้ดำเนินการ ให้ทำการอัปเดต Homebrew ซ้ำในบริบทผู้ใช้ภายในเครื่องหรือระยะไกลเดียวกับที่จะเรียกใช้imsgหากimsg chatsล้มเหลวโดยแสดงunable to open database fileไม่มีผลลัพธ์ หรือแสดงauthorization deniedให้มอบสิทธิ์ Full Disk Access แก่เทอร์มินัล โปรแกรมแก้ไข โพรเซส Node บริการ Gateway หรือโพรเซสแม่ของ SSH ที่เปิดใช้imsgแล้วเปิดโพรเซสแม่นั้นใหม่ -
ตรวจสอบพื้นผิวการอ่าน การเฝ้าดู การส่ง และ RPC ก่อนเปลี่ยนการกำหนดค่า OpenClaw:
bash imsg chats --limit 10 --json | jq -simsg history --chat-id 42 --limit 10 --attachments --json | jq -simsg watch --chat-id 42 --reactions --jsonimsg send --chat-id 42 --text "OpenClaw imsg test"imsg rpc --helpแทนที่
42ด้วยรหัสแชตจริงจากimsg chatsการส่งต้องมีสิทธิ์ Automation สำหรับ Messages.app หาก OpenClaw จะทำงานผ่าน SSH ให้เรียกใช้คำสั่งเหล่านี้ผ่านตัวห่อหุ้ม SSH หรือบริบทผู้ใช้เดียวกับที่ OpenClaw จะใช้ หากการอ่านทำงานแต่การส่งล้มเหลวด้วย AppleEvents-1743ให้ตรวจสอบว่าสิทธิ์ Automation ถูกกำหนดให้กับ/usr/libexec/sshd-keygen-wrapperหรือไม่ โปรดดู การส่งผ่านตัวห่อหุ้ม SSH ล้มเหลวด้วย AppleEvents -1743 -
เปิดใช้บริดจ์ API ส่วนตัว ขอแนะนำอย่างยิ่งสำหรับ iMessage ของ OpenClaw เนื่องจากการตอบกลับ tapback เอฟเฟกต์ แบบสำรวจ การตอบกลับไฟล์แนบ และการดำเนินการกับกลุ่มต้องพึ่งพาบริดจ์นี้:
bash imsg launchimsg status --jsonimsg launchกำหนดให้ปิดใช้ SIP (และบน macOS รุ่นใหม่ ต้องผ่อนคลายการตรวจสอบความถูกต้องของไลบรารีด้วย โปรดดู การเปิดใช้ API ส่วนตัวของ imsg) การส่งพื้นฐาน ประวัติ และการเฝ้าดูทำงานได้โดยไม่ต้องใช้imsg launchแต่พื้นผิวการดำเนินการ iMessage ทั้งหมดของ OpenClaw จะไม่ทำงาน -
หลังจากเปิดใช้
channels.imessageและเริ่ม Gateway แล้ว ให้ตรวจสอบบริดจ์ผ่าน OpenClaw:bash openclaw channels status --probeบัญชี iMessage ควรรายงาน
worksเมื่อใช้--jsonเพย์โหลดการตรวจสอบจะมีprivateApi.available: trueหากรายงานfalseให้แก้ไขปัญหานั้นก่อน โปรดดู การตรวจหาความสามารถ การตรวจสอบต้องเข้าถึง Gateway ได้ (มิฉะนั้น CLI จะย้อนกลับไปแสดงผลลัพธ์จากการกำหนดค่าเท่านั้น) และจะตรวจสอบเฉพาะบัญชีที่กำหนดค่าและเปิดใช้แล้ว -
สำรองภาพรวมการกำหนดค่าของคุณ:
bash cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak
การแปลงการกำหนดค่า
iMessage และ BlueBubbles ใช้คีย์ด้านพฤติกรรมระดับช่องทางส่วนใหญ่ร่วมกัน สิ่งที่เปลี่ยนคือการรับส่งข้อมูล (เซิร์ฟเวอร์ REST เทียบกับ CLI ภายในเครื่อง) และรูปแบบคีย์รีจิสทรีของกลุ่ม
| BlueBubbles | iMessage ที่รวมมาให้ | หมายเหตุ |
|---|---|---|
channels.bluebubbles.enabled |
channels.imessage.enabled |
ความหมายเหมือนกัน (ค่าเริ่มต้นเป็น true เมื่อมีบล็อกนี้) |
channels.bluebubbles.serverUrl |
(นำออกแล้ว) | ไม่มีเซิร์ฟเวอร์ REST — Plugin จะเรียกใช้ imsg rpc ผ่าน stdio |
channels.bluebubbles.password |
(นำออกแล้ว) | ไม่จำเป็นต้องยืนยันตัวตนของ Webhook |
| (โดยนัย) | channels.imessage.cliPath |
พาธไปยัง imsg (ค่าเริ่มต้น imsg); ใช้สคริปต์ตัวหุ้มสำหรับ SSH |
| (โดยนัย) | channels.imessage.dbPath |
ตัวเลือกสำหรับแทนที่ chat.db ของ Messages.app; ตรวจหาโดยอัตโนมัติหากละไว้ |
| (โดยนัย) | channels.imessage.remoteHost |
host หรือ user@host — จำเป็นเฉพาะเมื่อ cliPath เป็นตัวหุ้ม SSH และต้องการดึงไฟล์แนบผ่าน SCP |
channels.bluebubbles.dmPolicy |
channels.imessage.dmPolicy |
ค่าเหมือนกัน (pairing / allowlist / open / disabled); ค่าเริ่มต้น pairing |
channels.bluebubbles.allowFrom |
channels.imessage.allowFrom |
รูปแบบแฮนเดิลเหมือนกัน (+15555550123, user@example.com) การอนุมัติในที่เก็บการจับคู่จะไม่ถูกโอนย้าย — ดูด้านล่าง |
channels.bluebubbles.groupPolicy |
channels.imessage.groupPolicy |
ค่าเหมือนกัน (allowlist / open / disabled); ค่าเริ่มต้น allowlist |
channels.bluebubbles.groupAllowFrom |
channels.imessage.groupAllowFrom |
เหมือนกัน หากไม่ได้ตั้งค่า iMessage จะย้อนกลับไปใช้ allowFrom; การกำหนด groupAllowFrom: [] เป็นค่าว่างอย่างชัดเจนจะบล็อกทุกกลุ่มภายใต้ groupPolicy: "allowlist" |
channels.bluebubbles.groups |
channels.imessage.groups |
คัดลอกรายการไวลด์การ์ด "*" ตามเดิมทุกประการ; เปลี่ยนคีย์ของรายการแต่ละกลุ่มเป็น chat_id แบบตัวเลขของ iMessage — ดู "ข้อผิดพลาดที่พบบ่อยเกี่ยวกับรีจิสทรีกลุ่ม" ค่า requireMention, tools, toolsBySender, systemPrompt สามารถใช้ต่อได้ |
channels.bluebubbles.sendReadReceipts |
channels.imessage.sendReadReceipts |
ค่าเริ่มต้น true เมื่อใช้ Plugin ที่รวมมาให้ ฟังก์ชันนี้จะทำงานเฉพาะเมื่อตัวตรวจสอบ API ส่วนตัวพร้อมใช้งาน |
channels.bluebubbles.includeAttachments |
channels.imessage.includeAttachments |
โครงสร้างเหมือนกัน และค่าเริ่มต้นปิดเหมือนกัน หากไฟล์แนบเคยส่งผ่าน BlueBubbles ให้ตั้งค่านี้อย่างชัดเจน — รูปภาพ/สื่อขาเข้าจะถูกละทิ้งโดยไม่มีการแจ้งเตือน (ไม่มีบรรทัดบันทึก Inbound message) จนกว่าจะตั้งค่า |
channels.bluebubbles.attachmentRoots |
channels.imessage.attachmentRoots |
รากพาธภายในเครื่อง; ใช้กฎไวลด์การ์ดเหมือนกัน |
| (ไม่มี) | channels.imessage.remoteAttachmentRoots |
ใช้เฉพาะเมื่อตั้งค่า remoteHost สำหรับการดึงผ่าน SCP |
channels.bluebubbles.mediaMaxMb |
channels.imessage.mediaMaxMb |
ค่าเริ่มต้นบน iMessage คือ 16 MB (ค่าเริ่มต้นของ BlueBubbles คือ 8 MB) ตั้งค่าอย่างชัดเจนเพื่อคงขีดจำกัดที่ต่ำกว่าไว้ |
channels.bluebubbles.textChunkLimit |
channels.imessage.textChunkLimit |
ค่าเริ่มต้นของทั้งสองระบบคือ 4000 |
channels.bluebubbles.coalesceSameSenderDms |
channels.imessage.coalesceSameSenderDms |
เป็นตัวเลือกที่ต้องเปิดใช้งานเหมือนกัน ใช้กับ DM เท่านั้น — กลุ่มยังคงส่งต่อแยกต่อข้อความ เพิ่มค่าหน่วงการรับข้อความขาเข้าเริ่มต้นเป็น 7000 ms เว้นแต่จะตั้งค่า messages.inbound.byChannel.imessage หรือ messages.inbound.debounceMs ส่วนกลางไว้ ดู การรวม DM ที่ส่งแยกส่วน |
channels.bluebubbles.enrichGroupParticipantsFromContacts |
(ไม่มี) | imsg แสดงชื่อที่ใช้แสดงของผู้ส่งจาก chat.db อยู่แล้ว |
channels.bluebubbles.actions.* |
channels.imessage.actions.* |
สวิตช์เปิด/ปิดต่อการกระทำเหมือนกัน (reactions, edit, unsend, reply, sendWithEffect, renameGroup, setGroupIcon, addParticipant, removeParticipant, leaveGroup, sendAttachment) และเพิ่ม polls ใหม่ ทั้งหมดเปิดใช้งานเป็นค่าเริ่มต้น; การกระทำผ่าน API ส่วนตัวยังคงต้องใช้บริดจ์ |
การกำหนดค่าหลายบัญชี (channels.bluebubbles.accounts.*) แปลงแบบหนึ่งต่อหนึ่งเป็น channels.imessage.accounts.*
ข้อผิดพลาดที่พบบ่อยเกี่ยวกับรีจิสทรีกลุ่ม
Plugin iMessage ที่รวมมาให้ใช้ด่านตรวจสอบกลุ่มสองด่านต่อเนื่องกัน ข้อความกลุ่มต้องผ่านทั้งสองด่านจึงจะไปถึงเอเจนต์ได้:
- รายการอนุญาตผู้ส่ง / เป้าหมายแชต (
channels.imessage.groupAllowFrom) — จับคู่แฮนเดิลผู้ส่งหรือเป้าหมายแชต (รายการchat_id:,chat_guid:,chat_identifier:) เมื่อไม่ได้ตั้งค่าgroupAllowFromด่านนี้จะย้อนกลับไปใช้allowFrom; การกำหนดgroupAllowFrom: []อย่างชัดเจนจะปิดการย้อนกลับดังกล่าวและละทิ้งข้อความกลุ่มทั้งหมดภายใต้groupPolicy: "allowlist" - รีจิสทรีกลุ่ม (
channels.imessage.groups) — ใช้chat_idแบบตัวเลขของ iMessage เป็นคีย์:- ไม่มีบล็อก
groups(หรือเป็นบล็อกว่าง): กลุ่มจะผ่านด่านนี้ตราบใดที่ด่าน 1 มีรายการอนุญาตผู้ส่งที่มีผลและไม่ว่าง การกรองผู้ส่งจะควบคุมการเข้าถึง และจะไม่มีคำเตือนตอนเริ่มต้นว่าละทิ้งทั้งหมด groupsมีรายการแต่ไม่มี"*": เฉพาะคีย์chat_idที่ระบุไว้เท่านั้นที่ผ่าน การระบุกลุ่มใดก็ตามจะเปลี่ยนรีจิสทรีให้เป็นรายการอนุญาต แม้อยู่ภายใต้groupPolicy: "open"groups: { "*": { ... } }: ทุกกลุ่มจะผ่านด่านนี้
- ไม่มีบล็อก
กับดักในการย้ายข้อมูล: BlueBubbles ใช้ GUID ของแชต / ตัวระบุแชตเป็นคีย์ของรายการ groups ขณะที่รีจิสทรีของ iMessage ใช้ chat_id แบบตัวเลข การคัดลอกรายการแต่ละกลุ่มตามเดิมจะสร้างรีจิสทรีที่ไม่ว่างแต่ไม่มีคีย์ใดตรงกัน ทำให้ข้อความกลุ่มทั้งหมดถูกละทิ้งที่ด่าน 2 ให้คัดลอกไวลด์การ์ด "*" ตามเดิมทุกประการ; เปลี่ยนคีย์ของรายการกลุ่มเฉพาะโดยใช้ค่า chat_id จาก imsg chats
เส้นทางการละทิ้งทั้งสองแบบมองเห็นได้ที่ระดับบันทึกเริ่มต้นผ่านบรรทัด 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โดยระบุคีย์ที่ต้องเพิ่มอย่างชัดเจน
DM ยังคงทำงานได้ไม่ว่ากรณีใด — DM ใช้เส้นทางโค้ดที่ต่างออกไป ดังนั้นความสำเร็จของ DM ไม่ได้พิสูจน์ว่าการกำหนดเส้นทางกลุ่มทำงาน
การกำหนดค่าขั้นต่ำแบบจำกัดตามผู้ส่งร่วมกับ groupPolicy: "allowlist":
{ channels: { imessage: { groupPolicy: "allowlist", groupAllowFrom: ["+15555550123", "chat_guid:any;-;..."], }, },}การกำหนดค่านี้อนุญาตผู้ส่งที่ระบุไว้ในทุกกลุ่ม เพิ่มรายการ groups เพื่อจำกัดขอบเขตแชตที่อนุญาต หรือตั้งค่าตัวเลือกต่อแชต เช่น requireMention; คัดลอกรายการ "*" ของ BlueBubbles ตามเดิมทุกประการ แต่เปลี่ยนคีย์ของรายการเฉพาะเป็นค่า chat_id แบบตัวเลขของ iMessage
ทีละขั้นตอน
-
แปลการกำหนดค่า ระหว่างแก้ไขให้บล็อกใหม่ยังคงปิดใช้งานไว้ บล็อก
channels.bluebubblesเดิมจะถูก OpenClaw เวอร์ชันปัจจุบันเพิกเฉย จึงสามารถเก็บไว้ข้างกันเพื่อใช้อ้างอิงได้:json5 { channels: { imessage: { enabled: false, // flip to true when ready to cut over cliPath: "/opt/homebrew/bin/imsg", dmPolicy: "pairing", allowFrom: ["+15555550123"], // copy from bluebubbles.allowFrom groupPolicy: "allowlist", groupAllowFrom: [], // copy from bluebubbles.groupAllowFrom groups: { "*": { requireMention: true } }, // wildcard copies verbatim; re-key per-chat entries by chat_id // actions default to enabled; set individual toggles false to disable }, },} -
สลับระบบและตรวจสอบ ตั้งค่า
channels.imessage.enabled: trueเริ่ม Gateway ใหม่ และยืนยันว่าช่องทางรายงานว่าสถานะปกติ:bash openclaw gateway restartopenclaw channels status --probe --channel imessage # expect "works"; --json shows privateApi.available: trueการตรวจสอบต้องเชื่อมต่อ Gateway ได้ และจะตรวจสอบเฉพาะบัญชีที่กำหนดค่าและเปิดใช้งานแล้วเท่านั้น ใช้คำสั่ง
imsgโดยตรงใน ก่อนเริ่มต้น เพื่อตรวจสอบเครื่อง Mac โดยตรง -
ตรวจสอบข้อความส่วนตัว ส่งข้อความส่วนตัวถึงเอเจนต์และยืนยันว่าได้รับข้อความตอบกลับ
-
ตรวจสอบกลุ่มแยกต่างหาก ข้อความส่วนตัวและกลุ่มใช้เส้นทางโค้ดต่างกัน ความสำเร็จของข้อความส่วนตัวไม่ได้ยืนยันว่าการกำหนดเส้นทางของกลุ่มทำงาน ส่งข้อความในแชตกลุ่มที่อนุญาตและยืนยันว่าได้รับข้อความตอบกลับ หากกลุ่มเงียบไป (ไม่มีข้อความตอบกลับจากเอเจนต์และไม่มีข้อผิดพลาด) ให้ตรวจสอบบันทึกของ Gateway เพื่อหาสองบรรทัด
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
ภาพรวมความเท่าเทียมของการดำเนินการ
| การดำเนินการ | BlueBubbles รุ่นเดิม | iMessage ที่รวมมาให้ |
|---|---|---|
| ส่งข้อความ / ใช้ SMS สำรอง | ✅ | ✅ |
| ส่งสื่อ (รูปภาพ วิดีโอ ไฟล์ เสียง) | ✅ | ✅ |
ตอบกลับแบบเธรด (reply_to_guid) |
✅ | ✅ (ปิด #51892) |
Tapback (react) |
✅ | ✅ |
| แก้ไข / ยกเลิกการส่ง (ผู้รับที่ใช้ macOS 13 ขึ้นไป) | ✅ | ✅ |
| ส่งพร้อมเอฟเฟกต์หน้าจอ | ✅ | ✅ (ปิดบางส่วนของ #9394) |
| ข้อความแบบริชเท็กซ์ ตัวหนา / ตัวเอียง / ขีดเส้นใต้ / ขีดฆ่า | ✅ | ✅ (จัดรูปแบบช่วงข้อความแบบมีชนิดผ่าน attributedBody) |
| แบบสำรวจเนทีฟของ Messages (สร้างและลงคะแนน) | ❌ | ✅ (actions.polls; ผู้รับต้องใช้ iOS/macOS 26 ขึ้นไปจึงจะแสดงผลแบบเนทีฟได้) |
| เปลี่ยนชื่อกลุ่ม / ตั้งไอคอนกลุ่ม | ✅ | ✅ |
| เพิ่ม / ลบผู้เข้าร่วม หรือออกจากกลุ่ม | ✅ | ✅ |
| ใบตอบรับการอ่านและตัวบ่งชี้การพิมพ์ | ✅ | ✅ (ขึ้นอยู่กับผลการตรวจสอบ private API) |
| รวมข้อความส่วนตัวจากผู้ส่งคนเดียวกัน | ✅ | ✅ (เฉพาะข้อความส่วนตัว ต้องเลือกเปิดผ่าน channels.imessage.coalesceSameSenderDms) |
| กู้คืนข้อความขาเข้าหลังเริ่มระบบใหม่ | ✅ | ✅ (อัตโนมัติ: เล่นซ้ำจาก since_rowid + กำจัดข้อมูลซ้ำด้วย GUID; ใช้ช่วงกว้างขึ้นเมื่อทำงานภายในเครื่อง) |
iMessage จะกู้คืนข้อความที่พลาดไประหว่าง Gateway หยุดทำงาน โดยเมื่อเริ่มต้น ระบบจะเล่นซ้ำตั้งแต่ rowid ล่าสุดที่ส่งต่อแล้วผ่าน imsg watch.subscribe since_rowid กำจัดข้อมูลซ้ำด้วย GUID และใช้ขอบเขตอายุของรายการค้างเก่าเพื่อระงับ "ระเบิดรายการค้าง" จากการล้างข้อมูล Push กระบวนการนี้ทำงานผ่านการเชื่อมต่อ RPC ของ imsg จึงใช้ได้กับการตั้งค่า cliPath ผ่าน SSH ระยะไกลด้วย ส่วนการตั้งค่าภายในเครื่องจะมีช่วงการกู้คืนที่กว้างกว่า เนื่องจากสามารถอ่าน chat.db ได้ ดู การกู้คืนข้อความขาเข้าหลังเริ่มบริดจ์หรือ Gateway ใหม่
การจับคู่ เซสชัน และการผูก ACP
- รายการที่อนุญาตย้ายตามแฮนเดิลได้
channels.imessage.allowFromรองรับสตริง+15555550123/user@example.comแบบเดียวกับที่ BlueBubbles ใช้ ให้คัดลอกตามเดิมทุกประการ - การอนุมัติในที่เก็บการจับคู่จะไม่ย้ายตามไป ที่เก็บการจับคู่แยกตามช่องทาง และไม่มีสิ่งใดย้ายที่เก็บ 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 เริ่ม Gateway ใหม่ แก้ไขสิ่งที่ขัดขวาง imsg แล้วลองสลับระบบอีกครั้ง
แคชการตอบกลับอยู่ในสถานะ Plugin แบบ SQLite คำสั่ง openclaw doctor --fix จะนำเข้าและเก็บถาวรไฟล์ประกอบ imessage/reply-cache.jsonl เดิมหากมีอยู่
ที่เกี่ยวข้อง
- การนำ BlueBubbles ออกและเส้นทาง iMessage ผ่าน imsg — ประกาศสั้นและข้อมูลสรุปสำหรับผู้ดูแลระบบ
- iMessage — เอกสารอ้างอิงฉบับเต็มของช่องทาง iMessage รวมถึงการตั้งค่า
imsg launchและการตรวจหาความสามารถ /channels/bluebubbles— URL เดิมที่เปลี่ยนเส้นทางมายังคู่มือการย้ายระบบนี้- การจับคู่ — การยืนยันตัวตนของข้อความส่วนตัวและขั้นตอนการจับคู่
- การกำหนดเส้นทางช่องทาง — วิธีที่ Gateway เลือกช่องทางสำหรับข้อความตอบกลับขาออก