Pairing
تستخدم رسائل Slack المباشرة وضع الإقران افتراضيًا.
Slash commands
سلوك الأوامر الأصلية وفهرس الأوامر.
Channel troubleshooting
تشخيصات وإجراءات إصلاح عبر القنوات.
اختيار Socket Mode أو عناوين URL لطلبات HTTP
كلا الناقلين جاهز للإنتاج ويحققان تكافؤ الميزات للمراسلة، وأوامر slash، وApp Home، والتفاعل. اختر حسب شكل النشر، وليس الميزات.| الاعتبار | Socket Mode (افتراضي) | عناوين URL لطلبات HTTP |
|---|---|---|
| عنوان URL عام للـ Gateway | غير مطلوب | مطلوب (DNS، وTLS، ووكيل عكسي أو نفق) |
| الشبكة الصادرة | يجب أن يكون WSS الصادر إلى wss-primary.slack.com قابلًا للوصول | لا يوجد WS صادر؛ HTTPS وارد فقط |
| الرموز المطلوبة | رمز Bot + App-Level Token مع connections:write | رمز Bot + Signing Secret |
| حاسوب التطوير / خلف جدار ناري | يعمل كما هو | يحتاج إلى نفق عام (ngrok، أو Cloudflare Tunnel، أو Tailscale Funnel) أو Gateway مرحلي |
| التوسع الأفقي | جلسة Socket Mode واحدة لكل تطبيق لكل مضيف؛ تحتاج Gateways المتعددة إلى تطبيقات Slack منفصلة | معالج POST عديم الحالة؛ يمكن لنسخ Gateway متعددة مشاركة تطبيق واحد خلف موازن حمل |
| حسابات متعددة على Gateway واحد | مدعوم؛ يفتح كل حساب WS الخاص به | مدعوم؛ يحتاج كل حساب إلى webhookPath فريد (الافتراضي /slack/events) حتى لا تتصادم التسجيلات |
| نقل أوامر slash | تُسلَّم عبر اتصال WS؛ يتم تجاهل slash_commands[].url | يرسل Slack طلبات POST إلى slash_commands[].url؛ الحقل مطلوب لتنفيذ الأمر |
| توقيع الطلبات | غير مستخدم (المصادقة هي App-Level Token) | يوقّع Slack كل طلب؛ يتحقق OpenClaw باستخدام signingSecret |
| الاستعادة عند انقطاع الاتصال | إعادة الاتصال التلقائية في Slack SDK مفعّلة؛ يعيد OpenClaw أيضًا تشغيل جلسات Socket Mode الفاشلة بتراجع محدود. ينطبق ضبط نقل مهلة Pong. | لا يوجد اتصال مستمر لينقطع؛ تتم إعادة المحاولة لكل طلب من Slack |
اختر Socket Mode للمضيفين ذوي Gateway واحد، وحواسيب التطوير، والشبكات المحلية التي يمكنها الوصول إلى
*.slack.com صادرًا لكنها لا تستطيع قبول HTTPS وارد.اختر عناوين URL لطلبات HTTP عند تشغيل عدة نسخ Gateway خلف موازن حمل، أو عندما يكون WSS الصادر محظورًا بينما HTTPS الوارد مسموحًا، أو عندما تنهي Slack webhooks مسبقًا عند وكيل عكسي.وضع الترحيل
يفصل وضع الترحيل دخول Slack عن OpenClaw gateway. يملك موجّه موثوق اتصال Slack Socket Mode الوحيد، ويختار Gateway الوجهة، ويمرر حدثًا مضبوط النوع عبر websocket مصادق عليه. يستمر Gateway في استخدام رمز bot الخاص به لاستدعاءات Slack Web API الصادرة.wss:// ما لم يكن يستهدف localhost. تعامل مع رمز bearer
وجدول توجيه الموجّه كجزء من حد تفويض Slack: تدخل الأحداث الموجّهة إلى
معالج رسائل Slack العادي كتفعيلات مصرح بها. يمكن لـ slack_identity المقدم من الموجّه
في إطار hello الخاص بـ websocket أن يضبط اسم المستخدم والأيقونة الافتراضيين للصادر؛ وتظل الهوية الصريحة
التي يوفرها المستدعي هي الغالبة. يعيد اتصال الترحيل الاتصال بنفس
توقيت التراجع المحدود المستخدم بواسطة Socket Mode ويمسح الهوية المقدمة من الموجّه كلما
انقطع الاتصال.
التثبيت
ثبّت Slack قبل تكوين القناة:plugins install الـ plugin ويفعّله. لا يزال الـ plugin لا يفعل شيئًا حتى تكوّن تطبيق Slack وإعدادات القناة أدناه. راجع Plugins لمعرفة سلوك الـ plugin العام وقواعد التثبيت.
الإعداد السريع
- Socket Mode (default)
- HTTP Request URLs
Create a new Slack app
افتح api.slack.com/apps ← Create New App ← From a manifest ← اختر مساحة عملك ← الصق أحد ملفات البيان أدناه ← Next ← Create.بعد أن ينشئ Slack التطبيق:
يطابق Recommended مجموعة ميزات Slack plugin الكاملة: App Home، وأوامر slash، والملفات، والتفاعلات، والدبابيس، والرسائل المباشرة الجماعية، وقراءات الرموز التعبيرية/مجموعات المستخدمين. اختر Minimal عندما تقيد سياسة مساحة العمل النطاقات — فهو يغطي الرسائل المباشرة، وسجل القنوات/المجموعات، والإشارات، وأوامر slash، لكنه يستبعد الملفات، والتفاعلات، والدبابيس، والرسائل المباشرة الجماعية (
mpim:*)، وemoji:read، وusergroups:read. راجع قائمة تحقق البيان والنطاقات لمعرفة مبررات كل نطاق وخيارات الإضافة مثل أوامر slash إضافية.- Basic Information -> App-Level Tokens -> Generate Token and Scopes: أضف
connections:write، ثم احفظ، وانسخ App-Level Token. - Install App -> Install to Workspace: انسخ Bot User OAuth Token.
ضبط نقل وضع Socket Mode
يضبط OpenClaw مهلة انتظار pong في عميل Slack SDK على 15 ثانية افتراضيًا في وضع Socket Mode. لا تتجاوز إعدادات النقل إلا عندما تحتاج إلى ضبط خاص بمساحة العمل أو بالمضيف:clientPingTimeout هو انتظار pong بعد أن يرسل SDK إشارة ping من العميل؛ وserverPingTimeout هو انتظار إشارات ping من خادم Slack. تبقى رسائل التطبيق والأحداث حالة تطبيق، وليست إشارات لحيوية النقل.
ملاحظات:
- يتم تجاهل
socketModeفي وضع HTTP Request URL. - تنطبق إعدادات
channels.slack.socketModeالأساسية على جميع حسابات Slack ما لم يتم تجاوزها. تستخدم التجاوزات لكل حسابchannels.slack.accounts.<accountId>.socketMode؛ ولأن هذا تجاوز كائن، أدرج كل حقل ضبط socket تريده لذلك الحساب. - لدى
clientPingTimeoutفقط قيمة افتراضية من OpenClaw (15000). يتم تمريرserverPingTimeoutوpingPongLoggingEnabledإلى Slack SDK فقط عند تكوينهما. - يبدأ التراجع قبل إعادة تشغيل Socket Mode عند نحو ثانيتين ويصل إلى حد أقصى يقارب 30 ثانية. تتم إعادة محاولة إخفاقات البدء القابلة للاسترداد، وانتظار البدء، وقطع الاتصال إلى أن تتوقف القناة. أما أخطاء الحساب وبيانات الاعتماد الدائمة مثل المصادقة غير الصالحة أو الرموز الملغاة أو النطاقات المفقودة فتفشل سريعًا بدلًا من إعادة المحاولة إلى الأبد.
قائمة التحقق من البيان والنطاقات
بيان تطبيق Slack الأساسي هو نفسه لوضع Socket Mode وعناوين HTTP Request URLs. يختلف فقط مقطعsettings (وurl الخاص بأمر الشرطة المائلة).
البيان الأساسي (افتراضي Socket Mode):
settings بمتغير HTTP وأضف url إلى كل أمر شرطة مائلة. يلزم عنوان URL عام:
إعدادات بيان إضافية
اعرض ميزات مختلفة توسّع الإعدادات الافتراضية أعلاه. يعرض البيان الافتراضي علامة التبويب الرئيسية في صفحة تطبيق Slack الرئيسية ويشترك فيapp_home_opened. عندما يفتح عضو في مساحة العمل علامة التبويب الرئيسية، ينشر OpenClaw عرضًا افتراضيًا آمنًا للصفحة الرئيسية باستخدام views.publish؛ ولا يتم تضمين أي حمولة محادثة أو إعدادات خاصة. تبقى علامة التبويب الرسائل مفعلة لرسائل Slack المباشرة. يفعّل البيان أيضًا سلاسل مساعد Slack باستخدام features.assistant_view وassistant:write وassistant_thread_started وassistant_thread_context_changed؛ تُوجَّه سلاسل المساعد إلى جلسات سلاسل OpenClaw الخاصة بها وتُبقي سياق السلسلة المقدم من Slack متاحًا للوكيل.
أوامر الشرطة المائلة الأصلية الاختيارية
أوامر الشرطة المائلة الأصلية الاختيارية
يمكن استخدام عدة أوامر شرطة مائلة أصلية بدلًا من أمر واحد مكوّن، مع مراعاة ما يلي:
- استخدم
/agentstatusبدلًا من/statusلأن أمر/statusمحجوز. - لا يمكن إتاحة أكثر من 25 أمر شرطة مائلة في وقت واحد.
features.slash_commands الحالي لديك بمجموعة فرعية من الأوامر المتاحة:- وضع Socket (الافتراضي)
- عناوين URL لطلبات HTTP
نطاقات التأليف الاختيارية (عمليات الكتابة)
نطاقات التأليف الاختيارية (عمليات الكتابة)
أضف نطاق بوت
chat:write.customize إذا أردت أن تستخدم الرسائل الصادرة هوية الوكيل النشط (اسم مستخدم وأيقونة مخصصان) بدلًا من هوية تطبيق Slack الافتراضية.إذا كنت تستخدم أيقونة emoji، يتوقع 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.- يتطلب وضع HTTP وجود
botToken+signingSecret. - يتطلب وضع Relay وجود
botTokenبالإضافة إلىrelay.urlوrelay.authTokenوrelay.gatewayId؛ ولا يستخدم رمز تطبيق أو سر توقيع. - تقبل
botTokenوappTokenوsigningSecretوrelay.authTokenوuserTokenسلاسل نص عادي أو كائنات SecretRef. - تتجاوز رموز الإعدادات بديل env الاحتياطي.
- ينطبق بديل env الاحتياطي
SLACK_BOT_TOKEN/SLACK_APP_TOKENعلى الحساب الافتراضي فقط. userTokenمخصص للإعدادات فقط (من دون بديل env احتياطي) ويستخدم افتراضيًا سلوك القراءة فقط (userTokenReadOnly: true).
- يتتبع فحص حساب Slack حقول
*Sourceو*Statusلكل اعتماد (botTokenوappTokenوsigningSecretوuserToken). - الحالة هي
availableأوconfigured_unavailableأوmissing. - تعني
configured_unavailableأن الحساب مكوّن عبر SecretRef أو مصدر سر غير مضمن آخر، لكن مسار الأمر/وقت التشغيل الحالي لم يتمكن من حل القيمة الفعلية. - في وضع HTTP، يتم تضمين
signingSecretStatus؛ وفي وضع Socket، يكون الزوج المطلوب هوbotTokenStatus+appTokenStatus.
الإجراءات والبوابات
تتحكمchannels.slack.actions.* في إجراءات Slack.
مجموعات الإجراءات المتاحة في أدوات Slack الحالية:
| المجموعة | الافتراضي |
|---|---|
| الرسائل | مفعّل |
| التفاعلات | مفعّل |
| الدبابيس | مفعّل |
| معلومات العضو | مفعّل |
| قائمة emoji | مفعّل |
send وupload-file وdownload-file وread وedit وdelete وpin وunpin وlist-pins وmember-info وemoji-list. يقبل download-file معرّفات ملفات Slack الظاهرة في عناصر نائبة للملفات الواردة، ويعيد معاينات صور للصور أو بيانات تعريف ملف محلي لأنواع الملفات الأخرى.
التحكم في الوصول والتوجيه
- DM policy
- Channel policy
- Mentions and channel users
يتحكم
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؛ وMPIMs كـ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.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. اضبط 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 متى يُرسل ذلك الرمز التعبيري فعليًا.
الرمز التعبيري (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 على "direct" أو "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.nativeStreamingالقديم هو اسم مستعار في وقت التشغيل لـchannels.slack.streaming.nativeTransport.- شغّل
openclaw doctor --fixلإعادة كتابة إعدادات بث Slack المحفوظة إلى المفاتيح المعيارية.
رجوع تفاعل الكتابة
يضيفtypingReaction تفاعلًا مؤقتًا إلى رسالة Slack الواردة أثناء معالجة OpenClaw لرد، ثم يزيله عند انتهاء التشغيل. يكون هذا أكثر فائدة خارج ردود السلاسل، التي تستخدم مؤشر حالة افتراضيًا “يكتب…”.
ترتيب الحل:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- يتوقع Slack رموزًا قصيرة (مثل
"hourglass_flowing_sand"). - التفاعل على أساس أفضل جهد، وتُحاول عملية التنظيف تلقائيًا بعد اكتمال مسار الرد أو الفشل.
الوسائط والتجزئة والتسليم
المرفقات الواردة
المرفقات الواردة
تُنزَّل مرفقات ملفات Slack من عناوين URL الخاصة المستضافة على Slack (تدفق طلبات مصادق عليه بالرمز) وتُكتب إلى مخزن الوسائط عندما ينجح الجلب وتسمح حدود الحجم. تتضمن العناصر النائبة للملفات
fileId الخاص بـ Slack بحيث يمكن للوكلاء جلب الملف الأصلي باستخدام download-file.تستخدم التنزيلات مهلات خمول وإجمالية محدودة. إذا توقّف استرجاع ملف Slack أو فشل، يواصل OpenClaw معالجة الرسالة ويعود إلى العنصر النائب للملف.الحد الأقصى لحجم الوارد في وقت التشغيل هو 20MB افتراضيًا ما لم يتم تجاوزه بواسطة channels.slack.mediaMaxMb.النص والملفات الصادرة
النص والملفات الصادرة
- تستخدم أجزاء النص
channels.slack.textChunkLimit(الافتراضي 4000) - يفعّل
channels.slack.chunkMode="newline"التقسيم الذي يعطي الأولوية للفقرات - تستخدم عمليات إرسال الملفات واجهات API للرفع في Slack ويمكن أن تتضمن ردود سلاسل (
thread_ts) - يتبع الحد الأقصى للوسائط الصادرة
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 الأصلية.
- حتى 5 خيارات: كتل أزرار
- 6-100 خيار: قائمة اختيار ثابتة
- أكثر من 100 خيار: اختيار خارجي مع ترشيح خيارات غير متزامن عندما تكون معالجات خيارات التفاعل متاحة
- عند تجاوز حدود Slack: تعود قيم الخيارات المشفرة إلى الأزرار
agent:<agentId>:slack:slash:<userId>، وتظل توجّه تنفيذ الأوامر إلى جلسة المحادثة المستهدفة باستخدام CommandTargetSessionKey.
الردود التفاعلية
يمكن لـ Slack عرض عناصر تحكم تفاعلية للردود التي ينشئها الوكيل، لكن هذه الميزة معطلة افتراضيا. بالنسبة إلى مخرجات الوكيل الجديد وCLI وPlugin، فضّل أزرار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
يمكن لـ Slack plugins التي تسجل معالج تفاعل أن تستقبل أيضا أحداث دورة الحياةview_submission وview_closed قبل أن يضغط OpenClaw الحمولة لحدث النظام المرئي للوكيل. استخدم أحد أنماط التوجيه هذه عند فتح نافذة 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 أن يعمل كعميل موافقة أصلي بأزرار وتفاعلات تفاعلية، بدلا من التراجع إلى واجهة الويب أو الطرفية.- يمكن عرض موافقات Exec وPlugin كمطالبات Slack-native Block Kit.
- يظل
channels.slack.execApprovals.*هو إعداد تمكين عميل موافقات exec الأصلي وتكوين توجيه الرسائل الخاصة/القناة. - تستخدم رسائل موافقة Exec الخاصة
channels.slack.execApprovals.approversأوcommands.ownerAllowFrom. - تستخدم موافقات Plugin أزرار Slack-native عندما يكون Slack مفعلا كعميل موافقة أصلي للجلسة المنشئة، أو عندما يوجّه
approvals.pluginإلى جلسة Slack المنشئة أو هدف Slack. - تستخدم رسائل موافقة Plugin الخاصة معتمدي Slack plugin من
channels.slack.allowFromأوallowFromللحساب المسمى أو المسار الافتراضي للحساب. - لا يزال تفويض المعتمدين مفروضا: لا يمكن للمعتمدين الخاصين بـ exec فقط الموافقة على طلبات 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" ويتم حل معتمد exec واحد على الأقل. يمكن لـ Slack أيضا التعامل مع موافقات Plugin الأصلية عبر مسار العميل الأصلي هذا عندما يتم حل معتمدي Slack plugin ويطابق الطلب عوامل تصفية العميل الأصلي. اضبط enabled: false لتعطيل Slack صراحة كعميل موافقة أصلي. اضبط enabled: true لفرض تشغيل الموافقات الأصلية عندما يتم حل المعتمدين. تعطيل موافقات Slack exec لا يعطل تسليم موافقة Slack plugin الأصلية المفعلة عبر approvals.plugin؛ يستخدم تسليم موافقة Plugin معتمدي Slack plugin بدلا من ذلك.
السلوك الافتراضي دون تكوين صريح لموافقة Slack exec:
approvals.exec المشتركة منفصلة. استخدمها فقط عندما يجب أيضا توجيه مطالبات موافقة exec إلى دردشات أخرى أو أهداف صريحة خارج النطاق. إعادة توجيه approvals.plugin المشتركة منفصلة أيضا؛ لا يمنع تسليم Slack الأصلي ذلك التراجع إلا عندما يستطيع Slack التعامل مع طلب موافقة Plugin محليا.
يعمل /approve في الدردشة نفسها أيضا في قنوات Slack والرسائل الخاصة التي تدعم الأوامر بالفعل. راجع موافقات Exec للاطلاع على نموذج إعادة توجيه الموافقة الكامل.
الأحداث والسلوك التشغيلي
- تُحوّل تعديلات/حذف الرسائل إلى أحداث نظام.
- تُعالج بثوث السلاسل (“Also send to channel” في ردود السلاسل) كرسائل مستخدم عادية.
- تُحوّل أحداث إضافة/إزالة التفاعلات إلى أحداث نظام.
- تُحوّل أحداث انضمام/مغادرة الأعضاء، وإنشاء/إعادة تسمية القنوات، وإضافة/إزالة التثبيت إلى أحداث نظام.
- يمكن لـ
channel_id_changedترحيل مفاتيح تكوين القناة عند تفعيلconfigWrites. - تُعامل بيانات موضوع/غرض القناة الوصفية كسياق غير موثوق ويمكن حقنها في سياق التوجيه.
- تُرشّح بادئة السلسلة وبذر سياق سجل السلسلة الأولي بواسطة قوائم السماح للمرسلين المكوّنة عند الاقتضاء.
- تصدر إجراءات الكتل والاختصارات وتفاعلات النوافذ المنبثقة أحداث نظام
Slack interaction: ...منظمة بحقول حمولة غنية:- إجراءات الكتل: القيم المحددة، التسميات، قيم المنتقي، وبيانات
workflow_*الوصفية - الاختصارات العامة: بيانات رد الاتصال والفاعل الوصفية، موجّهة إلى جلسة الفاعل المباشرة
- اختصارات الرسائل: رد الاتصال والفاعل والقناة والسلسلة وسياق الرسالة المحددة
- أحداث
view_submissionوview_closedللنوافذ المنبثقة مع بيانات القناة الوصفية الموجهة ومدخلات النموذج
- إجراءات الكتل: القيم المحددة، التسميات، قيم المنتقي، وبيانات
مرجع التكوين
المرجع الأساسي: مرجع التكوين - Slack.حقول Slack عالية الأهمية
حقول Slack عالية الأهمية
- الوضع/المصادقة:
mode,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 - التسليم:
textChunkLimit,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. راجع أحداث الغرفة المحيطة.
رسائل DM يتم تجاهلها
رسائل DM يتم تجاهلها
تحقق من:
channels.slack.dm.enabledchannels.slack.dmPolicy(أو القديمchannels.slack.dm.policy)- موافقات الاقتران / إدخالات قائمة السماح (
dmPolicy: "open"لا يزال يتطلبchannels.slack.allowFrom: ["*"]) - تستخدم رسائل DM الجماعية معالجة MPIM؛ فعّل
channels.slack.dm.groupEnabled، وإذا كان مكوّنا، أدرج MPIM فيchannels.slack.dm.groupChannels - أحداث DM الخاصة بـ Slack Assistant: السجلات المفصلة التي تذكر
drop message_changedتعني عادة أن Slack أرسل حدث سلسلة Assistant معدلا دون مرسل بشري قابل للاسترداد في بيانات الرسالة الوصفية
وضع Socket لا يتصل
وضع Socket لا يتصل
تحقق من رموز bot + app وتمكين 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 وتسمح حدود الحجم بذلك. يمكن تمرير ملفات الصور عبر مسار فهم الوسائط أو مباشرةً إلى نموذج رد قادر على الرؤية؛ وتُحتفظ بالملفات الأخرى كسياق ملفات قابل للتنزيل بدلاً من معاملتها كمدخلات صور.أنواع الوسائط المدعومة
| نوع الوسائط | المصدر | السلوك الحالي | ملاحظات |
|---|---|---|---|
| صور JPEG / PNG / GIF / WebP | عنوان URL لملف Slack | يتم تنزيلها وإرفاقها بالدورة للمعالجة القادرة على الرؤية | حد لكل ملف: channels.slack.mediaMaxMb (الافتراضي 20 MB) |
| ملفات PDF | عنوان URL لملف Slack | يتم تنزيلها وتقديمها كسياق ملف لأدوات مثل download-file أو pdf | لا يحوّل وارد Slack ملفات PDF إلى مدخلات رؤية الصور تلقائياً |
| ملفات أخرى | عنوان URL لملف Slack | يتم تنزيلها عندما يكون ذلك ممكناً وتقديمها كسياق ملف | لا تُعامل الملفات الثنائية كمدخلات صور |
| ردود السلاسل | ملفات بادئ السلسلة | يمكن إغناء ملفات الرسالة الجذرية كسياق عندما لا يحتوي الرد على وسائط مباشرة | تستخدم البوادئ التي تحتوي على ملفات فقط عنصراً نائباً للمرفق |
| رسائل متعددة الصور | ملفات Slack متعددة | يتم تقييم كل ملف بشكل مستقل | تقتصر معالجة Slack على ثمانية ملفات لكل رسالة |
مسار الوارد
عند وصول رسالة Slack تحتوي على مرفقات ملفات:- ينزّل OpenClaw الملف من عنوان URL الخاص في Slack باستخدام رمز البوت.
- يُكتب الملف في مخزن الوسائط عند النجاح.
- تُضاف مسارات الوسائط المنزلة وأنواع المحتوى إلى السياق الوارد.
- يمكن لمسارات النماذج/الأدوات القادرة على الصور استخدام مرفقات الصور من ذلك السياق.
- تبقى الملفات غير الصورية متاحة كبيانات تعريف ملف أو مراجع وسائط للأدوات التي يمكنها التعامل معها.
توريث مرفقات جذر السلسلة
عند وصول رسالة في سلسلة (لها أصلthread_ts):
- إذا لم يكن للرد نفسه أي وسائط مباشرة وكانت الرسالة الجذرية المضمنة تحتوي على ملفات، يمكن لـ Slack إغناء ملفات الجذر كسياق لبداية السلسلة.
- تكون لمرفقات الرد المباشرة أولوية على مرفقات الرسالة الجذرية.
- تُمثَّل الرسالة الجذرية التي تحتوي على ملفات فقط ولا تحتوي على نص بعنصر نائب للمرفق حتى يظل بإمكان المسار الاحتياطي تضمين ملفاتها.
التعامل مع المرفقات المتعددة
عندما تحتوي رسالة Slack واحدة على عدة مرفقات ملفات:- تتم معالجة كل مرفق بشكل مستقل عبر مسار الوسائط.
- تُجمّع مراجع الوسائط المنزلة في سياق الرسالة.
- يتبع ترتيب المعالجة ترتيب ملفات Slack في حمولة الحدث.
- لا يمنع فشل تنزيل أحد المرفقات معالجة المرفقات الأخرى.
حدود الحجم والتنزيل والنموذج
- حد الحجم: الافتراضي 20 MB لكل ملف. قابل للتكوين عبر
channels.slack.mediaMaxMb. - إخفاقات التنزيل: يتم تخطي الملفات التي لا يستطيع Slack تقديمها، وعناوين URL المنتهية الصلاحية، والملفات غير القابلة للوصول، والملفات التي تتجاوز الحجم المسموح، واستجابات HTML الخاصة بمصادقة/تسجيل دخول Slack، بدلاً من الإبلاغ عنها كتنسيقات غير مدعومة.
- نموذج الرؤية: يستخدم تحليل الصور نموذج الرد النشط عندما يدعم الرؤية، أو نموذج الصور المكوّن في
agents.defaults.imageModel.
الحدود المعروفة
| السيناريو | السلوك الحالي | الحل البديل |
|---|---|---|
| عنوان URL منتهي الصلاحية لملف Slack | يتم تخطي الملف؛ لا يظهر أي خطأ | أعد تحميل الملف في Slack |
| نموذج الرؤية غير مكوّن | تُخزّن مرفقات الصور كمراجع وسائط، لكن لا تُحلّل كصور | كوّن agents.defaults.imageModel أو استخدم نموذج رد قادر على الرؤية |
| صور كبيرة جداً (> 20 MB افتراضياً) | يتم تخطيها حسب حد الحجم | زِد channels.slack.mediaMaxMb إذا كان Slack يسمح بذلك |
| المرفقات المُعاد توجيهها/المشتركة | النص والوسائط الصورية/الملفية المستضافة على Slack تكون على أساس أفضل جهد | أعد مشاركتها مباشرةً في سلسلة OpenClaw |
| مرفقات PDF | تُخزّن كسياق ملف/وسائط، ولا تُوجّه تلقائياً عبر رؤية الصور | استخدم download-file لبيانات تعريف الملف أو أداة pdf لتحليل PDF |
الوثائق ذات الصلة
- مسار فهم الوسائط
- أداة PDF
- الملحمة: #51349 — تمكين رؤية مرفقات Slack
- اختبارات الانحدار: #51353
- التحقق الحي: #51354
ذات صلة
الإقران
أقرن مستخدم Slack بالبوابة.
المجموعات
سلوك القنوات والرسائل المباشرة الجماعية.
توجيه القنوات
وجّه الرسائل الواردة إلى الوكلاء.
الأمان
نموذج التهديد والتقوية.
التكوين
تخطيط التكوين والأولوية.
أوامر الشرطة المائلة
فهرس الأوامر والسلوك.