الاقتران
تستخدم رسائل Slack المباشرة وضع الاقتران افتراضيًا.
أوامر الشرطة المائلة
سلوك الأوامر الأصلية ودليل الأوامر.
استكشاف أخطاء القنوات وإصلاحها
إجراءات تشخيص المشكلات وإصلاحها عبر القنوات.
اختيار وسيلة النقل
يوفر Socket Mode وعناوين URL لطلبات HTTP تكافؤًا في الميزات للمراسلة وأوامر الشرطة المائلة وApp Home والتفاعلات. اختر وفقًا لبنية النشر، لا وفقًا للميزات.اختر Socket Mode للمضيفين ذوي Gateway واحد، وحواسيب التطوير المحمولة، والشبكات المحلية التي يمكنها الوصول إلى
*.slack.com باتجاه صادر، لكنها لا تستطيع قبول HTTPS الوارد.اختر عناوين URL لطلبات HTTP عند تشغيل نسخ متعددة من Gateway خلف موازن تحميل، أو عندما يكون WSS الصادر محظورًا بينما يُسمح بـ HTTPS الوارد، أو عندما تنهي بالفعل Webhooks الخاصة بـ Slack عند وكيل عكسي.وضع الترحيل
يفصل وضع الترحيل استقبال حركة Slack الواردة عن Gateway الخاص بـ OpenClaw. يتولى موجّه موثوق اتصال Slack Socket Mode الوحيد، ويختار Gateway وجهة، ويمرر حدثًا محدد النوع عبر websocket موثَّق. ويظل Gateway يستخدم رمز البوت الخاص به لاستدعاءات Slack Web API الصادرة.wss:// ما لم يكن يستهدف localhost. تعامل مع رمز الحامل وجدول مسارات الموجّه بوصفهما جزءًا من حدود تخويل Slack: تدخل الأحداث الموجّهة إلى معالج رسائل Slack المعتاد كتفعيلات مخوّلة. يمكن أن يضبط slack_identity المقدم من الموجّه في إطار websocket من نوع hello اسم المستخدم والأيقونة الافتراضيين للإرسال؛ وتظل الأولوية لهوية صريحة يقدمها المستدعي. يعيد اتصال الترحيل الاتصال باستخدام توقيت التراجع المتزايد المحدود نفسه المستخدم في Socket Mode، ويمسح الهوية المقدمة من الموجّه كلما انقطع الاتصال.
عمليات التثبيت على مستوى مؤسسة Enterprise Grid
يمكن لحساب Slack واحد استقبال الرسائل من كل مساحة عمل يشملها تثبيت على مستوى مؤسسة Enterprise Grid. اختر Socket Mode المباشر أو عناوين URL لطلبات HTTP؛ فالوضع المرحّل غير مدعوم لحسابات المؤسسات. لا يفعّل كلا بياني الحد الأدنى من الامتيازات أدناه سوى مسار أحداث V1 من نوعmessage وapp_mention، والردود الفورية، وتفاعلات الحالة التي يملكها المستمع.
Socket Mode
connections:write لـ Socket Mode، ثم انسخ رمز البوت من تثبيت المؤسسة. اضبط الحساب الذي يستخدم رمز البوت المثبّت على مستوى المؤسسة:
عناوين URL لطلبات HTTP
استخدم وضع HTTP عندما تكون لدى Gateway نقطة نهاية HTTPS عامة ولا تفتح اتصال Socket Mode. استبدل عنوان URL في المثال بعنوان URL العامwebhookPath للـ Gateway (الافتراضي /slack/events):
enterpriseOrgInstall باستخدام auth.test الخاص بـ Slack. يفشل بدء التشغيل عند استخدام رمز مثبّت على مستوى المؤسسة من دون العلامة، أو رمز مساحة عمل مع العلامة. يظل Slack مصدر الحقيقة بشأن مساحات العمل التي منحت التثبيت؛ ثم يطبق OpenClaw سياسات القنوات والمستخدمين والرسائل المباشرة والإشارات المضبوطة على كل حدث يتم تسليمه. يرفض Enterprise V1 جميع أحداث message وapp_mention التي أنشأها البوت قبل التوجيه، بصرف النظر عن allowBots، لأن عمليات التثبيت على مستوى المؤسسة لا توفر هوية بوت مستقرة مؤهلة بمساحة العمل لمنع الحلقات.
يقتصر دعم المؤسسات عمدًا على أحداث message وapp_mention عبر Socket Mode المباشر أو HTTP وردودها الفورية. لا يتوفر للحساب المؤسسي وضع الترحيل، أو أوامر الشرطة المائلة، أو التفاعلات، أو App Home، أو مستمعو أحداث التفاعلات، أو التثبيتات، أو أدوات إجراءات Slack، أو الموافقات الأصلية في Slack، أو الارتباطات، أو التسليم في قائمة انتظار أو المجدول، أو عمليات الإرسال الاستباقية. تُدعَم تفاعلات الإقرار والكتابة والحالة الصادرة عبر عميل Slack الذي يملكه المستمع، وتتطلب reactions:write؛ بينما تظل إشعارات التفاعلات الواردة وأدوات إجراءات التفاعلات غير متاحة.
تعيد الردود الفورية استخدام سلوك التسليم القياسي في Slack للمقاطع،
والوسائط، والبيانات الوصفية، والرجوع الاحتياطي للهوية، ومعاينات الروابط، وإيصالات الاستلام، ولكن فقط ما دام
العميل الذي يملكه المستمع بعد التحقق منه ضمن دورة الحدث النشطة. يُقسَّم
صف الإرسال في الذاكرة وسجلات المشاركة في سلاسل المحادثات بحسب مساحة عمل ذلك
الحدث؛ ولا يُسلسَل العميل نفسه أو يُحفَظ مطلقًا.
يجب أن تستخدم مفاتيح سياسة القنوات وإدخالات dm.groupChannels معرّفات قنوات Slack الثابتة الخام أو
صيغة channel:<id>. يطبّع OpenClaw كلتا الصيغتين إلى معرّف القناة الخام من أجل
المطابقة في وقت التشغيل؛ وتتسبب البادئات slack: وgroup: وmpim: في فشل بدء التشغيل.
يجب أن تستخدم إدخالات سياسة المستخدمين معرّفات مستخدمي Slack الثابتة؛ وتتسبب الأسماء والأسماء المختصرة وأسماء العرض
وعناوين البريد الإلكتروني في فشل بدء التشغيل. يجب أن تستخدم المعرّفات بادئة Slack الأساسية بالأحرف الكبيرة
ومتنها (على سبيل المثال، C0123456789 أو U0123456789)؛ وتتسبب الأحرف الصغيرة
والمعرّفات القصيرة المشابهة في فشل بدء التشغيل. لا يمكن لحسابات المؤسسة تمكين
dangerouslyAllowNameMatching. يمكن لحسابات المؤسسة تعيين
mentionPatterns.mode العام، لكن mentionPatterns.allowIn و
mentionPatterns.denyIn يتسببان في فشل بدء التشغيل لأن معرّفات قنوات Slack المجرّدة غير
مؤهلة بمساحة العمل ويمكن إعادة استخدامها عبر مساحات العمل. تحتفظ عمليات التثبيت في مساحات العمل
بسلوك نمط الإشارة المحدد النطاق الحالي. تحصل كل مساحة عمل مقبولة
على هوية منفصلة للتوجيه والجلسة والنص المنسوخ وإزالة التكرار والسجل وذاكرة التخزين المؤقت،
حتى عندما تتداخل معرّفات Slack. ضمن تدفق message، تُدعَم رسائل المستخدمين العادية
وأحداث file_share التي أنشأها المستخدمون؛ وتُرفض الأنواع الفرعية الأخرى للرسائل
قبل التفويض أو معالجة أحداث النظام.
يجب إما تعطيل الرسائل المباشرة للمؤسسة (dm.enabled=false أو
dmPolicy="disabled") أو فتحها صراحةً باستخدام dmPolicy="open" و
قيمة allowFrom فعالة للحساب تحتوي على القيمة الحرفية "*". تؤدي
قائمة سماح فارغة أو معرّفات خاصة بمستخدمين من دون "*" إلى فشل بدء التشغيل. يُرفض الاقتران
وقوائم السماح للرسائل المباشرة لكل مستخدم لأن معرّفات مستخدمي Slack غير
مؤهلة بمساحة العمل في مخازن التفويض تلك. يستمر تطبيق سياسة القناة والمرسل
على رسائل القنوات.
التثبيت
plugins install الـ Plugin ويمكّنه. ولا يفعل شيئًا حتى تهيئ تطبيق Slack وإعدادات القناة أدناه. راجع Plugins للاطلاع على القواعد العامة لتثبيت الـ Plugin.
الإعداد السريع
تنشئ ملفات البيان في هذا القسم عملية تثبيت محددة النطاق بمساحة العمل. بالنسبة إلى عملية تثبيت على مستوى مؤسسة Enterprise Grid، استخدم بدلًا من ذلك ملف البيان وسير العمل على مستوى المؤسسة المخصصين.- وضع المقبس (الافتراضي)
- عناوين URL لطلبات HTTP
1
إنشاء تطبيق Slack جديد
افتح api.slack.com/apps ← Create New App ← From a manifest ← حدّد مساحة عملك ← الصق أحد ملفّي البيان أدناه ← Next ← Create.بعد أن ينشئ Slack التطبيق:
يطابق الخيار Recommended مجموعة الميزات الكاملة لـ Plugin Slack: App Home، والأوامر المائلة، والملفات، والتفاعلات، والعناصر المثبتة، والرسائل المباشرة الجماعية، وقراءة الرموز التعبيرية/مجموعات المستخدمين. اختر Minimal عندما تقيّد سياسة مساحة العمل النطاقات — فهو يغطي الرسائل المباشرة، وسجل القنوات/المجموعات، والإشارات، والأوامر المائلة، لكنه يستبعد الملفات والتفاعلات والعناصر المثبتة والرسائل المباشرة الجماعية (
mpim:*) وemoji:read وusergroups:read. راجع قائمة التحقق من ملف البيان والنطاقات لمعرفة مبررات كل نطاق والخيارات الإضافية مثل الأوامر المائلة الإضافية.- Basic Information -> App-Level Tokens -> Generate Token and Scopes: أضف
connections:write، ثم احفظ وانسخ App-Level Token. - Install App -> Install to Workspace: انسخ Bot User OAuth Token.
2
تهيئة OpenClaw
إعداد SecretRef الموصى به:الرجوع الاحتياطي إلى متغيرات البيئة (الحساب الافتراضي فقط):
3
بدء Gateway
ضبط نقل وضع Socket
يضبط OpenClaw مهلة انتظار pong لعميل Slack SDK على 15 ثانية افتراضيًا في وضع Socket. لا تتجاوز إعدادات النقل إلا عند الحاجة إلى ضبط خاص بمساحة العمل أو المضيف:clientPingTimeout مدة انتظار pong بعد أن يرسل SDK اختبار اتصال من العميل؛ ويمثّل serverPingTimeout مدة انتظار اختبارات الاتصال من خادم Slack. تظل رسائل التطبيق وأحداثه حالةً للتطبيق، وليست إشارات لحيوية النقل.
ملاحظات:
- يتم تجاهل
socketModeفي وضع HTTP Request URL. - تنطبق إعدادات
channels.slack.socketModeالأساسية على جميع حسابات Slack ما لم يتم تجاوزها. تستخدم التجاوزات الخاصة بكل حسابchannels.slack.accounts.<accountId>.socketMode؛ ونظرًا إلى أن هذا تجاوز كائن، فأدرج كل حقل من حقول ضبط Socket الذي تريده لذلك الحساب. - لا يملك قيمة OpenClaw افتراضية (
15000) سوىclientPingTimeout. لا يتم تمريرserverPingTimeoutوpingPongLoggingEnabledإلى Slack SDK إلا عند تهيئتهما. - يبدأ التراجع بين محاولات إعادة تشغيل وضع Socket من نحو 2 ثانية ويبلغ حده الأقصى عند نحو 30 ثانية. تُعاد محاولة إخفاقات البدء وانتظار البدء وانقطاع الاتصال القابلة للاسترداد حتى تتوقف القناة. أما أخطاء الحساب وبيانات الاعتماد الدائمة، مثل المصادقة غير الصالحة أو الرموز المميزة الملغاة أو النطاقات المفقودة، فتفشل سريعًا بدلًا من إعادة المحاولة إلى الأبد.
قائمة التحقق من البيان والنطاقات
بيان تطبيق Slack الأساسي هو نفسه لوضع Socket وعناوين URL لطلبات HTTP. لا يختلف سوى مقطعsettings (وurl لأمر الشرطة المائلة).
البيان الأساسي (وضع Socket افتراضيًا):
settings بنسخة HTTP وأضف url إلى كل أمر شرطة مائلة. يلزم عنوان URL عام:
إعدادات إضافية للبيان
اعرض ميزات مختلفة توسّع الإعدادات الافتراضية المذكورة أعلاه. يفعّل البيان الافتراضي علامة تبويب Home في Slack App Home ويشترك فيapp_home_opened. عندما يفتح عضو في مساحة العمل علامة التبويب Home، ينشر OpenClaw عرض Home افتراضيًا آمنًا باستخدام views.publish؛ ولا يتم تضمين أي حمولة محادثة أو تهيئة خاصة. عند تفعيل وضع أمر الشرطة المائلة الواحد، يستخدم تلميح الأمر channels.slack.slashCommand.name؛ أما عمليات التثبيت التي تستخدم أوامر أصلية أو لا تستخدم أوامر شرطة مائلة فتحذف ذلك التلميح. تظل علامة التبويب Messages مفعّلة لرسائل Slack المباشرة. يفعّل البيان أيضًا سلاسل مساعد Slack باستخدام features.assistant_view وassistant:write وassistant_thread_started وassistant_thread_context_changed؛ وتُوجَّه سلاسل المساعد إلى جلسات سلاسل OpenClaw الخاصة بها، مع إبقاء سياق السلسلة الذي يوفّره Slack متاحًا للوكيل.
أوامر شرطة مائلة أصلية اختيارية
أوامر شرطة مائلة أصلية اختيارية
يمكن استخدام عدة أوامر شرطة مائلة أصلية بدلًا من أمر واحد مهيأ، مع بعض التفاصيل:
- استخدم
/agentstatusبدلًا من/statusلأن الأمر/statusمحجوز. - لا يمكن تسجيل أكثر من 25 أمر شرطة مائلة في تطبيق Slack واحد في الوقت نفسه (حد منصة Slack).
features.slash_commands الحالي لديك بمجموعة فرعية من الأوامر المتاحة:- وضع Socket (الافتراضي)
- عناوين URL لطلبات HTTP
نطاقات التأليف الاختيارية (عمليات الكتابة)
نطاقات التأليف الاختيارية (عمليات الكتابة)
أضف نطاق البوت
chat:write.customize إذا أردت أن تستخدم الرسائل الصادرة هوية الوكيل النشط (اسم مستخدم وأيقونة مخصصان) بدلًا من هوية تطبيق Slack الافتراضية.إذا استخدمت أيقونة رمز تعبيري، فإن Slack يتوقع صيغة :emoji_name:.نطاقات رمز المستخدم الاختيارية (عمليات القراءة)
نطاقات رمز المستخدم الاختيارية (عمليات القراءة)
إذا ضبطت
channels.slack.userToken، فإن نطاقات القراءة المعتادة هي:channels:history،groups:history،im:history،mpim:historychannels:read،groups:read،im:read،mpim:readusers:readreactions:readpins:reademoji:readsearch:read(إذا كنت تعتمد على عمليات قراءة البحث في Slack)
نموذج الرموز
botToken+appTokenمطلوبان لـ Socket Mode.- يتطلب وضع HTTP
botToken+signingSecret. - يتطلب وضع الترحيل
botTokenبالإضافة إلىrelay.urlوrelay.authTokenوrelay.gatewayId؛ ولا يستخدم رمز تطبيق أو سر توقيع. - تقبل
botTokenوappTokenوsigningSecretوrelay.authTokenوuserTokenسلاسل نصية عادية أو كائنات SecretRef. - تتجاوز رموز الإعدادات القيم الاحتياطية لمتغيرات البيئة.
- تنطبق القيم الاحتياطية لمتغيرات البيئة
SLACK_BOT_TOKENوSLACK_APP_TOKENوSLACK_USER_TOKENكلٌّ منها على الحساب الافتراضي فقط. - تكون القيمة الافتراضية لـ
userTokenسلوك القراءة فقط (userTokenReadOnly: true).
- يتتبع فحص حساب Slack حقلي
*Sourceو*Statusلكل بيانات اعتماد (botToken،appToken،signingSecret،userToken). - تكون الحالة
availableأوconfigured_unavailableأوmissing. - تعني
configured_unavailableأن الحساب مضبوط عبر SecretRef أو مصدر أسرار آخر غير مضمّن، لكن مسار الأمر/وقت التشغيل الحالي تعذّر عليه تحليل القيمة الفعلية. - في وضع HTTP، تُضمَّن
signingSecretStatus؛ أما في Socket Mode، فالزوج المطلوب هوbotTokenStatus+appTokenStatus.
الإجراءات والبوابات
تتحكمchannels.slack.actions.* في إجراءات Slack.
مجموعات الإجراءات المتاحة في أدوات Slack الحالية:
تتضمن إجراءات رسائل Slack الحالية
send وupload-file وdownload-file وread وedit وdelete وpin وunpin وlist-pins وmember-info وemoji-list. تقبل download-file معرّفات ملفات Slack المعروضة في العناصر النائبة للملفات الواردة، وتعيد معاينات للصور أو بيانات وصفية للملف المحلي للأنواع الأخرى من الملفات.
التحكم في الوصول والتوجيه
- سياسة الرسائل المباشرة
- سياسة القنوات
- الإشارات ومستخدمو القنوات
تتحكم
channels.slack.dmPolicy في الوصول إلى الرسائل المباشرة. وتمثل channels.slack.allowFrom قائمة السماح الأساسية للرسائل المباشرة.pairing(الإعداد الافتراضي)allowlistopen(تتطلب أن تتضمنchannels.slack.allowFromالقيمة"*")disabled
dm.enabled(القيمة الافتراضية true)channels.slack.allowFromdm.allowFrom(قديمة)dm.groupEnabled(القيمة الافتراضية للرسائل المباشرة الجماعية false)dm.groupChannels(قائمة سماح اختيارية لـ MPIM)
- تنطبق
channels.slack.accounts.default.allowFromعلى حسابdefaultفقط. - ترث الحسابات المسماة
channels.slack.allowFromعندما لا تكونallowFromالخاصة بها معيّنة. - لا ترث الحسابات المسماة
channels.slack.accounts.default.allowFrom.
channels.slack.dm.policy وchannels.slack.dm.allowFrom القديمتان تُقرآن لأغراض التوافق. تنقلهما openclaw doctor --fix إلى dmPolicy وallowFrom عندما يمكنها فعل ذلك دون تغيير الوصول.يستخدم الاقتران في الرسائل المباشرة openclaw pairing approve slack <code>.سلاسل المحادثات والجلسات ووسوم الرد
- تُوجَّه الرسائل المباشرة بصيغة
direct؛ والقنوات بصيغةchannel؛ والرسائل المباشرة الجماعية بصيغةgroup. - تقبل ارتباطات مسارات Slack معرّفات النظراء الأولية، بالإضافة إلى صيغ أهداف Slack مثل
channel:C12345678وuser:U12345678و<@U12345678>. - مع القيمة الافتراضية
session.dmScope=main، تُدمج رسائل Slack المباشرة في جلسة الوكيل الرئيسية. - جلسات القنوات:
agent:<agentId>:slack:channel:<channelId>. - تظل رسائل القناة العادية ذات المستوى الأعلى في جلسة كل قناة، حتى عندما تكون
replyToModeبقيمة غيرoff. - تستخدم ردود سلاسل محادثات Slack قيمة
thread_tsالأصلية في Slack للواحق الجلسات (:thread:<threadTs>)، حتى عند تعطيل تسلسل الردود الصادرة باستخدامreplyToMode="off". - يُدخل OpenClaw جذر قناة مؤهلًا ذا مستوى أعلى في
agent:<agentId>:slack:channel:<channelId>:thread:<rootTs>عندما يُتوقع أن يبدأ ذلك الجذر سلسلة محادثات مرئية في Slack، لكي يتشارك الجذر وردود السلسلة اللاحقة جلسة OpenClaw واحدة. ينطبق هذا على أحداثapp_mention، والمطابقات الصريحة لإشارة البوت أو نمط الإشارة المضبوط، وقنواتrequireMention: falseذاتreplyToModeبقيمة غيرoff. - القيمة الافتراضية لـ
channels.slack.thread.historyScopeهيthread؛ والقيمة الافتراضية لـthread.inheritParentهيfalse. - يتحكم
channels.slack.thread.initialHistoryLimitفي عدد رسائل سلسلة المحادثات الحالية التي تُجلب عند بدء جلسة سلسلة جديدة (الافتراضي20؛ اضبطه على0للتعطيل). channels.slack.thread.requireExplicitMention(الافتراضيfalse): عندما تكون القيمةtrue، تُمنع إشارات سلسلة المحادثات الضمنية لكي يستجيب البوت فقط لإشارات@botالصريحة داخل السلاسل، حتى عندما يكون البوت قد شارك بالفعل في السلسلة. من دون ذلك، تتجاوز الردود في سلسلة شارك فيها البوت بوابةrequireMention.
channels.slack.channels.<id>.replyToMode: تجاوز لكل قناة لرسائل قنوات Slack والقنوات الخاصةchannels.slack.replyToMode:off|first|all|batched(الافتراضيoff)channels.slack.replyToModeByChatType: لكلdirect|group|channel- البديل الاحتياطي القديم للمحادثات المباشرة:
channels.slack.dm.replyToMode
[[reply_to_current]][[reply_to:<id>]]
message، اضبط replyBroadcast: true مع action: "send" وthreadId أو replyTo لطلب أن يبث Slack أيضًا رد السلسلة إلى القناة الأصلية. يُطابق هذا علامة reply_broadcast في chat.postMessage لدى Slack، ولا يُدعم إلا لعمليات إرسال النص أو Block Kit، وليس لرفع الوسائط.
عندما تُنفَّذ استدعاءة أداة message داخل سلسلة Slack وتستهدف القناة نفسها، يرث OpenClaw عادةً سلسلة Slack الحالية وفقًا لـ replyToMode الفعالة للحساب أو نوع المحادثة أو لكل قناة. تستخدم الردود التلقائية واستدعاءات send أو upload-file في القناة نفسها التجاوز ذاته لكل قناة. اضبط topLevel: true على action: "send" أو action: "upload-file" لفرض رسالة جديدة في القناة الأصلية بدلًا من ذلك. تُقبل threadId: null باعتبارها إلغاء الاشتراك نفسه على المستوى الأعلى.
يعطّل
replyToMode="off" تسلسل ردود Slack الصادرة، بما في ذلك وسوم [[reply_to_*]] الصريحة. ولا يسطّح جلسات سلاسل Slack الواردة: تظل الرسائل المنشورة بالفعل داخل سلسلة Slack موجّهة إلى جلسة :thread:<threadTs>. يختلف هذا عن Telegram، حيث تظل الوسوم الصريحة معتمدة في وضع "off". تخفي سلاسل Slack الرسائل من القناة، بينما تظل ردود Telegram مرئية ضمن السياق.تفاعلات الإقرار
يرسلackReaction رمزًا تعبيريًا للإقرار بينما يعالج OpenClaw رسالة واردة. ويحدد ackReactionScope متى يُرسل ذلك الرمز فعليًا.
افتراضيًا، يظل الإقرار ثابتًا بينما تعرض حالة سلسلة المساعد الأصلية في Slack التقدم باستخدام رسائل تحميل متناوبة. اضبط messages.statusReactions.enabled: true للاشتراك بدلًا من ذلك في دورة حياة تفاعلات الانتظار/التفكير/الأداة/الاكتمال/الخطأ.
الرمز التعبيري (ackReaction)
ترتيب الحل:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- البديل الاحتياطي للرمز التعبيري لهوية الوكيل (
agents.list[].identity.emoji، وإلا"eyes"/ 👀)
- يتوقع Slack رموزًا مختصرة (مثل
"eyes"). - استخدم
""لتعطيل التفاعل لحساب Slack أو على المستوى العام.
النطاق (messages.ackReactionScope)
يقرأ موفر Slack النطاق من messages.ackReactionScope (الافتراضي "group-mentions"). لا يوجد حاليًا تجاوز على مستوى حساب Slack أو قناة Slack؛ فالقيمة عامة على مستوى Gateway.
القيم:
"all": التفاعل في الرسائل المباشرة والمجموعات، بما في ذلك أحداث الغرف المحيطة."direct": التفاعل في الرسائل المباشرة فقط."group-all": التفاعل مع كل رسالة جماعية باستثناء أحداث الغرف المحيطة (من دون رسائل مباشرة)."group-mentions"(الافتراضي): التفاعل في المجموعات، ولكن فقط عند الإشارة إلى البوت (أو في العناصر القابلة للإشارة الجماعية التي اشتركت). تُستبعد الرسائل المباشرة."off"/"none": عدم التفاعل مطلقًا.
لا يُطلق النطاق الافتراضي (
"group-mentions") تفاعلات الإقرار في الرسائل المباشرة أو أحداث الغرف المحيطة. لرؤية ackReaction المضبوط (مثل "eyes") في رسائل Slack المباشرة الواردة وأحداث الغرف الهادئة، اضبط messages.ackReactionScope على "all". تُقرأ messages.ackReactionScope عند بدء تشغيل موفر Slack، لذا يلزم إعادة تشغيل Gateway لكي يسري التغيير.بث النص
يتحكمchannels.slack.streaming في سلوك المعاينة المباشرة:
off: تعطيل بث المعاينة المباشرة.partial(الافتراضي): استبدال نص المعاينة بأحدث مخرجات جزئية.block: إلحاق تحديثات المعاينة المجزأة.progress: عرض نص حالة التقدم أثناء الإنشاء، ثم إرسال النص النهائي.streaming.preview.toolProgress: عندما تكون معاينة المسودة نشطة، توجيه تحديثات الأداة/التقدم إلى رسالة المعاينة المعدّلة نفسها (الافتراضي:true). اضبطfalseللاحتفاظ برسائل منفصلة للأداة/التقدم.streaming.preview.commandText/streaming.progress.commandText: اضبطها علىstatusللاحتفاظ بأسطر تقدم الأداة الموجزة مع إخفاء نص الأمر/التنفيذ الأولي (الافتراضي:raw).
channels.slack.streaming.nativeTransport في بث النص الأصلي في Slack عندما تكون channels.slack.streaming.mode بقيمة partial (الافتراضي: true).
بطاقات مهام التقدم الأصلية في Slack اختيارية لوضع التقدم. اضبط channels.slack.streaming.progress.nativeTaskCards على true مع channels.slack.streaming.mode="progress" لإرسال بطاقة خطة/مهمة أصلية في Slack أثناء تنفيذ العمل، ثم تحديث بطاقة المهمة نفسها عند الاكتمال. من دون هذه العلامة، يحتفظ وضع التقدم بسلوك معاينة المسودة القابل للنقل.
- يجب أن تكون سلسلة رد متاحة لكي يظهر بث النص الأصلي وحالة سلسلة مساعد Slack. ويظل اختيار السلسلة متبعًا لـ
replyToMode. - لا يزال بإمكان القنوات والمحادثات الجماعية وجذور الرسائل المباشرة ذات المستوى الأعلى استخدام معاينة المسودة العادية عندما لا يتوفر البث الأصلي أو لا توجد سلسلة رد.
- تظل رسائل Slack المباشرة ذات المستوى الأعلى خارج السلسلة افتراضيًا، لذا لا تعرض معاينة البث/الحالة الأصلية بنمط سلاسل Slack؛ وينشر OpenClaw معاينة مسودة في الرسالة المباشرة ويعدّلها بدلًا من ذلك.
- تعود الوسائط والحمولات غير النصية إلى التسليم العادي.
- تلغي النتائج النهائية للوسائط/الأخطاء تعديلات المعاينة المعلقة؛ ولا تُفرغ النتائج النهائية المؤهلة للنص/الكتل إلا عندما يمكنها تعديل المعاينة في موضعها.
- إذا فشل البث في منتصف الرد، يعود OpenClaw إلى التسليم العادي للحمولات المتبقية.
channels.slack.streamMode(replace | status_final | append) اسم مستعار قديم لـchannels.slack.streaming.mode.- القيمة المنطقية
channels.slack.streamingاسم مستعار قديم لـchannels.slack.streaming.modeوchannels.slack.streaming.nativeTransport. - القيمتان
channels.slack.chunkModeوchannels.slack.nativeStreamingعلى المستوى الأعلى اسمان مستعاران قديمان لـchannels.slack.streaming.chunkModeوchannels.slack.streaming.nativeTransport. - لا تُقرأ الأسماء المستعارة القديمة في وقت التشغيل؛ شغّل
openclaw doctor --fixلإعادة كتابة إعدادات بث Slack المحفوظة باستخدام المفاتيح القياسية.
البديل الاحتياطي لتفاعل الكتابة
يضيفtypingReaction تفاعلًا مؤقتًا إلى رسالة Slack الواردة بينما يعالج OpenClaw ردًا، ثم يزيله عند انتهاء التشغيل. يكون هذا أكثر فائدة خارج ردود السلاسل، التي تستخدم مؤشر حالة افتراضيًا يفيد بأن المستخدم “يكتب…”.
ترتيب الحل:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- يتوقع Slack رموزًا مختصرة (مثل
"hourglass_flowing_sand"). - يُنفّذ التفاعل على أساس بذل أفضل جهد، وتُحاول إزالته تلقائيًا بعد اكتمال مسار الرد أو الفشل.
الإدخال الصوتي
للتحدث إلى OpenClaw في Slack حاليًا، أرسل مقطعًا صوتيًا من Slack إلى تطبيق OpenClaw. ميكروفون الإملاء في Slackbot ميزة منفصلة مملوكة لـ Slack، وليس واجهة API للتطبيق.- يعمل الإملاء الصوتي في Slackbot داخل محادثة Slackbot الخاصة بالمستخدم. يحوّل Slack التسجيل إلى مطالبة في Slackbot، لكنه لا يرسل ملفًا صوتيًا أو حدث إملاء أو مطالبة أو علامة لمصدر الإدخال إلى تطبيقات Slack التابعة لجهات خارجية عبر Events API. لا يمكن لـ Plugin Slack في OpenClaw تمكينه أو استقباله.
- مقاطع Slack الصوتية هي ملفات مخزنة في Slack يمكن نشرها في رسالة خاصة أو قناة أو سلسلة محادثات في OpenClaw. ينزّل OpenClaw المقطع القابل للوصول باستخدام رمز البوت، ويوحّد بيانات MIME الوصفية للمقطع في Slack، ثم يرسله عبر مسار تحويل الصوت إلى نص المشترك. يتضمن بيان التطبيق الموصى به نطاق
files:readالمطلوب.
requireMention: true، يمكن لمقطع صوتي بلا تسمية توضيحية اجتياز البوابة عبر نطق نمط إشارة مُعدّ (agents.list[].groupChat.mentionPatterns، مع الرجوع إلى messages.groupChat.mentionPatterns). يتحقق OpenClaw من صلاحية المرسل قبل تنزيل المقطع أو تحويله إلى نص، ثم لا يقبله إلا إذا طابق النص الناتج النمط. يُتخلّص من النص الاستباقي الفاشل أو غير المطابق مع المقطع المنزّل، ولا يُحتفظ به في سجل القناة. لا يمكن استنتاج هوية @bot الأصلية في Slack من الكلام، لذا يجب إعداد نمط للاسم المنطوق أو تضمين إشارة مكتوبة. إذا فُعّل تكرار النص الناتج، فلا يُرسل التكرار إلا بعد القبول.
الوسائط والتقسيم والتسليم
المرفقات الواردة
المرفقات الواردة
تُنزّل مرفقات ملفات Slack من عناوين URL خاصة مستضافة على Slack (عبر تدفق طلبات موثّق بالرمز)، وتُكتب في مخزن الوسائط عند نجاح الجلب وسماح حدود الحجم بذلك. تتضمن العناصر النائبة للملفات
fileId الخاص بـ Slack كي تتمكن الوكلاء من جلب الملف الأصلي باستخدام download-file.تستخدم التنزيلات مدد انتهاء مهلة محدودة للخمول والوقت الإجمالي. إذا تعطل استرداد ملف Slack أو فشل، يواصل OpenClaw معالجة الرسالة ويرجع إلى العنصر النائب للملف.يكون الحد الأقصى الافتراضي لحجم البيانات الواردة وقت التشغيل هو 20MB ما لم يتجاوزه channels.slack.mediaMaxMb.النصوص والملفات الصادرة
النصوص والملفات الصادرة
- تستخدم أجزاء النص
channels.slack.textChunkLimit(القيمة الافتراضية8000، بحد أقصى يساوي حد طول الرسائل في Slack) - يفعّل
channels.slack.streaming.chunkMode="newline"التقسيم حسب الفقرات أولًا - تستخدم عمليات إرسال الملفات واجهات رفع Slack، ويمكن أن تتضمن ردودًا ضمن سلاسل المحادثات (
thread_ts) - تستخدم تسميات الملفات الطويلة أول جزء نصي آمن في Slack تعليقًا للرفع، وترسل الأجزاء المتبقية رسائل متابعة
- يتبع الحد الأقصى للوسائط الصادرة
channels.slack.mediaMaxMbعند إعداده؛ وإلا فتستخدم عمليات الإرسال إلى القنوات القيم الافتراضية لنوع MIME من مسار الوسائط
وجهات التسليم
وجهات التسليم
الوجهات الصريحة المفضلة:
user:<id>للرسائل الخاصةchannel:<id>للقنوات
الأوامر وسلوك أوامر الشرطة المائلة
تظهر أوامر الشرطة المائلة في Slack إما كأمر واحد مُعدّ أو كعدة أوامر أصلية. اضبطchannels.slack.slashCommand لتغيير القيم الافتراضية للأوامر:
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
channels.slack.commands.native: true أو commands.native: true في الإعدادات العامة بدلًا من ذلك.
- الوضع التلقائي للأوامر الأصلية معطّل في Slack، لذلك لا يفعّل
commands.native: "auto"أوامر Slack الأصلية.
- من 3 إلى 5 خيارات قصيرة بما يكفي: قائمة تجاوز (”…”)
- أكثر من 100 خيار، مع توفر تصفية غير متزامنة للخيارات: تحديد خارجي
- خيار واحد أو خياران، أو أي خيار تكون قيمته المشفرة أطول مما يسمح به عنصر التحديد: كتل أزرار
- خلاف ذلك (من 6 إلى 100 خيار، أو أكثر من 100 دون تصفية غير متزامنة): قائمة تحديد ثابتة، مقسمة إلى 100 خيار لكل قائمة
agent:<agentId>:slack:slash:<userId>، وتظل توجّه تنفيذ الأوامر إلى جلسة المحادثة المستهدفة باستخدام CommandTargetSessionKey.
المخططات الأصلية
تعرض كتلة Block Kit العامةdata_visualization
في Slack مخططات خطية وشريطية ومساحية ودائرية في الرسائل. يربط OpenClaw كتلة
presentation chart المحمولة بتلك البنية الأصلية؛ ولا يلزم أي نطاق OAuth إضافي
أو رفع ملفات أو عارض صور أو إعداد في Slack بخلاف صلاحية الوصول العادية إلى رسائل
chat:write.
- العنوان وتسميات المحاور الاختيارية: 50 حرفًا
- المخطط الدائري: من 1 إلى 12 قطاعًا موجبًا
- المخطط الخطي أو الشريطي أو المساحي: من 1 إلى 12 سلسلة ذات أسماء فريدة ومن 1 إلى 20 فئة مشتركة
- تسميات القطاعات والفئات والسلاسل: 20 حرفًا
- يجب أن تحتوي كل سلسلة على قيمة محدودة واحدة لكل فئة؛ ويمكن أن تكون قيم المخططات غير الدائرية سالبة
invalid_blocks أثناء طرح مرحلي، يزيل OpenClaw
كتل البيانات الأصلية المرفوضة، ويُبقي عناصر التحكم الشقيقة، ويرسل
تمثيل المخطط الكامل كنص مرئي.
يقبل Slack حاليًا ما يصل إلى كتلتين من data_visualization لكل رسالة. عندما
يحتوي العرض على أكثر من مخططين صالحين، يحافظ OpenClaw على ترتيبها
ويتابع العرض الأصلي في رسائل متابعة، بما لا يزيد على مخططين
في كل رسالة.
يوثّق إطلاق المطورين
في Slack الكتلة باعتبارها ميزة Block Kit موجهة للتطبيقات، ولا ينشر أي قيد
على الخطط المدفوعة. تنطبق صياغة أهلية Business+/Enterprise على
إنشاء المخططات التلقائي بالذكاء الاصطناعي في Slackbot، وهو أمر منفصل عن إرسال تطبيق
لمخطط Block Kit منظم مسبقًا. المخططات كتل مخصصة للرسائل فقط، وليست محتوى في App
Home أو النوافذ المشروطة أو Canvas.
الجداول الأصلية
تعرض كتلة Block Kit الحاليةdata_table
في Slack صفوفًا وأعمدة منظمة داخل الرسائل. يربط OpenClaw كتلة
presentation table المحمولة والصريحة بـ data_table؛ ولا يستخدم كتلة Slack
القديمة table.
لا يلزم أي نطاق OAuth إضافي أو إعداد في Slack بخلاف صلاحية الوصول العادية
إلى رسائل chat:write.
raw_text في Slack. وتُربط الخلايا الرقمية
بـ raw_number، مع الحفاظ على القيمة الرقمية المحدودة للفرز
والتصفية الأصليين. يحدد rowHeaderColumnIndex، عند وجوده، ذلك
العمود ذي الفهرسة الصفرية بوصفه عناوين صفوف Slack.
تُفرض حدود data_table المنشورة من Slack قبل العرض الأصلي:
- من 1 إلى 20 عمودًا
- من 1 إلى 100 صف بيانات، بالإضافة إلى صف العنوان
- العدد نفسه من الخلايا في كل صف
- بحد أقصى 10,000 حرف إجمالًا عبر جميع خلايا الجدول في رسالة واحدة
<@U123> إلى إشارة في Slack.
إذا رفض Slack كتل المخططات أو الجداول الأصلية باستخدام invalid_blocks، فإن OpenClaw
يزيل كل كتل البيانات الأصلية في خطوة استرداد واحدة محدودة، ويحتفظ
بالكتل الشقيقة الصالحة مثل الأزرار وعناصر التحديد، ويرسل النص الكامل المرئي
للمخططات والجداول مع تعطيل تنسيق Slack. يتتبع تسليم أوامر الشرطة المائلة
ميزانية response_url ذات الاستدعاءات الخمسة في Slack طوال الأمر. وقبل كل
دفعة ردود، يختار خطة كاملة تناسب الاستدعاءات المتبقية أو يفشل
قبل نشر تلك الدفعة.
لا تُرقّى إلى جداول أصلية إلا كتل الجداول الصريحة presentation.
تبقى جداول Markdown ذات الأنابيب نصًا كما أُلّفت؛ ولا يخمّن OpenClaw
بنية الجدول أو أنواع الخلايا. يمكن للمنتجين الحاليين الموثوقين الذين يستخدمون بنية Slack الأصلية
الاستمرار في تمرير الكتل الخام عبر channelData.slack.blocks؛ ويستخرج OpenClaw نصًا
بديلًا من خلايا data_table الخام الصالحة، بينما قد تتراجع الكتل المخصصة
غير الصحيحة إلى تسميتها التوضيحية أو إلى بديل Block Kit العام. ينبغي أن تستخدم مخرجات
الوكلاء وCLI والإضافات المحمولة presentation.
الردود التفاعلية
يمكن لـ Slack عرض عناصر تحكم تفاعلية في الردود ينشئها الوكلاء، لكن هذه الميزة معطلة افتراضيًا. بالنسبة إلى المخرجات الجديدة من الوكلاء وCLI والإضافات، يُفضّل استخدام أزرارpresentation المشتركة أو كتل التحديد. فهي تستخدم مسار تفاعل Slack
نفسه، مع إمكانية التراجع أيضًا على القنوات الأخرى.
فعّلها عموميًا:
[[slack_buttons: Approve:approve, Reject:reject]][[slack_select: Choose a target | Canary:canary, Production:production]]
compileSlackInteractiveReplies(...)parseSlackOptionsLine(...)isSlackInteractiveRepliesEnabled(...)buildSlackInteractiveBlocks(...)
presentation وbuildSlackPresentationBlocks(...) لعناصر التحكم الجديدة
المعروضة في Slack.
ملاحظات:
- هذه واجهة مستخدم قديمة خاصة بـ Slack. لا تحوّل القنوات الأخرى توجيهات Slack Block Kit إلى أنظمة الأزرار الخاصة بها.
- قيم الاستدعاء التفاعلي هي رموز مبهمة ينشئها OpenClaw، وليست قيمًا خامًا أنشأها الوكيل.
- إذا كانت الكتل التفاعلية المُنشأة ستتجاوز حدود Slack Block Kit، يعود OpenClaw إلى الرد النصي الأصلي بدلًا من إرسال حمولة كتل غير صالحة.
عمليات إرسال النماذج المشروطة المملوكة للـ Plugin
يمكن أيضًا لـ Plugins الخاصة بـ Slack التي تسجّل معالجًا تفاعليًا تلقي أحداث دورة حياةview_submission وview_closed قبل أن ينفّذ OpenClaw عملية Compaction
للحمولة ضمن حدث النظام المرئي للوكيل. استخدم أحد أنماط التوجيه
التالية عند فتح نموذج مشروط في Slack:
- اضبط
callback_idعلىopenclaw:<namespace>:<payload>. - أو احتفظ بـ
callback_idموجود وضعpluginInteractiveData: "<namespace>:<payload>"فيprivate_metadataالخاص بالنموذج المشروط.
ctx.interaction.kind بوصفه view_submission أو
view_closed، وinputs بعد تسويته، وكائن stateValues الخام الكامل من
Slack. يكفي التوجيه باستخدام معرّف الاستدعاء فقط لاستدعاء معالج الـ Plugin؛ أدرج
حقول توجيه المستخدم/الجلسة private_metadata الموجودة في النموذج المشروط عندما
ينبغي للنموذج المشروط أيضًا إنشاء حدث نظام مرئي للوكيل. يتلقى الوكيل
حدث نظام Slack interaction: ... موجزًا ومنقّحًا. إذا أعاد المعالج
systemEvent.summary أو systemEvent.reference أو systemEvent.data، فستُدرج
هذه الحقول في ذلك الحدث الموجز كي يتمكن الوكيل من الإشارة إلى
التخزين المملوك للـ Plugin من دون رؤية حمولة النموذج الكاملة.
الموافقات الأصلية في Slack
يمكن أن يعمل Slack كعميل موافقات أصلي باستخدام الأزرار والتفاعلات، بدلًا من الرجوع إلى واجهة الويب أو الطرفية.- يمكن عرض موافقات التنفيذ والـ Plugin كمطالبات Slack Block Kit أصلية.
- يظل
channels.slack.execApprovals.*إعداد تمكين عميل موافقات التنفيذ الأصلي وتوجيه الرسائل المباشرة/القنوات. - تستخدم الرسائل المباشرة لموافقة التنفيذ
channels.slack.execApprovals.approversأوcommands.ownerAllowFrom. - تستخدم موافقات الـ Plugin أزرار Slack الأصلية عندما يكون Slack مفعّلًا كعميل موافقات أصلي للجلسة المنشئة، أو عندما يوجّه
approvals.pluginإلى جلسة Slack المنشئة أو إلى هدف Slack. - تستخدم الرسائل المباشرة لموافقة الـ Plugin معتمدي Slack Plugin من
channels.slack.allowFrom، أوallowFromللحساب المسمّى، أو مسار الحساب الافتراضي. - يظل تفويض المعتمد مفروضًا: لا يمكن للمعتمدين المخوّلين للتنفيذ فقط الموافقة على طلبات الـ Plugin ما لم يكونوا أيضًا من معتمدي الـ Plugin.
interactivity مفعّلًا في إعدادات تطبيق Slack، تظهر مطالبات الموافقة كأزرار Block Kit مباشرةً في المحادثة.
عند وجود هذه الأزرار، تكون هي تجربة الموافقة الأساسية؛ ولا ينبغي لـ OpenClaw
تضمين أمر /approve يدوي إلا عندما تشير نتيجة الأداة إلى أن
موافقات الدردشة غير متاحة أو أن الموافقة اليدوية هي المسار الوحيد.
مسار الإعداد:
channels.slack.execApprovals.enabledchannels.slack.execApprovals.approvers(اختياري؛ يعود إلىcommands.ownerAllowFromعندما يكون ذلك ممكنًا)channels.slack.execApprovals.target(dm|channel|both، الافتراضي:dm)agentFilter،sessionFilter
enabled مضبوطًا أو يكون "auto"، وعندما يتحدد
معتمد تنفيذ واحد على الأقل. يمكن لـ Slack أيضًا معالجة موافقات الـ Plugin الأصلية عبر مسار العميل
الأصلي هذا عندما يتحدد معتمدو Slack Plugin ويطابق الطلب مرشحات العميل الأصلي. اضبط
enabled: false لتعطيل Slack صراحةً بوصفه عميل موافقات أصليًا. اضبط enabled: true
لفرض تشغيل الموافقات الأصلية عند تحديد المعتمدين. لا يؤدي تعطيل موافقات تنفيذ Slack إلى تعطيل
تسليم موافقات Slack Plugin الأصلية المفعّل عبر approvals.plugin؛ إذ يستخدم تسليم موافقة الـ Plugin
معتمدي Slack Plugin بدلًا من ذلك.
السلوك الافتراضي عند عدم وجود إعداد صريح لموافقة تنفيذ Slack:
approvals.exec المشتركة منفصلة. استخدمها فقط عندما يجب أيضًا
توجيه مطالبات موافقة التنفيذ إلى دردشات أخرى أو أهداف صريحة خارج النطاق. كما أن إعادة توجيه approvals.plugin المشتركة
منفصلة؛ ولا يمنع التسليم الأصلي في Slack هذا المسار الاحتياطي إلا عندما يستطيع Slack معالجة طلب موافقة الـ Plugin
أصليًا.
يعمل أيضًا /approve ضمن الدردشة نفسها في قنوات Slack والرسائل المباشرة التي تدعم الأوامر بالفعل. راجع موافقات التنفيذ للاطلاع على نموذج إعادة توجيه الموافقات الكامل.
الأحداث والسلوك التشغيلي
- تُحوّل تعديلات الرسائل وعمليات حذفها إلى أحداث نظام.
- تُعالَج عمليات بث سلاسل المحادثات (ردود السلسلة عبر “Also send to channel”) كرسائل مستخدم عادية.
- تُحوّل أحداث إضافة التفاعلات وإزالتها إلى أحداث نظام.
- تُحوّل أحداث انضمام الأعضاء ومغادرتهم، وإنشاء القنوات وإعادة تسميتها، وإضافة التثبيت وإزالته إلى أحداث نظام.
- يمكن لاستقصاء الحضور الاختياري تحويل انتقال
awayإلىactiveلأحد المشاركين البشر الذين جرت ملاحظتهم إلى أحدث جلسة Slack مؤهلة ونشطة لذلك المشارك. يكون هذا معطلًا افتراضيًا. - يمكن لـ
channel_id_changedترحيل مفاتيح إعداد القناة عندما يكونconfigWritesمفعّلًا. - تُعامل البيانات الوصفية لموضوع القناة وغرضها كسياق غير موثوق ويمكن حقنها في سياق التوجيه.
- تُرشّح بادرة سلسلة المحادثات وبذر سياق السجل الأولي للسلسلة وفق قوائم السماح للمرسلين المضبوطة عند انطباقها.
- تصدر إجراءات الكتل والاختصارات وتفاعلات النماذج المشروطة أحداث نظام
Slack interaction: ...منظّمة تتضمن حقول حمولة غنية:- إجراءات الكتل: القيم المحددة، والتسميات، وقيم أدوات الاختيار، والبيانات الوصفية لـ
workflow_* - الاختصارات العامة: البيانات الوصفية للاستدعاء والفاعل، وتُوجّه إلى جلسة الفاعل المباشرة
- اختصارات الرسائل: سياق الاستدعاء والفاعل والقناة والسلسلة والرسالة المحددة
- أحداث النموذج المشروط
view_submissionوview_closedمع البيانات الوصفية للقناة الموجّهة ومدخلات النموذج
- إجراءات الكتل: القيم المحددة، والتسميات، وقيم أدوات الاختيار، والبيانات الوصفية لـ
أحداث الحضور
لا يرسل Slack تغييرات الحضور عبر Events API أو Socket Mode. وبدلًا من ذلك، يمكن لـ OpenClaw استقصاءusers.getPresence للمشاركين البشر الذين اجتازت رسائلهم عمليات التحقق العادية للوصول والتوجيه في Slack.
off(الافتراضي): لا يوجد مؤقت حضور أو استدعاءات Slack API.auto: راقب الرسائل المباشرة وMPIMs وسلاسل Slack النشطة خلال آخر 24 ساعة، بحد أقصى 8 مشاركين بشر تمت ملاحظتهم. تُستبعد جلسات القنوات ذات المستوى الأعلى.on: راقب المحادثات نفسها من دون حد للمشاركين، وأدرج جلسات القنوات ذات المستوى الأعلى. استخدم تجاوزًا خاصًا بكل قناة لفرض مراقبة قناة واحدة أو منعها.
away إلى active. تُطبّق فترة تهدئة دائمة مدتها 8 ساعات لكل حساب Slack ومستخدم، حتى إذا شارك ذلك الشخص في عدة سلاسل. لا يُوجّه الحدث إلا إلى أحدث محادثة مؤهلة ونشطة لذلك الشخص، ويطلب من الوكيل الرجوع إلى الذاكرة/الويكي وسياق المنطقة الزمنية المعروف قبل أن يقرر ما إذا كان سيرسل تحية قصيرة واحدة. ويمكن للوكيل التزام الصمت.
يحتاج رمز البوت إلى users:read، وهو مُدرج بالفعل في البيان الموصى به. لا تتوفر أحداث الحضور لعمليات التثبيت على مستوى مؤسسة Enterprise Grid بأكملها.
مرجع الإعداد
المرجع الأساسي: مرجع الإعداد - Slack.حقول Slack عالية الأهمية
حقول Slack عالية الأهمية
- الوضع/المصادقة:
mode،enterpriseOrgInstall،botToken،appToken،signingSecret،webhookPath،accounts.* - الوصول إلى الرسائل المباشرة:
dm.enabled،dmPolicy،allowFrom(قديم:dm.policy،dm.allowFrom)،dm.groupEnabled،dm.groupChannels - مفتاح تبديل التوافق:
dangerouslyAllowNameMatching(للطوارئ؛ أبقه معطلًا ما لم تكن هناك حاجة إليه) - الوصول إلى القناة:
groupPolicy،channels.*،channels.*.users،channels.*.requireMention - سلاسل المحادثات/السجل:
replyToMode،replyToModeByChatType،thread.*،historyLimit،dmHistoryLimit،dms.*.historyLimit - الإيقاظ عبر الحضور:
presenceEvents.mode،channels.*.presenceEvents.mode(off|auto|on؛ الافتراضيoff) - التسليم:
textChunkLimit،streaming.chunkMode،mediaMaxMb،streaming،streaming.nativeTransport،streaming.preview.toolProgress - المعاينات الموسّعة:
unfurlLinks(الافتراضي:false)، وunfurlMediaللتحكم في معاينة الروابط/الوسائط لـchat.postMessage؛ اضبطunfurlLinks: trueلإعادة الاشتراك في معاينات الروابط - التشغيل/الميزات:
configWrites،commands.native،slashCommand.*،actions.*،userToken،userTokenReadOnly
استكشاف الأخطاء وإصلاحها
لا توجد ردود في القنوات
لا توجد ردود في القنوات
تحقّق بالترتيب:أوامر مفيدة:
groupPolicy- قائمة السماح للقنوات (
channels.slack.channels) — يجب أن تكون المفاتيح معرّفات قنوات (C12345678)، وليست أسماء (#channel-name). تفشل المفاتيح المستندة إلى الأسماء بصمت عند استخدامgroupPolicy: "allowlist"لأن توجيه القنوات يعتمد على المعرّفات أولًا افتراضيًا. للعثور على المعرّف: انقر بزر الماوس الأيمن على القناة في Slack ← Copy link — قيمةC...في نهاية عنوان URL هي معرّف القناة. requireMention- قائمة السماح
usersالخاصة بكل قناة messages.groupChat.visibleReplies: تستخدم طلبات المجموعات/القنوات العادية"automatic"افتراضيًا. إذا اشتركت في"message_tool"وأظهرت السجلات نص المساعد من دون استدعاءmessage(action=send)، فقد أخفق النموذج في استخدام مسار أداة الرسائل المرئي. يظل النص النهائي خاصًا في هذا الوضع؛ افحص سجل Gateway المفصّل بحثًا عن البيانات الوصفية للحمولة المحجوبة، أو اضبطه على"automatic"إذا كنت تريد نشر كل رد نهائي عادي للمساعد عبر المسار القديم.messages.groupChat.unmentionedInbound: إذا كان"room_event"، فإن حديث القناة المسموح به الذي لا يتضمن إشارة يُعد سياقًا محيطًا ويظل صامتًا ما لم يستدعِ الوكيل أداةmessage. راجع أحداث الغرف المحيطة.
يتم تجاهل الرسائل المباشرة
يتم تجاهل الرسائل المباشرة
تحقّق:
channels.slack.dm.enabledchannels.slack.dmPolicy(أوchannels.slack.dm.policyالقديم)- موافقات الاقتران / إدخالات قائمة السماح (لا يزال
dmPolicy: "open"يتطلبchannels.slack.allowFrom: ["*"]) - تستخدم الرسائل المباشرة الجماعية معالجة MPIM؛ فعّل
channels.slack.dm.groupEnabled، وإذا كانت مُعدّة، فأدرج MPIM فيchannels.slack.dm.groupChannels - أحداث الرسائل المباشرة لمساعد Slack: السجلات التفصيلية التي تذكر
drop message_changedتعني عادةً أن Slack أرسل حدثًا معدّلًا لسلسلة محادثات المساعد من دون مرسل بشري يمكن استعادته في بيانات الرسالة الوصفية
وضع المقبس لا يتصل
وضع المقبس لا يتصل
تحقّق من رمزي البوت والتطبيق ومن تفعيل Socket Mode في إعدادات تطبيق Slack.
يحتاج App-Level Token إلى
connections:write، ويجب أن ينتمي رمز
Bot User OAuth Token الخاص بالبوت إلى تطبيق Slack ومساحة العمل نفسيهما اللذين ينتمي إليهما رمز التطبيق.إذا عرض openclaw channels status --probe --json القيمة botTokenStatus أو
appTokenStatus: "configured_unavailable"، فهذا يعني أن حساب Slack
مُعدّ، لكن بيئة التشغيل الحالية لم تتمكن من حل القيمة المدعومة بـ SecretRef.تُعد السجلات مثل slack socket mode failed to start; retry ... إخفاقات بدء
قابلة للاسترداد. أما النطاقات المفقودة والرموز الملغاة والمصادقة غير الصالحة فتؤدي إلى فشل فوري.
ويعني سجل slack token mismatch ... أن رمز البوت ورمز التطبيق
يبدوان تابعين لتطبيقي Slack مختلفين؛ أصلح بيانات اعتماد تطبيق Slack.وضع HTTP لا يستقبل الأحداث
وضع HTTP لا يستقبل الأحداث
تحقّق مما يلي:
- سر التوقيع
- مسار Webhook
- عناوين URL لطلبات Slack (الأحداث + التفاعلية + أوامر الشرطة المائلة)
- قيمة
webhookPathفريدة لكل حساب HTTP - أن عنوان URL العام ينهي TLS ويمرّر الطلبات إلى مسار Gateway
- أن مسار
request_urlفي تطبيق Slack يطابقchannels.slack.webhookPathتمامًا (القيمة الافتراضية/slack/events)
signingSecretStatus: "configured_unavailable" في لقطات الحساب،
فهذا يعني أن حساب HTTP مُعدّ، لكن بيئة التشغيل الحالية لم تتمكن من
حل سر التوقيع المدعوم بـ SecretRef.يعني تكرار سجل slack: webhook path ... already registered أن حسابي HTTP
يستخدمان قيمة webhookPath نفسها؛ امنح كل حساب مسارًا مميزًا.الأوامر الأصلية/أوامر الشرطة المائلة لا تعمل
الأوامر الأصلية/أوامر الشرطة المائلة لا تعمل
تحقّق مما إذا كنت تقصد:
- وضع الأوامر الأصلية (
channels.slack.commands.native: true) مع تسجيل أوامر الشرطة المائلة المطابقة في Slack - أو وضع أمر الشرطة المائلة الواحد (
channels.slack.slashCommand.enabled: true)
commands.native: "auto" أوامر Slack الأصلية؛ استخدم true وأنشئ الأوامر المطابقة في تطبيق Slack. في وضع HTTP، يجب أن يتضمن كل أمر شرطة مائلة في Slack عنوان URL الخاص بـ Gateway. في Socket Mode، تصل حمولات الأوامر عبر websocket ويتجاهل Slack القيمة slash_commands[].url.تحقّق أيضًا من commands.useAccessGroups، وتخويل الرسائل المباشرة، وقوائم السماح للقنوات،
وقوائم السماح users لكل قناة. يعيد Slack أخطاء مؤقتة
لمرسلي أوامر الشرطة المائلة المحظورين، ومنها:This channel is not allowed.You are not authorized to use this command here.
مرجع وسائط المرفقات
يمكن لـ Slack إرفاق الوسائط المنزّلة بدورة الوكيل عند نجاح تنزيل ملفات Slack وسماح حدود الحجم بذلك. يمكن نسخ المقاطع الصوتية نصيًا، ويمكن تمرير ملفات الصور عبر مسار فهم الوسائط أو مباشرةً إلى نموذج رد يدعم الرؤية، بينما تظل الملفات الأخرى متاحة كسياق ملفات قابل للتنزيل.أنواع الوسائط المدعومة
مسار المعالجة الواردة
عند وصول رسالة Slack تحتوي على مرفقات ملفات:- ينزّل OpenClaw الملف من عنوان URL الخاص في Slack باستخدام رمز البوت.
- يُكتب الملف في مخزن الوسائط عند النجاح.
- تُضاف مسارات الوسائط المنزّلة وأنواع محتواها إلى السياق الوارد.
- تُوجّه المقاطع الصوتية إلى مسار النسخ المشترك؛ ويمكن لمسارات النماذج/الأدوات الداعمة للصور استخدام مرفقات الصور من السياق نفسه.
- تظل الملفات الأخرى متاحة كبيانات وصفية للملفات أو مراجع وسائط للأدوات القادرة على التعامل معها.
توارث مرفقات جذر سلسلة المحادثة
عند وصول رسالة ضمن سلسلة محادثات (لها أصلthread_ts):
- إذا لم يحتوِ الرد نفسه على وسائط مباشرة وكانت الرسالة الجذرية المضمّنة تحتوي على ملفات، فيمكن لـ Slack تحميل ملفات الجذر كسياق لبادئ سلسلة المحادثات.
- تُحمّل ملفات الجذر فقط عند تهيئة جلسة سلسلة محادثات جديدة أو معاد ضبطها. تعيد الردود النصية اللاحقة استخدام سياق الجلسة الحالي ولا تعيد إرفاق ملفات الجذر كوسائط جديدة.
- تأخذ مرفقات الرد المباشرة الأولوية على مرفقات الرسالة الجذرية.
- تُمثّل الرسالة الجذرية التي تحتوي ملفات فقط ولا تحتوي نصًا بعنصر نائب للمرفق، بحيث يمكن للخيار الاحتياطي تضمين ملفاتها مع ذلك.
معالجة المرفقات المتعددة
عندما تحتوي رسالة Slack واحدة على عدة مرفقات ملفات:- يُعالج كل مرفق بصورة مستقلة عبر مسار الوسائط.
- تُجمّع مراجع الوسائط المنزّلة في سياق الرسالة.
- يتبع ترتيب المعالجة ترتيب ملفات Slack في حمولة الحدث.
- لا يمنع فشل تنزيل أحد المرفقات معالجة المرفقات الأخرى.
حدود الحجم والتنزيل والنموذج
- حد الحجم: الافتراضي 20 MB لكل ملف. قابل للتهيئة عبر
channels.slack.mediaMaxMb. - حد النسخ الصوتي: ينطبق
tools.media.audio.maxBytesأيضًا عند إرسال الملف المنزّل إلى موفّر نسخ أو CLI. - إخفاقات التنزيل: تُتخطى الملفات التي يتعذر على Slack توفيرها، وعناوين URL المنتهية الصلاحية، والملفات التي يتعذر الوصول إليها، والملفات التي تتجاوز الحجم، واستجابات HTML الخاصة بمصادقة/تسجيل دخول Slack، بدلًا من الإبلاغ عنها كتنسيقات غير مدعومة.
- نموذج الرؤية: يستخدم تحليل الصور نموذج الرد النشط عندما يدعم الرؤية، أو نموذج الصور المُعدّ في
agents.defaults.imageModel.
القيود المعروفة
الوثائق ذات الصلة
ذات صلة
الاقتران
اقرن مستخدم Slack بـ Gateway.
المجموعات
سلوك القنوات والرسائل المباشرة الجماعية.
توجيه القنوات
وجّه الرسائل الواردة إلى الوكلاء.
الأمان
نموذج التهديد والتقوية الأمنية.
التهيئة
بنية الإعدادات وأسبقيتها.
أوامر الشرطة المائلة
فهرس الأوامر وسلوكها.