Mainstream messaging
مهاجرت از BlueBubbles
پشتیبانی از BlueBubbles حذف شد. OpenClaw فقط از طریق Plugin همراه imessage از iMessage پشتیبانی میکند؛ این Plugin، 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وactions. - کلیدهای انتقالی را که دیگر وجود ندارند حذف کنید:
serverUrl،password، نشانیهای Webhook و راهاندازی سرور BlueBubbles. - اگر Gateway روی Mac میزبان Messages اجرا نمیشود،
channels.imessage.cliPathرا روی یک لفاف SSH تنظیم کنید و برای واکشی راهدور پیوستها،remoteHostرا تنظیم کنید. channels.imessageرا فعال و Gateway را دوباره راهاندازی کنید، سپسopenclaw channels status --probe --channel imessageرا اجرا کنید.- یک پیام مستقیم، یک گروه مجاز، در صورت فعالبودن پیوستها، و تمام کنشهای API خصوصی مورد انتظار برای استفادهٔ عامل را آزمایش کنید.
- پس از تأیید مسیر iMessage، سرور BlueBubbles و پیکربندی قدیمی
channels.bluebubblesرا حذف کنید.
کارکرد imsg
imsg یک CLI محلی macOS برای Messages است. OpenClaw، imsg rpc را بهعنوان فرایند فرزند آغاز میکند و از طریق ورودی/خروجی استاندارد با JSON-RPC ارتباط برقرار میکند. هیچ سرور HTTP، نشانی Webhook، دیمن پسزمینه، عامل راهانداز یا درگاهی برای در معرض دسترس قراردادن وجود ندارد.
- خواندن از
~/Library/Messages/chat.dbبا استفاده از یک دستگیرهٔ فقطخواندنی SQLite انجام میشود. - پیامهای ورودی زنده از
imsg watch/watch.subscribeمیآیند که رویدادهای سیستم فایلchat.dbرا با روش جایگزین نظرسنجی دنبال میکند. - ارسال متن و فایل معمولی از خودکارسازی Messages.app استفاده میکند.
- کنشهای پیشرفته از
imsg launchبرای تزریق ابزار کمکیimsgبه Messages.app استفاده میکنند. این همان چیزی است که رسید خواندن، نشانگرهای تایپ، ارسالهای غنی، ویرایش، لغو ارسال، پاسخ رشتهای، واکنشها، نظرسنجیها و مدیریت گروه را فعال میکند. - ساختهای 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 میتواند نصب یا بهروزرسانی تأییدشده توسط کاربر با Homebrew را برای
imsgروی Mac واردشده به حساب Messages پیشنهاد دهد. راهاندازی دستی و توپولوژیهای لفاف SSH همچنان تحت مدیریت اپراتور هستند: بهروزرسانی Homebrew را در همان زمینهٔ کاربری محلی یا راهدوری تکرار کنید کهimsgرا اجرا خواهد کرد. اگرimsg chatsباunable to open database file، خروجی خالی یاauthorization deniedناموفق شد، دسترسی کامل دیسک را به ترمینال، ویرایشگر، فرایند Node، سرویس Gateway یا فرایند والد SSH کهimsgرا اجرا میکند اعطا کنید، سپس آن فرایند والد را دوباره باز کنید. -
پیش از تغییر پیکربندی OpenClaw، سطوح خواندن، نظارت، ارسال و RPC را بررسی کنید:
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 --help42را با یک شناسهٔ واقعی گفتوگو ازimsg chatsجایگزین کنید. ارسال به مجوز Automation برای Messages.app نیاز دارد. اگر OpenClaw از طریق SSH اجرا خواهد شد، این فرمانها را با همان لفاف SSH یا زمینهٔ کاربری اجرا کنید که OpenClaw استفاده خواهد کرد. اگر خواندن کار میکند اما ارسال با AppleEvents -1743ناموفق میشود، بررسی کنید که آیا Automation به/usr/libexec/sshd-keygen-wrapperاختصاص یافته است؛ به شکست ارسال از طریق لفاف SSH با AppleEvents -1743 مراجعه کنید. -
پل API خصوصی را فعال کنید. این کار برای iMessage در OpenClaw اکیداً توصیه میشود، زیرا پاسخها، واکنشها، جلوهها، نظرسنجیها، پاسخ به پیوستها و کنشهای گروهی به آن وابستهاند:
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 |
(حذفشده) | این کلید را مهاجرت ندهید. imsg نسخه 0.13.1 و جدیدتر، ارسالهای تقسیمشده پیشنمایش URL اپل را پیش از دریافت آنها توسط OpenClaw ادغام میکند؛ openclaw doctor --fix یک کلید منسوخ iMessage را حذف میکند. |
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 ورودیهای groups را با GUID گپ / شناسه گپ کلیدگذاری میکرد، اما رجیستری 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که کلید دقیق موردنیاز برای افزودن را نام میبرد.
پیامهای مستقیم در هر دو حالت همچنان کار میکنند — آنها مسیر کد متفاوتی دارند، بنابراین موفقیت پیام مستقیم، مسیریابی گروهی را اثبات نمیکند.
حداقل پیکربندی محدودشده به فرستنده با groupPolicy: "allowlist":
{ channels: { imessage: { groupPolicy: "allowlist", groupAllowFrom: ["+15555550123", "chat_guid:any;-;..."], }, },}این پیکربندی فرستندگان تنظیمشده را در هر گروهی میپذیرد. برای محدودکردن گپهای مجاز یا تنظیم گزینههای هر گپ مانند requireMention، ورودیهای groups را اضافه کنید؛ ورودی "*" مربوط به BlueBubbles را عیناً کپی کنید، اما کلید ورودیهای مشخص را با مقادیر عددی chat_id در iMessage تغییر دهید.
گامبهگام
-
پیکربندی را تبدیل کنید. هنگام ویرایش، بلوک جدید را غیرفعال نگه دارید؛ بلوک قدیمی
channels.bluebubblesدر OpenClaw کنونی نادیده گرفته میشود و میتواند بهعنوان مرجع در کنار آن باقی بماند:json5 { channels: { imessage: { enabled: false, // وقتی برای انتقال آماده شد، به true تغییر دهید cliPath: "/opt/homebrew/bin/imsg", dmPolicy: "pairing", allowFrom: ["+15555550123"], // از bluebubbles.allowFrom کپی کنید groupPolicy: "allowlist", groupAllowFrom: [], // از bluebubbles.groupAllowFrom کپی کنید groups: { "*": { requireMention: true } }, // مقدار عام عیناً کپی میشود؛ کلید ورودیهای هر گپ را بر اساس chat_id تغییر دهید // کنشها بهطور پیشفرض فعالاند؛ برای غیرفعالکردن، کلیدهای تغییر وضعیت هر مورد را روی false تنظیم کنید }, },} -
انتقال و کاوش را انجام دهید.
channels.imessage.enabled: trueرا تنظیم کنید، Gateway را دوباره راهاندازی کنید و تأیید کنید که کانال وضعیت سالم گزارش میکند:bash openclaw gateway restartopenclaw channels status --probe --channel imessage # انتظار میرود "works"؛ --json مقدار privateApi.available: true را نشان میدهدکاوش به یک Gateway دردسترس نیاز دارد و فقط حسابهای پیکربندیشده و فعال را بررسی میکند. برای اعتبارسنجی خود Mac، از فرمانهای مستقیم
imsgدر پیش از شروع استفاده کنید. -
پیامهای مستقیم را تأیید کنید. یک پیام مستقیم برای عامل بفرستید؛ تأیید کنید که پاسخ دریافت میشود.
-
گروهها را جداگانه تأیید کنید. پیامهای مستقیم و گروهها از مسیرهای کد متفاوتی عبور میکنند — موفقیت پیام مستقیم، مسیریابی گروهها را اثبات نمیکند. در یک گفتوگوی گروهی مجاز پیامی بفرستید و تأیید کنید که پاسخ دریافت میشود. اگر گروه بیپاسخ ماند (نه پاسخی از عامل و نه خطایی)، گزارش Gateway را برای دو خط
warnاز بخش «دام رجیستری گروه» در بالا بررسی کنید. هشدار هنگام راهاندازی یعنی فهرست مجاز فرستندگان مؤثر خالی است؛ هشدار مختص هرchat_idیعنی رجیستری پرشدهٔgroupsآن گفتوگو را دربر نمیگیرد. -
سطح کنشها را تأیید کنید. از یک پیام مستقیم جفتشده، از عامل بخواهید واکنش نشان دهد، ویرایش کند، ارسال را لغو کند، پاسخ دهد، عکس بفرستد و (در یک گروه) نام گروه را تغییر دهد یا شرکتکنندهای را اضافه/حذف کند. هر کنش باید بهصورت بومی در Messages.app انجام شود. اگر کنشی خطای
iMessage <action> requires the imsg private API bridgeایجاد کرد، دوبارهimsg launchرا اجرا کنید و باopenclaw channels status --probeتازهسازی کنید. -
پس از تأیید پیامهای مستقیم، گروهها و کنشهای iMessage، سرور BlueBubbles و بلوک
channels.bluebubblesرا حذف کنید. OpenClaw مقدارchannels.bluebubblesرا نمیخواند.
مقایسهٔ اجمالی کنشها
| کنش | BlueBubbles قدیمی | iMessage همراه |
|---|---|---|
| ارسال متن / بازگشت به SMS | ✅ | ✅ |
| ارسال رسانه (عکس، ویدئو، فایل، صدا) | ✅ | ✅ |
پاسخ رشتهای (reply_to_guid) |
✅ | ✅ (#51892 را میبندد) |
Tapback (react) |
✅ | ✅ |
| ویرایش / لغو ارسال (گیرندگان macOS 13+) | ✅ | ✅ |
| ارسال با جلوهٔ صفحهنمایش | ✅ | ✅ (بخشی از #9394 را میبندد) |
| متن غنی پررنگ / مورب / زیرخطدار / خطخورده | ✅ | ✅ (قالببندی typed-run از طریق attributedBody) |
| نظرسنجیهای بومی Messages (ایجاد و رأیدادن) | ❌ | ✅ (actions.polls؛ گیرندگان برای نمایش بومی به iOS/macOS 26+ نیاز دارند) |
| تغییر نام گروه / تنظیم نماد گروه | ✅ | ✅ |
| افزودن / حذف شرکتکننده، ترک گروه | ✅ | ✅ |
| رسید خواندن و نشانگر تایپ | ✅ | ✅ (مشروط به کاوش API خصوصی) |
| یکپارچهسازی ارسال تفکیکشدهٔ پیشنمایش URL اپل | ✅ | ✅ (در بالادست توسط imsg 0.13.1 و جدیدتر مدیریت میشود؛ بدون تنظیم OpenClaw) |
| بازیابی ورودی پس از راهاندازی مجدد | ✅ | ✅ (خودکار: بازپخش since_rowid + حذف تکرار GUID؛ پنجرهٔ گستردهتر در حالت محلی) |
iMessage پیامهایی را که هنگام توقف Gateway از دست رفتهاند بازیابی میکند: هنگام راهاندازی، از آخرین rowid ارسالشده از طریق imsg watch.subscribe since_rowid بازپخش میکند، موارد تکراری را بر اساس GUID حذف میکند و یک مرز سنی برای انباشت قدیمی، «بمب انباشت» Push-flush را مهار میکند. این فرایند روی اتصال RPC imsg اجرا میشود؛ بنابراین برای راهاندازیهای SSH راه دور cliPath نیز کار میکند. راهاندازیهای محلی پنجرهٔ بازیابی گستردهتری دارند، زیرا میتوانند 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 را برطرف کنید و گذار را دوباره امتحان کنید.
کش پاسخ در وضعیت SQLite Plugin قرار دارد. در صورت وجود، openclaw doctor --fix فایل جانبی قدیمی imessage/reply-cache.jsonl را وارد و بایگانی میکند.
مرتبط
- حذف BlueBubbles و مسیر imsg در iMessage — اطلاعیهای کوتاه و خلاصهای برای راهبر.
- iMessage — مرجع کامل کانال iMessage، شامل راهاندازی
imsg launchو تشخیص قابلیتها. /channels/bluebubbles— نشانی قدیمی که به این راهنمای مهاجرت هدایت میشود.- جفتسازی — احراز هویت پیام مستقیم و جریان جفتسازی.
- مسیریابی کانال — نحوهٔ انتخاب کانال توسط Gateway برای پاسخهای خروجی.