Mainstream messaging
بيانات Matrix الوصفية للعرض
يرفق OpenClaw بيانات تعريف MessagePresentation الموحّدة بأحداث Matrix الصادرة من النوع m.room.message ضمن مفتاح المحتوى com.openclaw.presentation.
تستمر تطبيقات Matrix القياسية في عرض النص العادي في body. ويمكن للتطبيقات المتوافقة مع OpenClaw قراءة بيانات التعريف المنظّمة وعرض واجهة مستخدم أصلية، مثل الأزرار وقوائم الاختيار وصفوف السياق والفواصل.
محتوى الحدث
{ "msgtype": "m.text", "body": "Select model\n\nChoose model:\n- DeepSeek", "com.openclaw.presentation": { "version": 1, "type": "message.presentation", "title": "Select model", "tone": "info", "blocks": [ { "type": "select", "placeholder": "Choose model", "options": [ { "label": "DeepSeek", "value": "/model deepseek/deepseek-chat" } ] } ] }}- يمثّل
versionإصدار مخطط بيانات التعريف؛ والإصدار الحالي هو1. أماtypeفهو مُميّز ثابت، وقيمته دائمًا"message.presentation". ولا يُصدر محوّل Matrix إلا حمولات تحمل هذا الإصدار والنوع بالضبط؛ وبالمثل، ينبغي للتطبيقات تجاهل الإصدارات غير المعروفة التي لا يمكنها تفسيرها بأمان، وقيمtypeغير المعروفة، وأنواع الكتل غير المعروفة. - يُعدّ
titleوtone(info، وsuccess، وwarning، وdanger، وneutral) تلميحين اختياريين. - يمكن للأزرار وخيارات قوائم الاختيار أن تحمل
actionذا نوع محدد ({ "type": "command", "command": "/..." }أو{ "type": "callback", "value": "..." }) إلى جانب السلسلة القديمةvalue. فضّلactionعند وجود كليهما.
سلوك الرجوع الاحتياطي
يعرض OpenClaw دائمًا نصًا عاديًا احتياطيًا قابلًا للقراءة داخل body. وتُعدّ بيانات التعريف المنظّمة إضافة اختيارية، ويجب ألا تكون مطلوبة لتحقيق التوافق الأساسي مع Matrix.
قواعد العرض الاحتياطي:
- يُعرض محتوى
titleوtextوcontextكأسطر نصية عادية. - تُعرض الأزرار التي تتضمن إجراء
commandبالصيغةlabel: `/command`حتى يبقى الأمر قابلًا للنسخ. أما الأزرار التي تتضمن إجراءcallbackأو قيمةvalueقديمة فقط، فتُعرض بتسميتها وحدها كي تظل قيم الاستدعاء غير الشفافة خاصة؛ وتُعرض الأزرار المعطّلة دائمًا بتسميتها وحدها. وتُعرض أزرار عناوين URL وتطبيقات الويب بالصيغةlabel: URL. - تعرض كتل الاختيار النص النائب (أو
Options:) كعنوان، متبوعًا بأسطر خيارات تحتوي على التسميات فقط. - إذا لم يُعرض أي شيء، كما في عرض تقديمي لا يحتوي إلا على فاصل، يرجع النص في
bodyإلى---.
تستمر التطبيقات غير المدعومة في إظهار النص الاحتياطي. ويمكن للتطبيقات المتوافقة مع OpenClaw تفضيل بيانات التعريف المنظّمة للعرض، مع الاحتفاظ بالنص الاحتياطي لأغراض النسخ والبحث والإشعارات وإمكانية الوصول.
الكتل المدعومة
يعلن محوّل Matrix الصادر عن دعم أصلي لما يلي:
buttonsselectcontextdivider
تُدعم كتل text دائمًا عبر النص الاحتياطي في body. تعامل مع جميع الكتل كتلميحات عرض تُطبّق بأفضل جهد ممكن؛ وتجاهل الحقول وأنواع الكتل غير المعروفة بدلًا من رفض الرسالة بأكملها.
التفاعلات
لا تضيف بيانات التعريف هذه دلالات استدعاء إلى Matrix. تمثّل قيم الأزرار وقوائم الاختيار حمولات تفاعل احتياطية، وتكون عادةً أوامر تبدأ بشرطة مائلة أو أوامر نصية. وعلى تطبيق Matrix الذي يريد دعم التفاعل أن يستخرج قيمة عنصر التحكم (action.command، ثم action.value، ثم value) ويرسلها مجددًا إلى الغرفة كرسالة عادية.
على سبيل المثال، يمكن التعامل مع زر قيمته /model deepseek/deepseek-chat بإرسال تلك القيمة كرسالة Matrix نصية مشفّرة في الغرفة نفسها.
العلاقة ببيانات تعريف الموافقة
يُستخدم com.openclaw.presentation للعرض العام للرسائل الغنية.
تستخدم مطالبات الموافقة بيانات التعريف المخصصة com.openclaw.approval لأن الموافقات تحمل حالة وقرارات وتفاصيل تنفيذ/Plugin حساسة للسلامة. وإذا وُجد مفتاحا بيانات التعريف كلاهما في الحدث نفسه، فينبغي للتطبيقات تفضيل عارض الموافقة المخصص.
رسائل الوسائط
عندما يحتوي الرد على عدة عناوين URL لوسائط، يرسل OpenClaw حدث Matrix واحدًا لكل عنوان URL لوسيط. ولا يُرفق نص التسمية التوضيحية وبيانات تعريف العرض إلا بالحدث الأول، بحيث تحصل التطبيقات على حمولة منظّمة واحدة ثابتة دون عارضات مكررة. وتنطبق القاعدة نفسها عند تقسيم النص الطويل على عدة أحداث: تُرفق بيانات التعريف بالحدث الأول فقط.
حافظ على إيجاز بيانات تعريف العرض. وينبغي أن يبقى النص الكبير الظاهر للمستخدم في body وأن يستخدم مسار تقسيم نص Matrix المعتاد.