BlueBubbles (macOS REST)

إضافة مدمجة تتواصل مع خادم BlueBubbles على macOS عبر HTTP. موصى به لتكامل iMessage نظرًا لواجهة برمجة التطبيقات الأكثر ثراءً وسهولة الإعداد مقارنة بقناة imsg القديمة.

نظرة عامة:

  • يعمل على macOS عبر تطبيق BlueBubbles المساعد (bluebubbles.app)
  • موصى به: macOS Sequoia (15) | macOS Tahoe (26) يعمل مع بعض القيود
  • يدعم الرسائل المباشرة (DM) والمجموعات مع التحكم في الوصول عبر الإقران
  • إشارات الكتابة، إيصالات القراءة، ردود الفعل (tapbacks)، التعديل، الإلغاء، الرد

البدء السريع

  1. قم بتثبيت خادم BlueBubbles على جهاز Mac الخاص بك (اتبع التعليمات على bluebubbles.app/install)
  2. في إعدادات BlueBubbles، قم بتمكين Web API وتعيين كلمة مرور
  3. قم بتشغيل openclaw onboard واختر BlueBubbles
  4. أدخل عنوان URL للخادم وكلمة المرور عند المطالبة

إبقاء Messages.app نشطًا

في بعض إعدادات الأجهزة الافتراضية macOS / الأجهزة دائمة التشغيل، قد يصبح Messages.app "خاملاً". حل بسيط هو تنبيه Messages كل 5 دقائق باستخدام AppleScript و LaunchAgent.

1) احفظ AppleScript

احفظ هذا كـ ~/Scripts/poke-messages.scpt

tell application "Messages"
  -- Just access a property to keep it alive
  set _ to name of first service
end tell

2) تثبيت LaunchAgent

احفظ هذا كـ ~/Library/LaunchAgents/com.user.poke-messages.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.user.poke-messages</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/bin/osascript</string>
    <string>/Users/YOUR_USERNAME/Scripts/poke-messages.scpt</string>
  </array>
  <key>StartInterval</key>
  <integer>300</integer>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

ثم قم بتحميله:

launchctl load ~/Library/LaunchAgents/com.user.poke-messages.plist

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

الرسائل المباشرة

  • افتراضي: channels.bluebubbles.dmPolicy = "pairing"
  • يتلقى المرسلون غير المعروفين رمز إقران
  • الموافقة عبر: openclaw pairing list bluebubbles

المجموعات

  • افتراضيًا مفتوحة
  • قم بتعيين messages.groupChat.requireMention: true للرد فقط عند الذكر
  • أوامر التحكم فقط متاحة للمرسلين المصرح لهم

مؤشرات الكتابة + إيصالات القراءة

  • مؤشرات الكتابة: تُرسل تلقائيًا قبل وأثناء توليد الاستجابة
  • إيصالات القراءة: يتم التحكم بها عبر channels.bluebubbles.sendReadReceipts (افتراضي: true)

لتعطيل إيصالات القراءة:

{
  channels: {
    bluebubbles: {
      sendReadReceipts: false,
    },
  },
}

الإجراءات المتقدمة

يدعم BlueBubbles إجراءات الرسائل المتقدمة:

{
  channels: {
    bluebubbles: {
      actions: {
        reactions: true,  // tapbacks (افتراضي: true)
        edit: true,       // تعديل الرسائل (macOS 13+)
        unsend: true,     // إلغاء إرسال الرسائل (macOS 13+)
        reply: true,      // ردود متداخلة (افتراضي: true)
      },
    },
  },
}

ملاحظة حول معرفات الرسائل

قد يعرض OpenClaw معرفات رسائل قصيرة (مثل 1، 2) لتوفير الرموز:

  • MessageSid/ReplyToId - معرفات قصيرة
  • MessageSidFull/ReplyToIdFull - معرفات كاملة
  • استخدم المعرفات الكاملة للأتمتة الدائمة

البث الكتلي

تحكم في ما إذا كانت الاستجابات تُرسل كرسالة واحدة أو تُبث في كتل:

{
  channels: {
    bluebubbles: {
      blockStreaming: true, // معطل افتراضيًا
    },
  },
}

الوسائط + الحدود

  • يتم تنزيل المرفقات الواردة وتخزينها في ذاكرة التخزين المؤقت للوسائط
  • حد الوسائط عبر channels.bluebubbles.mediaMaxMb (افتراضي: 8 MB)
  • يتم تقسيم النص الصادر إلى channels.bluebubbles.textChunkLimit (افتراضي: 4000 حرف)

مرجع التكوين

خيارات المزود:

  • channels.bluebubbles.enabled - تمكين/تعطيل القناة
  • channels.bluebubbles.serverUrl - عنوان URL الأساسي لـ BlueBubbles REST API
  • channels.bluebubbles.password - كلمة مرور API
  • channels.bluebubbles.webhookPath - مسار Webhook على Gateway
  • channels.bluebubbles.dmPolicy - سياسة الرسائل المباشرة (open أو pairing)

العنونة / أهداف التوصيل

يُفضل chat_guid للتوجيه المستقر:

  • chat_guid: iMessage;-;+15555550123 (مفضل للمجموعات)
  • chat_id: 123
  • المعالجات المباشرة: +15555550123, [email protected]

الأمان

ملاحظات أمنية

  • يتم مصادقة طلبات Webhook من خلال مقارنة guid/password
  • احتفظ بكلمة مرور API ونقطة نهاية Webhook آمنة
  • الطلبات من localhost مقبولة تلقائيًا

استكشاف الأخطاء

  • إذا توقفت أحداث الكتابة/القراءة، تحقق من سجلات Webhook لـ BlueBubbles
  • تنتهي صلاحية رموز الإقران بعد ساعة واحدة - استخدم openclaw pairing list bluebubbles
  • إذا ظهرت رسائل "not authenticated"، تحقق من كلمة مرور API