Matrix (إضافة)
Matrix بروتوكول مراسلة مفتوح ولا مركزي. يتصل OpenClaw بصفته مستخدمًا في Matrix على أي خادم منزلي (homeserver)، لذا تحتاج إلى حساب Matrix للبوت. بعد تسجيل الدخول، يمكنك مراسلة البوت مباشرةً (DM) أو دعوته إلى الغرف (Matrix «مجموعات»). يُعد Beeper خيار عميل صالحًا أيضًا، لكنه يتطلب تفعيل E2EE. الحالة: مدعوم عبر إضافة (@vector-im/matrix-bot-sdk). الرسائل المباشرة، الغرف، السلاسل (threads)، الوسائط، التفاعلات، الاستطلاعات (إرسال + بدء الاستطلاع كنص)، الموقع، وE2EE (مع دعم التشفير).الإضافة المطلوبة
يأتي Matrix كإضافة ولا يكون مضمّنًا مع التثبيت الأساسي. التثبيت عبر CLI (سجل npm):الإعداد
-
تثبيت إضافة Matrix:
- من npm:
openclaw plugins install @openclaw/matrix - من نسخة محلية:
openclaw plugins install ./extensions/matrix
- من npm:
-
إنشاء حساب Matrix على خادم منزلي:
- تصفّح خيارات الاستضافة على https://matrix.org/ecosystem/hosting/
- أو استضِفه بنفسك.
-
الحصول على رمز وصول لحساب البوت:
- استخدم واجهة تسجيل الدخول في Matrix مع
curlعلى خادمك المنزلي:
- استبدل
matrix.example.orgبعنوان خادمك المنزلي. - أو اضبط
channels.matrix.userId+channels.matrix.password: يستدعي OpenClaw نقطة تسجيل الدخول نفسها، ويخزّن رمز الوصول في~/.openclaw/credentials/matrix/credentials.json، ويعيد استخدامه عند التشغيل التالي.
- استخدم واجهة تسجيل الدخول في Matrix مع
-
تهيئة بيانات الاعتماد:
- متغيرات البيئة:
MATRIX_HOMESERVER،MATRIX_ACCESS_TOKEN(أوMATRIX_USER_ID+MATRIX_PASSWORD) - أو في التهيئة:
channels.matrix.* - إذا تم تعيين التهيئة تكون لها الأسبقية.
- عند استخدام رمز الوصول: يتم جلب معرّف المستخدم تلقائيًا عبر
/whoami. - عند التعيين، يجب أن يكون
channels.matrix.userIdهو معرّف Matrix الكامل (مثال:@bot:example.org).
- متغيرات البيئة:
- أعد تشغيل Gateway (أو أكمل التهيئة الأولية).
-
ابدأ رسالة مباشرة مع البوت أو ادعه إلى غرفة من أي عميل Matrix
(Element، Beeper، إلخ؛ انظر https://matrix.org/ecosystem/clients/). يتطلب Beeper تفعيل E2EE،
لذا اضبط
channels.matrix.encryption: trueوتحقق من الجهاز.
التشفير (E2EE)
التشفير من الطرف إلى الطرف مدعوم عبر SDK التشفير بلغة Rust. فعِّله باستخدامchannels.matrix.encryption: true:
- إذا تم تحميل وحدة التشفير، فسيتم فك تشفير الغرف المشفّرة تلقائيًا.
- تُشفَّر الوسائط الصادرة عند الإرسال إلى غرف مشفّرة.
- عند الاتصال الأول، يطلب OpenClaw التحقق من الجهاز من جلساتك الأخرى.
- تحقّق من الجهاز في عميل Matrix آخر (Element، إلخ) لتمكين مشاركة المفاتيح. لتمكين مشاركة المفتاح.
- إذا تعذّر تحميل وحدة التشفير، يتم تعطيل E2EE ولن يتم فك تشفير الغرف المشفّرة؛ ويسجّل OpenClaw تحذيرًا.
- إذا رأيت أخطاء وحدة تشفير مفقودة (على سبيل المثال،
@matrix-org/matrix-sdk-crypto-nodejs-*)، فاسمح بنصوص البناء لـ@matrix-org/matrix-sdk-crypto-nodejsوشغّلpnpm rebuild @matrix-org/matrix-sdk-crypto-nodejsأو اجلب الثنائي باستخدامnode node_modules/@matrix-org/matrix-sdk-crypto-nodejs/download-lib.js.
~/.openclaw/matrix/accounts/<account>/<homeserver>__<user>/<token-hash>/crypto/
(قاعدة بيانات SQLite). وتوجد حالة المزامنة بجانبها في bot-storage.json.
إذا تغيّر رمز الوصول (الجهاز)، يتم إنشاء مخزن جديد ويجب
إعادة التحقق من البوت للغرف المشفّرة.
التحقق من الجهاز:
عند تفعيل E2EE، سيطلب البوت التحقق من جلساتك الأخرى عند بدء التشغيل.
افتح Element (أو عميلًا آخر) ووافق على طلب التحقق لإرساء الثقة.
بعد التحقق، يمكن للبوت فك تشفير الرسائل في الغرف المشفّرة.
متعدد الحسابات
دعم متعدد الحسابات: استخدمchannels.matrix.accounts مع بيانات اعتماد لكل حساب وخيار name اختياري. راجع gateway/configuration للاطلاع على النمط المشترك.
يعمل كل حساب كمستخدم Matrix منفصل على أي homeserver. تهيئة لكل حساب
ترث من إعدادات channels.matrix على المستوى الأعلى ويمكنها تجاوز أي خيار
(سياسة الرسائل الخاصة، المجموعات، التشفير، إلخ).
- يتم تسلسل بدء تشغيل الحساب لتجنب حالات التعارض الناتجة عن استيراد الوحدات بشكل متزامن.
- متغيرات البيئة (
MATRIX_HOMESERVER,MATRIX_ACCESS_TOKEN, إلخ) تنطبق فقط على الحساب الافتراضي. - إعدادات القناة الأساسية (سياسة الرسائل الخاصة، سياسة المجموعات، تقييد الإشارات، إلخ) تنطبق على جميع الحسابات ما لم يتم تجاوزها لكل حساب على حدة.
- استخدم
bindings[].match.accountIdلتوجيه كل حساب إلى وكيل مختلف. - يتم تخزين حالة التشفير لكل حساب + access token (مخازن مفاتيح منفصلة لكل حساب).
نموذج التوجيه
- تعود الردود دائمًا إلى Matrix.
- تشارك الرسائل المباشرة جلسة الوكيل الرئيسية؛ بينما تُطابِق الغرف جلسات جماعية.
التحكم في الوصول (الرسائل المباشرة)
- الافتراضي:
channels.matrix.dm.policy = "pairing". يحصل المرسلون غير المعروفين على رمز إقران. - الموافقة عبر:
openclaw pairing list matrixopenclaw pairing approve matrix <CODE>
- الرسائل المباشرة العامة:
channels.matrix.dm.policy="open"بالإضافة إلىchannels.matrix.dm.allowFrom=["*"]. - يقبل
channels.matrix.dm.allowFromمعرّفات مستخدم Matrix الكاملة (مثال:@user:server). يحلّ معالج الإعداد أسماء العرض إلى معرّفات مستخدم عندما يجد بحث الدليل تطابقًا واحدًا دقيقًا. - لا تستخدم أسماء العرض أو الأجزاء المحلية المجردة (مثال:
"Alice"أو"alice"). فهي غامضة ويتم تجاهلها عند مطابقة قائمة السماح. استخدم معرّفات@user:serverالكاملة.
الغرف (المجموعات)
- الافتراضي:
channels.matrix.groupPolicy = "allowlist"(مقيّد بالذكر). استخدمchannels.defaults.groupPolicyلتجاوز الافتراضي عند عدم التعيين. - اسمح بالغرف عبر قائمة السماح باستخدام
channels.matrix.groups(معرّفات الغرف أو الأسماء المستعارة؛ تُحلّ الأسماء إلى معرّفات عندما يجد بحث الدليل تطابقًا واحدًا دقيقًا):
- يفعّل
requireMention: falseالردّ التلقائي في تلك الغرفة. - يمكن لـ
groups."*"تعيين افتراضيات لتقييد الذكر عبر الغرف. - يقيّد
groupAllowFromالمرسلين القادرين على تشغيل البوت في الغرف (معرّفات مستخدم Matrix الكاملة). - يمكن لقوائم السماح الخاصة بكل غرفة
usersتقييد المرسلين داخل غرفة محددة بشكل إضافي (استخدم معرّفات مستخدم Matrix الكاملة). - يطلب معالج الإعداد قوائم السماح للغرف (معرّفات الغرف أو الأسماء المستعارة أو الأسماء) ولا يحلّ الأسماء إلا عند تطابق فريد ودقيق.
- عند بدء التشغيل، يحلّ OpenClaw أسماء الغرف/المستخدمين في قوائم السماح إلى معرّفات ويسجّل المطابقة؛ ويتم تجاهل الإدخالات غير المحلولة عند مطابقة قائمة السماح.
- تتم الانضمامات التلقائية للدعوات افتراضيًا؛ تحكّم بها عبر
channels.matrix.autoJoinوchannels.matrix.autoJoinAllowlist. - للسماح بعدم وجود غرف، اضبط
channels.matrix.groupPolicy: "disabled"(أو اترك قائمة السماح فارغة). - المفتاح القديم:
channels.matrix.rooms(بالشكل نفسه لـgroups).
Threads
- دعم سلاسل الردود متوفر.
- يتحكم
channels.matrix.threadRepliesفيما إذا كانت الردود تبقى ضمن السلاسل:off،inbound(الافتراضي)،always
- يتحكم
channels.matrix.replyToModeببيانات الردّ عند عدم الرد ضمن سلسلة:off(الافتراضي)،first،all
الإمكانات
| الميزة | الحالة |
|---|---|
| الرسائل المباشرة | ✅ مدعومة |
| الغرف | ✅ مدعومة |
| Threads | ✅ مدعومة |
| الوسائط | ✅ مدعومة |
| E2EE | ✅ مدعوم (يتطلب وحدة تشفير) |
| التفاعلات | ✅ مدعومة (إرسال/قراءة عبر الأدوات) |
| الاستطلاعات | ✅ الإرسال مدعوم؛ تُحوَّل بدايات الاستطلاع الواردة إلى نص (تجاهل الردود/النهايات) |
| الموقع | ✅ مدعوم (URI جغرافي؛ يتم تجاهل الارتفاع) |
| الأوامر الأصلية | ✅ مدعومة |
استكشاف الأخطاء وإصلاحها
شغّل هذا التسلسل أولًا:- تم تسجيل الدخول لكن تُتجاهل رسائل الغرف: الغرفة محجوبة بواسطة
groupPolicyأو قائمة السماح للغرف. - تُتجاهل الرسائل المباشرة: المرسل بانتظار الموافقة عندما يكون
channels.matrix.dm.policy="pairing". - فشل الغرف المشفّرة: عدم توافق دعم التشفير أو إعدادات التشفير.
مرجع التهيئة (Matrix)
التهيئة الكاملة: Configuration خيارات الموفّر:channels.matrix.enabled: تمكين/تعطيل بدء القناة.channels.matrix.homeserver: عنوان خادم Matrix المنزلي.channels.matrix.userId: معرّف مستخدم Matrix (اختياري مع رمز الوصول).channels.matrix.accessToken: رمز الوصول.channels.matrix.password: كلمة مرور لتسجيل الدخول (يتم تخزين الرمز).channels.matrix.deviceName: اسم عرض الجهاز.channels.matrix.encryption: تمكين E2EE (الافتراضي: false).channels.matrix.initialSyncLimit: حدّ المزامنة الأولية.channels.matrix.threadReplies:off | inbound | always(الافتراضي: inbound).channels.matrix.textChunkLimit: حجم تجزئة النص الصادر (عدد الأحرف).channels.matrix.chunkMode:length(الافتراضي) أوnewlineللتقسيم عند الأسطر الفارغة (حدود الفقرات) قبل التقسيم حسب الطول.channels.matrix.dm.policy:pairing | allowlist | open | disabled(الافتراضي: pairing).channels.matrix.dm.allowFrom: قائمة السماح للرسائل المباشرة (معرّفات مستخدم Matrix الكاملة). يتطلبopenوجود"*". يحلّ المعالج الأسماء إلى معرّفات عند الإمكان.channels.matrix.groupPolicy:allowlist | open | disabled(الافتراضي: allowlist).channels.matrix.groupAllowFrom: المرسلون المسموح لهم لرسائل المجموعات (معرّفات مستخدم Matrix الكاملة).channels.matrix.allowlistOnly: فرض قواعد قائمة السماح على الرسائل المباشرة + الغرف.channels.matrix.groups: قائمة سماح المجموعات + خريطة إعدادات لكل غرفة.channels.matrix.rooms: تهيئة/قائمة سماح قديمة للمجموعات.channels.matrix.replyToMode: وضع الردّ للسلاسل/الوسوم.channels.matrix.mediaMaxMb: حدّ الوسائط الواردة/الصادرة (ميغابايت).channels.matrix.autoJoin: التعامل مع الدعوات (always | allowlist | off، الافتراضي: always).channels.matrix.autoJoinAllowlist: معرّفات/أسماء الغرف المسموح بها للانضمام التلقائي.channels.matrix.accounts: تهيئة متعددة الحسابات مُعرَّفة بواسطة معرّف الحساب (يرث كل حساب إعدادات المستوى الأعلى).channels.matrix.actions: تقييد الأدوات لكل إجراء (reactions/messages/pins/memberInfo/channelInfo).