الانتقال إلى المحتوى الرئيسي

iMessage (قديم: imsg)

بالنسبة إلى عمليات نشر iMessage الجديدة، استخدم BlueBubbles.تكامل imsg قديم وقد تتم إزالته في إصدار مستقبلي.
الحالة: تكامل CLI خارجي قديم. يقوم Gateway بتشغيل imsg rpc والتواصل عبر JSON-RPC على stdio (من دون daemon/port منفصل).

BlueBubbles (موصى به)

مسار iMessage المفضل للإعدادات الجديدة.

الاقتران

تستخدم الرسائل المباشرة في iMessage وضع الاقتران افتراضيًا.

مرجع الإعدادات

مرجع كامل لحقول iMessage.

إعداد سريع

1

تثبيت imsg والتحقق منه

brew install steipete/tap/imsg
imsg rpc --help
2

إعداد OpenClaw

{
  channels: {
    imessage: {
      enabled: true,
      cliPath: "/usr/local/bin/imsg",
      dbPath: "/Users/<you>/Library/Messages/chat.db",
    },
  },
}
3

بدء gateway

openclaw gateway
4

الموافقة على أول اقتران رسالة مباشرة (سياسة dmPolicy الافتراضية)

openclaw pairing list imessage
openclaw pairing approve imessage <CODE>
تنتهي صلاحية طلبات الاقتران بعد ساعة واحدة.

المتطلبات والأذونات (macOS)

  • يجب أن يكون Messages مسجّل الدخول على Mac الذي يشغّل imsg.
  • يلزم Full Disk Access لسياق العملية التي تشغّل OpenClaw/imsg (للوصول إلى قاعدة بيانات Messages).
  • يلزم إذن Automation لإرسال الرسائل عبر Messages.app.
يتم منح الأذونات لكل سياق عملية. إذا كان gateway يعمل بلا واجهة (LaunchAgent/SSH)، فشغّل أمرًا تفاعليًا لمرة واحدة في السياق نفسه لتفعيل مطالبات الأذونات:
imsg chats --limit 1
# or
imsg send <handle> "test"

التحكم في الوصول والتوجيه

يتحكم channels.imessage.dmPolicy في الرسائل المباشرة:
  • pairing (الافتراضي)
  • allowlist
  • open (يتطلب أن تتضمن allowFrom القيمة "*")
  • disabled
حقل قائمة السماح: channels.imessage.allowFrom.يمكن أن تكون إدخالات قائمة السماح handles أو أهداف دردشة (chat_id:* أو chat_guid:* أو chat_identifier:*).

ارتباطات محادثات 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:
  • handle رسالة مباشرة مطبّعًا مثل +15555550123 أو user@example.com
  • 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 المشترك.

أنماط النشر

استخدم Apple ID ومستخدم macOS مخصصين بحيث تكون حركة مرور البوت معزولة عن ملف Messages الشخصي الخاص بك.التدفق المعتاد:
  1. أنشئ/سجّل الدخول إلى مستخدم macOS مخصص.
  2. سجّل الدخول إلى Messages باستخدام Apple ID الخاص بالبوت في ذلك المستخدم.
  3. ثبّت imsg لذلك المستخدم.
  4. أنشئ wrapper لـ SSH حتى يتمكن OpenClaw من تشغيل imsg في سياق ذلك المستخدم.
  5. وجّه channels.imessage.accounts.<id>.cliPath و.dbPath إلى ملف ذلك المستخدم.
قد يتطلب التشغيل الأول موافقات GUI ‏(Automation + Full Disk Access) في جلسة مستخدم البوت تلك.
بنية شائعة:
  • يعمل gateway على Linux/VM
  • يعمل iMessage وimsg على Mac داخل tailnet لديك
  • يستخدم wrapper الخاص بـ cliPath ‏SSH لتشغيل imsg
  • يتيح remoteHost جلب المرفقات عبر SCP
مثال:
{
  channels: {
    imessage: {
      enabled: true,
      cliPath: "~/.openclaw/scripts/imsg-ssh",
      remoteHost: "bot@mac-mini.tailnet-1234.ts.net",
      includeAttachments: true,
      dbPath: "/Users/bot/Library/Messages/chat.db",
    },
  },
}
#!/usr/bin/env bash
exec ssh -T bot@mac-mini.tailnet-1234.ts.net imsg "$@"
استخدم مفاتيح SSH بحيث يكون كل من SSH وSCP غير تفاعليين. تأكد أولًا من الوثوق بمفتاح المضيف (على سبيل المثال ssh bot@mac-mini.tailnet-1234.ts.net) حتى تتم تعبئة known_hosts.
يدعم iMessage إعدادات لكل حساب ضمن channels.imessage.accounts.يمكن لكل حساب تجاوز حقول مثل cliPath وdbPath وallowFrom وgroupPolicy وmediaMaxMb وإعدادات السجل وقوائم السماح لجذور المرفقات.

الوسائط والتقسيم وأهداف التسليم

  • إدخال المرفقات الواردة اختياري: channels.imessage.includeAttachments
  • يمكن جلب مسارات المرفقات البعيدة عبر 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.chunkMode
    • length (الافتراضي)
    • newline (التقسيم حسب الفقرة أولًا)
الأهداف الصريحة المفضلة:
  • chat_id:123 (موصى به للتوجيه المستقر)
  • chat_guid:...
  • chat_identifier:...
أهداف handle مدعومة أيضًا:
  • imessage:+1555...
  • sms:+1555...
  • user@example.com
imsg chats --limit 20

عمليات كتابة الإعدادات

يسمح iMessage افتراضيًا بعمليات كتابة الإعدادات التي تبدأها القناة (لأوامر /config set|unset عندما تكون commands.config: true). للتعطيل:
{
  channels: {
    imessage: {
      configWrites: false,
    },
  },
}

استكشاف الأخطاء وإصلاحها

تحقّق من الملف التنفيذي ودعم RPC:
imsg rpc --help
openclaw channels status --probe
إذا أبلغ الفحص أن RPC غير مدعوم، فقم بتحديث imsg.
تحقّق من:
  • channels.imessage.dmPolicy
  • channels.imessage.allowFrom
  • موافقات الاقتران (openclaw pairing list imessage)
تحقّق من:
  • channels.imessage.groupPolicy
  • channels.imessage.groupAllowFrom
  • سلوك قائمة السماح لـ channels.imessage.groups
  • إعداد أنماط الإشارة (agents.list[].groupChat.mentionPatterns)
تحقّق من:
  • channels.imessage.remoteHost
  • channels.imessage.remoteAttachmentRoots
  • مصادقة مفاتيح SSH/SCP من مضيف gateway
  • وجود مفتاح المضيف في ~/.ssh/known_hosts على مضيف gateway
  • قابلية قراءة المسار البعيد على Mac الذي يشغّل Messages
أعد التشغيل في طرفية GUI تفاعلية ضمن سياق المستخدم/الجلسة نفسه ووافق على المطالبات:
imsg chats --limit 1
imsg send <handle> "test"
أكّد منح Full Disk Access وAutomation لسياق العملية الذي يشغّل OpenClaw/imsg.

مؤشرات إلى مرجع الإعدادات

ذو صلة