عرض الرسائل هو العقد المشترك في OpenClaw لواجهة مستخدم الدردشة الصادرة الغنية. وهو يتيح للوكلاء، وأوامر CLI، وتدفقات الموافقة، وplugins وصف مقصد الرسالة مرة واحدة، بينما يعرض كل channel plugin أفضل شكل أصلي يستطيع عرضه. استخدم العرض لواجهة مستخدم رسائل محمولة:Documentation Index
Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
- أقسام نصية
- نص سياق/تذييل صغير
- فواصل
- أزرار
- قوائم اختيار
- عنوان البطاقة ونبرتها
components أو Slack
blocks أو Telegram buttons أو Teams card أو Feishu card إلى أداة
الرسائل المشتركة. هذه مخرجات عرض يملكها channel plugin.
العقد
يستورد مؤلفو Plugin العقد العام من:valueهي قيمة إجراء للتطبيق تُوجَّه مرة أخرى عبر مسار التفاعل الحالي الخاص بالقناة عندما تدعم القناة عناصر تحكم قابلة للنقر.urlهو زر رابط. يمكن أن يوجد من دونvalue.labelمطلوب ويُستخدم أيضًا في الرجوع النصي.styleإرشادي. ينبغي أن يربط العارضون الأنماط غير المدعومة بافتراضي آمن، لا أن يفشلوا الإرسال.
options[].valueهي قيمة التطبيق المحددة.placeholderإرشادي وقد تتجاهله القنوات التي لا تدعم الاختيار الأصلي.- إذا كانت القناة لا تدعم الاختيارات، يسرد نص الرجوع التسميات.
أمثلة المنتج
بطاقة بسيطة:عقد العارض
تصرّح channel plugins بدعم العرض على محوّلها الصادر:تدفق العرض في النواة
عندما يتضمنReplyPayload أو إجراء رسالة presentation، تقوم النواة بما يلي:
- تطبّع حمولة العرض.
- تحل محوّل الصادر الخاص بالقناة المستهدفة.
- تقرأ
presentationCapabilities. - تستدعي
renderPresentationعندما يستطيع المحوّل عرض الحمولة. - ترجع إلى نص محافظ عندما يغيب المحوّل أو لا يستطيع العرض.
- ترسل الحمولة الناتجة عبر مسار تسليم القناة العادي.
- تطبق بيانات التسليم الوصفية مثل
delivery.pinبعد أول رسالة مُرسلة بنجاح.
قواعد التدهور
يجب أن يكون العرض آمنًا للإرسال على القنوات المحدودة. يتضمن نص الرجوع:titleكسطر أول- كتل
textكفقرات عادية - كتل
contextكأسطر سياق مضغوطة - كتل
dividerكفاصل مرئي - تسميات الأزرار، بما في ذلك عناوين URL لأزرار الروابط
- تسميات خيارات الاختيار
- يرسل Telegram مع تعطيل الأزرار المضمنة رجوعًا نصيًا.
- القناة التي لا تدعم الاختيار تسرد خيارات الاختيار كنص.
- يصبح زر URL فقط إما زر رابط أصليًا أو سطر URL رجوعيًا.
- إخفاقات التثبيت الاختيارية لا تفشل الرسالة المسلّمة.
delivery.pin.required: true؛ إذا طُلب التثبيت على أنه
مطلوب وكانت القناة لا تستطيع تثبيت الرسالة المرسلة، يبلّغ التسليم عن فشل.
ربط المزوّدين
العارضون المضمّنون الحاليون:| القناة | هدف العرض الأصلي | ملاحظات |
|---|---|---|
| Discord | المكونات وحاويات المكونات | يحافظ على channelData.discord.components القديم لمنتجي الحمولات الأصلية الخاصة بالمزوّد الحاليين، لكن الإرسالات المشتركة الجديدة يجب أن تستخدم presentation. |
| Slack | Block Kit | يحافظ على channelData.slack.blocks القديم لمنتجي الحمولات الأصلية الخاصة بالمزوّد الحاليين، لكن الإرسالات المشتركة الجديدة يجب أن تستخدم presentation. |
| Telegram | نص ولوحات مفاتيح مضمنة | تتطلب الأزرار/الاختيارات إمكانية الأزرار المضمنة للسطح المستهدف؛ وإلا يُستخدم الرجوع النصي. |
| Mattermost | نص مع خصائص تفاعلية | تتدهور الكتل الأخرى إلى نص. |
| Microsoft Teams | Adaptive Cards | يُضمَّن نص message العادي مع البطاقة عندما يُقدَّم كلاهما. |
| Feishu | بطاقات تفاعلية | يمكن لرأس البطاقة استخدام title؛ ويتجنب المتن تكرار ذلك العنوان. |
| القنوات العادية | رجوع نصي | لا تزال القنوات التي لا تملك عارضًا تحصل على مخرجات قابلة للقراءة. |
Presentation مقابل InteractiveReply
InteractiveReply هو المجموعة الفرعية الداخلية الأقدم التي تستخدمها مساعدات
الموافقة والتفاعل. وهو يدعم:
- النص
- الأزرار
- الاختيارات
MessagePresentation هو عقد الإرسال المشترك المعياري. وهو يضيف:
- العنوان
- النبرة
- السياق
- الفاصل
- أزرار URL فقط
- بيانات وصفية عامة للتسليم عبر
ReplyPayload.delivery
openclaw/plugin-sdk/interactive-runtime عند ربط التعليمات
البرمجية الأقدم:
MessagePresentation مباشرة.
يحافظ presentationToInteractiveReply(...) على نص العرض المرئي من خلال ربط
العنوان، والنص، والسياق، والأزرار، والاختيارات بشكل InteractiveReply الأقدم.
ينبغي لعارضي المكونات الذين يرسمون بالفعل كتل العنوان، والنص، والسياق، والفاصل
أصليًا استخدام presentationToInteractiveControlsReply(...) بدلًا من ذلك، ثم
إلحاق عناصر تحكم الأزرار والاختيار فقط.
يعيد renderMessagePresentationFallbackText(...) سلسلة فارغة لكتل العرض التي لا
تملك رجوعًا نصيًا، مثل عرض يحتوي على فاصل فقط. يمكن لوسائل النقل التي تتطلب متن
إرسال غير فارغ تمرير emptyFallback لاختيار متن أدنى من دون تغيير عقد الرجوع
الافتراضي.
تثبيت التسليم
التثبيت هو سلوك تسليم، لا عرض. استخدمdelivery.pin بدلًا من الحقول الأصلية
الخاصة بالمزوّد مثل channelData.telegram.pin.
الدلالات:
pin: trueيثبّت أول رسالة تُسلَّم بنجاح.- القيمة الافتراضية لـ
pin.notifyهيfalse. - القيمة الافتراضية لـ
pin.requiredهيfalse. - إخفاقات التثبيت الاختيارية تتدهور وتترك الرسالة المرسلة سليمة.
- إخفاقات التثبيت المطلوبة تفشل التسليم.
- الرسائل المجزأة تثبّت أول جزء مسلّم، لا الجزء الأخير.
pin وunpin وpins اليدوية موجودة للرسائل الحالية
حيث يدعم المزوّد تلك العمليات.
قائمة تحقق مؤلف Plugin
- صرّح بـ
presentationمنdescribeMessageTool(...)عندما تستطيع القناة عرض العرض الدلالي أو تدهوره بأمان. - أضف
presentationCapabilitiesإلى محوّل الصادر في وقت التشغيل. - نفّذ
renderPresentationفي تعليمات وقت التشغيل البرمجية، لا في تعليمات إعداد Plugin الخاصة بمستوى التحكم. - أبقِ مكتبات واجهة المستخدم الأصلية خارج مسارات الإعداد/الفهرس الساخنة.
- حافظ على حدود المنصة في العارض والاختبارات.
- أضف اختبارات رجوع للأزرار غير المدعومة، والاختيارات، وأزرار URL، وتكرار
العنوان/النص، وإرسالات
messageالمختلطة معpresentation. - أضف دعم تثبيت التسليم عبر
deliveryCapabilities.pinوpinDeliveredMessageفقط عندما يستطيع المزوّد تثبيت معرّف الرسالة المرسلة. - لا تكشف حقول بطاقات/كتل/مكونات/أزرار أصلية جديدة خاصة بالمزوّد عبر مخطط إجراء الرسالة المشترك.