Slack
الحالة: جاهز للإنتاج للرسائل الخاصة + القنوات عبر تكاملات تطبيق Slack. الوضع الافتراضي هو Socket Mode؛ كما أن عناوين URL لطلبات HTTP مدعومة أيضًا.الاقتران
تكون الرسائل الخاصة في Slack افتراضيًا في وضع الاقتران.
أوامر الشرطة المائلة
سلوك الأوامر الأصلي وكتالوج الأوامر.
استكشاف أخطاء القناة وإصلاحها
تشخيصات متعددة القنوات وأدلة الإصلاح.
الإعداد السريع
- Socket Mode (الافتراضي)
- عناوين URL لطلبات HTTP
أنشئ تطبيق Slack جديدًا
في إعدادات تطبيق Slack اضغط زر Create New App:
- اختر from a manifest وحدد مساحة عمل لتطبيقك
- الصق البيان النموذجي من الأسفل وتابع الإنشاء
- أنشئ App-Level Token (
xapp-...) معconnections:write - ثبّت التطبيق وانسخ Bot Token (
xoxb-...) المعروض
قائمة التحقق من البيان والنطاقات
- Socket Mode (الافتراضي)
- عناوين URL لطلبات HTTP
إعدادات بيان إضافية
اعرض ميزات مختلفة توسّع الإعدادات الافتراضية أعلاه.أوامر الشرطة المائلة الأصلية الاختيارية
أوامر الشرطة المائلة الأصلية الاختيارية
يمكن استخدام عدة أوامر شرطة مائلة أصلية بدلًا من أمر واحد مكوَّن، مع بعض الفروق الدقيقة:
- استخدم
/agentstatusبدلًا من/statusلأن الأمر/statusمحجوز. - لا يمكن إتاحة أكثر من 25 أمر شرطة مائلة في الوقت نفسه.
features.slash_commands الحالي لديك بمجموعة فرعية من الأوامر المتاحة:- Socket Mode (الافتراضي)
- عناوين URL لطلبات HTTP
نطاقات التأليف الاختيارية (عمليات الكتابة)
نطاقات التأليف الاختيارية (عمليات الكتابة)
أضف نطاق البوت
chat:write.customize إذا كنت تريد أن تستخدم الرسائل الصادرة هوية الوكيل النشط (اسم مستخدم وأيقونة مخصصان) بدلًا من هوية تطبيق Slack الافتراضية.إذا استخدمت أيقونة emoji، فإن Slack يتوقع صياغة :emoji_name:.نطاقات user token الاختيارية (عمليات القراءة)
نطاقات user token الاختيارية (عمليات القراءة)
إذا قمت بتكوين
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وappTokenوsigningSecretوuserTokenسلاسل نصية عادية أو كائنات SecretRef. - تتجاوز رموز التكوين المميزة بديل متغيرات البيئة.
- ينطبق بديل متغيرات البيئة
SLACK_BOT_TOKEN/SLACK_APP_TOKENعلى الحساب الافتراضي فقط. userToken(xoxp-...) متاح عبر التكوين فقط (من دون بديل متغيرات البيئة) ويكون افتراضيًا بسلوك للقراءة فقط (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 الحالية:
| Group | Default |
|---|---|
| messages | enabled |
| reactions | enabled |
| pins | enabled |
| memberInfo | enabled |
| emojiList | enabled |
send و upload-file و download-file و read و edit و delete و pin و unpin و list-pins و member-info و emoji-list.
التحكم في الوصول والتوجيه
- سياسة الرسائل الخاصة
- سياسة القناة
- الإشارات ومستخدمي القنوات
تتحكم
channels.slack.dmPolicy في الوصول إلى الرسائل الخاصة (الاسم القديم: channels.slack.dm.policy):pairing(افتراضي)allowlistopen(يتطلب أن تتضمنchannels.slack.allowFromالقيمة"*"؛ الاسم القديم:channels.slack.dm.allowFrom)disabled
dm.enabled(القيمة الافتراضية true)channels.slack.allowFrom(المفضل)dm.allowFrom(قديم)dm.groupEnabled(الرسائل الخاصة الجماعية تكون false افتراضيًا)dm.groupChannels(قائمة سماح MPIM اختيارية)
- تنطبق
channels.slack.accounts.default.allowFromعلى الحسابdefaultفقط. - ترث الحسابات المسماة
channels.slack.allowFromعندما لا تكون قيمةallowFromالخاصة بها مضبوطة. - لا ترث الحسابات المسماة
channels.slack.accounts.default.allowFrom.
openclaw pairing approve slack <code>.سلاسل المحادثات والجلسات وعلامات الرد
- تُوجَّه الرسائل الخاصة كـ
direct؛ والقنوات كـchannel؛ وMPIMs كـgroup. - مع الإعداد الافتراضي
session.dmScope=main، تُدمج الرسائل الخاصة في Slack ضمن الجلسة الرئيسية للوكيل. - جلسات القنوات:
agent:<agentId>:slack:channel:<channelId>. - يمكن أن تُنشئ ردود السلاسل لاحقات جلسة خاصة بالسلسلة (
:thread:<threadTs>) عند الاقتضاء. - القيمة الافتراضية لـ
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>]]
replyToMode="off" إلى تعطيل كل سلاسل الرد في Slack، بما في ذلك علامات [[reply_to_*]] الصريحة. يختلف هذا عن Telegram، حيث لا تزال العلامات الصريحة مُعترفًا بها في وضع "off". يعكس هذا الاختلاف نماذج السلاسل في المنصتين: إذ تخفي سلاسل Slack الرسائل عن القناة، بينما تظل ردود Telegram مرئية في التدفق الرئيسي للمحادثة.
تفاعلات الإقرار
ترسلackReaction رمزًا تعبيريًا للإقرار بينما يعالج OpenClaw رسالة واردة.
ترتيب التحليل:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- البديل من emoji لهوية الوكيل (
agents.list[].identity.emoji، وإلا ”👀”)
- يتوقع Slack shortcodes (مثل
"eyes"). - استخدم
""لتعطيل التفاعل لحساب Slack أو على المستوى العام.
بث النص
تتحكمchannels.slack.streaming في سلوك المعاينة المباشرة:
off: تعطيل بث المعاينة المباشرة.partial(الافتراضي): استبدال نص المعاينة بأحدث مخرجات جزئية.block: إلحاق تحديثات المعاينة المقطعة.progress: عرض نص حالة التقدم أثناء الإنشاء، ثم إرسال النص النهائي.
channels.slack.streaming.nativeTransport في البث النصي الأصلي في Slack عندما تكون قيمة channels.slack.streaming.mode هي partial (الافتراضي: true).
- يجب أن تكون سلسلة رد متاحة حتى يظهر البث النصي الأصلي وحالة سلسلة مساعد Slack. ويظل اختيار السلسلة يتبع
replyToMode. - يمكن أن تستمر جذور القنوات ومحادثات المجموعات في استخدام معاينة المسودة العادية عندما لا يكون البث الأصلي متاحًا.
- تظل الرسائل الخاصة ذات المستوى الأعلى في Slack خارج السلسلة افتراضيًا، لذلك لا تعرض المعاينة بنمط السلسلة؛ استخدم ردود السلسلة أو
typingReactionإذا كنت تريد تقدمًا مرئيًا هناك. - تعود الوسائط والحمولات غير النصية إلى التسليم العادي.
- إذا فشل البث في منتصف الرد، يعود 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.
بديل تفاعل الكتابة
تضيفtypingReaction تفاعلًا مؤقتًا إلى رسالة Slack الواردة بينما يعالج OpenClaw ردًا، ثم تزيله عند انتهاء التشغيل. ويكون هذا مفيدًا بشكل خاص خارج ردود السلاسل، التي تستخدم مؤشر حالة افتراضي “is typing…”.
ترتيب التحليل:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- يتوقع Slack shortcodes (مثل
"hourglass_flowing_sand"). - يكون التفاعل على أساس أفضل جهد، وتُحاول عملية التنظيف تلقائيًا بعد اكتمال الرد أو مسار الفشل.
الوسائط والتقطيع والتسليم
المرفقات الواردة
المرفقات الواردة
تُنزَّل مرفقات ملفات Slack من عناوين URL خاصة مستضافة في Slack (تدفق طلبات موثّق بالرمز المميز) وتُكتب في مخزن الوسائط عندما ينجح الجلب وتسمح حدود الحجم بذلك.يكون الحد الأقصى الافتراضي للحجم الوارد في وقت التشغيل
20MB ما لم يتم تجاوزه بواسطة channels.slack.mediaMaxMb.النصوص والملفات الصادرة
النصوص والملفات الصادرة
- تستخدم مقاطع النص
channels.slack.textChunkLimit(الافتراضي 4000) - يفعّل
channels.slack.chunkMode="newline"التقسيم بحسب الفقرة أولًا - تستخدم عمليات إرسال الملفات واجهات Slack API للرفع ويمكن أن تتضمن ردود السلسلة (
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 عرض عناصر تحكم تفاعلية للردود التي ينشئها الوكيل، لكن هذه الميزة معطلة افتراضيًا. فعّلها على مستوى عام:[[slack_buttons: Approve:approve, Reject:reject]][[slack_select: Choose a target | Canary:canary, Production:production]]
- هذه واجهة مستخدم خاصة بـ Slack. لا تترجم القنوات الأخرى توجيهات Slack Block Kit إلى أنظمة الأزرار الخاصة بها.
- قيم الاستدعاء التفاعلي هي رموز مبهمة مولدة من OpenClaw، وليست قيمًا خامًا أنشأها الوكيل.
- إذا كانت الكتل التفاعلية المولدة ستتجاوز حدود Slack Block Kit، يعود OpenClaw إلى الرد النصي الأصلي بدلًا من إرسال حمولة كتل غير صالحة.
موافقات Exec في Slack
يمكن أن يعمل Slack كعميل موافقة أصلي مع أزرار وتفاعلات تفاعلية، بدلًا من الرجوع إلى واجهة الويب أو الطرفية.- تستخدم موافقات Exec المسار
channels.slack.execApprovals.*للتوجيه الأصلي في الرسائل الخاصة/القنوات. - لا تزال موافقات plugin تُحل عبر نفس سطح الأزرار الأصلي في Slack عندما يصل الطلب بالفعل إلى Slack ويكون نوع معرّف الموافقة هو
plugin:. - يظل تفويض الموافقين مطبقًا: يمكن فقط للمستخدمين المحددين بوصفهم موافقين الموافقة على الطلبات أو رفضها عبر Slack.
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" وعند حلّ موافق واحد على الأقل. اضبط enabled: false لتعطيل Slack كعميل موافقة أصلي بشكل صريح.
واضبط enabled: true لفرض تفعيل الموافقات الأصلية عند حلّ الموافقين.
السلوك الافتراضي من دون تكوين صريح لموافقات Slack exec:
approvals.exec المشترك منفصلًا. استخدمه فقط عندما يجب أيضًا
توجيه مطالبات موافقة exec إلى محادثات أخرى أو أهداف صريحة خارج النطاق. كما أن توجيه approvals.plugin المشترك
منفصل أيضًا؛ ولا تزال أزرار Slack الأصلية قادرة على حل موافقات plugin عندما تصل تلك الطلبات بالفعل
إلى Slack.
كما يعمل /approve داخل نفس المحادثة في قنوات Slack والرسائل الخاصة التي تدعم الأوامر بالفعل. راجع موافقات Exec للحصول على نموذج توجيه الموافقة الكامل.
الأحداث والسلوك التشغيلي
- تُحوَّل تعديلات الرسائل/حذفها/بث السلاسل إلى أحداث نظام.
- تُحوَّل أحداث إضافة/إزالة التفاعلات إلى أحداث نظام.
- تُحوَّل أحداث انضمام/مغادرة الأعضاء، وإنشاء/إعادة تسمية القنوات، وإضافة/إزالة التثبيت إلى أحداث نظام.
- يمكن لـ
channel_id_changedترحيل مفاتيح تكوين القناة عندما تكونconfigWritesمفعلة. - يُتعامل مع بيانات موضوع/غرض القناة الوصفية على أنها سياق غير موثوق ويمكن حقنها في سياق التوجيه.
- تُرشَّح رسائل بدء السلسلة وتغذية سياق سجل السلسلة الأولي وفقًا لقوائم سماح المرسلين المكوَّنة عند الاقتضاء.
- تصدر إجراءات الكتل وتفاعلات النوافذ المشروطة أحداث نظام منظَّمة من نوع
Slack interaction: ...مع حقول حمولة غنية:- إجراءات الكتل: القيم المحددة، والتسميات، وقيم أدوات الاختيار، وبيانات
workflow_*الوصفية - أحداث النوافذ
view_submissionوview_closedمع بيانات القناة الموجَّهة ومدخلات النماذج
- إجراءات الكتل: القيم المحددة، والتسميات، وقيم أدوات الاختيار، وبيانات
مؤشرات مرجعية للتكوين
المرجع الأساسي:-
مرجع التكوين - 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 - العمليات/الميزات:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
- الوضع/المصادقة:
استكشاف الأخطاء وإصلاحها
لا توجد ردود في القنوات
لا توجد ردود في القنوات
تحقق، بالترتيب، من:
groupPolicy- قائمة سماح القنوات (
channels.slack.channels) requireMention- قائمة سماح
usersلكل قناة
تجاهل رسائل DM
تجاهل رسائل DM
تحقق من:
channels.slack.dm.enabledchannels.slack.dmPolicy(أو القديمchannels.slack.dm.policy)- موافقات الاقتران / إدخالات قائمة السماح
وضع Socket لا يتصل
وضع Socket لا يتصل
تحقّق من bot token و app token وتفعيل Socket Mode في إعدادات تطبيق Slack.إذا أظهر
openclaw channels status --probe --json أن botTokenStatus أو
appTokenStatus: "configured_unavailable"، فهذا يعني أن حساب Slack
مكوَّن ولكن وقت التشغيل الحالي لم يتمكن من حل
القيمة المدعومة بـ SecretRef.وضع HTTP لا يستقبل الأحداث
وضع HTTP لا يستقبل الأحداث
تحقق من:
- signing secret
- webhook path
- عناوين URL لطلبات Slack (الأحداث + التفاعلية + أوامر الشرطة المائلة)
webhookPathفريد لكل حساب HTTP
signingSecretStatus: "configured_unavailable" في لقطات
الحساب، فهذا يعني أن حساب HTTP مكوَّن ولكن وقت التشغيل الحالي لم يتمكن من
حل signing secret المدعوم بـ SecretRef.الأوامر الأصلية/أوامر الشرطة المائلة لا تعمل
الأوامر الأصلية/أوامر الشرطة المائلة لا تعمل
تحقّق مما إذا كنت تقصد:
- وضع الأوامر الأصلية (
channels.slack.commands.native: true) مع أوامر الشرطة المائلة المطابقة والمسجلة في Slack - أو وضع أمر الشرطة المائلة الواحد (
channels.slack.slashCommand.enabled: true)
commands.useAccessGroups وقوائم سماح القناة/المستخدم.