Slack
الحالة: جاهز للإنتاج للرسائل المباشرة + القنوات عبر تكاملات تطبيق Slack. الوضع الافتراضي هو Socket Mode؛ كما أن وضع HTTP Events API مدعوم أيضًا.الاقتران
تستخدم الرسائل المباشرة في Slack وضع الاقتران افتراضيًا.
أوامر slash
سلوك الأوامر الأصلي وكتالوج الأوامر.
استكشاف أخطاء القنوات وإصلاحها
تشخيصات عبر القنوات وأدلة إصلاح.
الإعداد السريع
- Socket Mode (الافتراضي)
- وضع HTTP Events API
أنشئ تطبيق Slack والرموز
في إعدادات تطبيق Slack:
- فعّل Socket Mode
- أنشئ App Token (
xapp-...) معconnections:write - ثبّت التطبيق وانسخ Bot Token (
xoxb-...)
اشترك في أحداث التطبيق
اشترك في أحداث البوت التالية:
app_mentionmessage.channels,message.groups,message.im,message.mpimreaction_added,reaction_removedmember_joined_channel,member_left_channelchannel_renamepin_added,pin_removed
قائمة التحقق من manifest والنطاقات
مثال على manifest لتطبيق Slack
مثال على manifest لتطبيق Slack
نطاقات 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).- اختياري: أضف
chat:write.customizeإذا كنت تريد أن تستخدم الرسائل الصادرة هوية الوكيل النشطة (اسم مستخدمusernameمخصص وأيقونة). يستخدمicon_emojiصيغة:emoji_name:.
- يتتبع فحص حساب 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 الحالية:
| المجموعة | الافتراضي |
|---|---|
| messages | مفعّل |
| reactions | مفعّل |
| pins | مفعّل |
| memberInfo | مفعّل |
| emojiList | مفعّل |
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(الرسائل المباشرة الجماعية default 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.replyToMode: off|first|all(الافتراضي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.nativeStreaming في البث النصي الأصلي في Slack عندما تكون streaming هي partial (الافتراضي: true).
- يجب أن تكون سلسلة رد متاحة حتى يظهر البث النصي الأصلي. ولا يزال اختيار السلسلة يتبع
replyToMode. ومن دونها، تُستخدم معاينة المسودة العادية. - تعود الوسائط والحمولات غير النصية إلى التسليم العادي.
- إذا فشل البث في منتصف الرد، يعود OpenClaw إلى التسليم العادي للحمولات المتبقية.
- تتم الترحيل التلقائي لـ
channels.slack.streamMode(replace | status_final | append) إلىchannels.slack.streaming. - تتم الترحيل التلقائي لـ boolean
channels.slack.streamingإلىchannels.slack.nativeStreaming.
الرجوع إلى تفاعل الكتابة
يضيفtypingReaction تفاعلًا مؤقتًا إلى رسالة Slack الواردة بينما يعالج OpenClaw ردًا، ثم يزيله عند انتهاء التشغيل. وهذا مفيد أكثر خارج ردود السلاسل، التي تستخدم مؤشر حالة افتراضي “is typing…”.
ترتيب التحليل:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- يتوقع Slack shortcodes (على سبيل المثال
"hourglass_flowing_sand"). - التفاعل best-effort وتتم محاولة تنظيفه تلقائيًا بعد اكتمال الرد أو مسار الفشل.
الوسائط والتجزئة والتسليم
المرفقات الواردة
المرفقات الواردة
تُنزَّل مرفقات ملفات Slack من عناوين URL خاصة مستضافة لدى Slack (تدفق طلبات موثَّق بالرمز) وتُكتب في مخزن الوسائط عند نجاح الجلب والسماح بحدود الحجم.الحد الأقصى للحجم الوارد في وقت التشغيل يكون افتراضيًا
20MB ما لم يتم تجاوزه عبر channels.slack.mediaMaxMb.النصوص والملفات الصادرة
النصوص والملفات الصادرة
- تستخدم مقاطع النص
channels.slack.textChunkLimit(الافتراضي 4000) - يفعّل
channels.slack.chunkMode="newline"التقسيم بحسب الفقرات أولًا - تستخدم عمليات إرسال الملفات واجهات Slack upload API ويمكن أن تتضمن ردود سلاسل (
thread_ts) - يتبع الحد الأقصى للوسائط الصادرة
channels.slack.mediaMaxMbعند إعداده؛ وإلا فتستخدم عمليات الإرسال في القنوات القيم الافتراضية حسب نوع MIME من media pipeline
أهداف التسليم
أهداف التسليم
الأهداف الصريحة المفضلة:
user:<id>للرسائل المباشرةchannel:<id>للقنوات
الأوامر وسلوك slash
- الوضع التلقائي للأوامر الأصلية معطّل في Slack (
commands.native: "auto"لا يفعّل أوامر Slack الأصلية). - فعّل معالجات أوامر Slack الأصلية باستخدام
channels.slack.commands.native: true(أو الإعداد العامcommands.native: true). - عند تفعيل الأوامر الأصلية، سجّل أوامر slash المطابقة في Slack (أسماء
/<command>)، مع استثناء واحد:- سجّل
/agentstatusلأمر الحالة (يحجز Slack الاسم/status)
- سجّل
- إذا لم تكن الأوامر الأصلية مفعّلة، فيمكنك تشغيل أمر slash واحد مُعدّ عبر
channels.slack.slashCommand. - تتكيف قوائم الوسائط الأصلية للوسائط مع إستراتيجية العرض:
- حتى 5 خيارات: كتل أزرار
- من 6 إلى 100 خيار: قائمة اختيار ثابتة
- أكثر من 100 خيار: اختيار خارجي مع تصفية خيارات غير متزامنة عند توفر معالجات خيارات التفاعلية
- إذا تجاوزت قيم الخيارات المشفّرة حدود Slack، يعود التدفق إلى الأزرار
- بالنسبة إلى حمولات الخيارات الطويلة، تستخدم قوائم وسائط معاملات أوامر Slash مربع حوار تأكيد قبل إرسال القيمة المحددة.
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
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 إلى أنظمة الأزرار الخاصة بها.
- قيم ردود النداء التفاعلية هي رموز opaque مولدة من OpenClaw، وليست قيمًا خام كتبها الوكيل.
- إذا كانت الكتل التفاعلية المولدة ستتجاوز حدود Slack Block Kit، فسيعود OpenClaw إلى الرد النصي الأصلي بدلًا من إرسال حمولة blocks غير صالحة.
موافقات exec في Slack
يمكن أن يعمل Slack كعميل موافقة أصلي مع أزرار وتفاعلات تفاعلية، بدلًا من الرجوع إلى Web UI أو الطرفية.- تستخدم موافقات 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 لفرض تشغيل الموافقات الأصلية عند حل الموافقين.
السلوك الافتراضي من دون إعداد صريح لموافقات exec في Slack:
approvals.exec المشتركة منفصلة. استخدمها فقط عندما يجب أن تُوجَّه مطالبات موافقة exec أيضًا
إلى دردشات أخرى أو أهداف صريحة خارج النطاق. كما أن إعادة توجيه approvals.plugin المشتركة منفصلة أيضًا؛
ولا تزال أزرار Slack الأصلية قادرة على حل موافقات plugin عندما تصل هذه الطلبات بالفعل
إلى Slack.
كما يعمل /approve في الدردشة نفسها داخل قنوات Slack والرسائل المباشرة التي تدعم الأوامر بالفعل. راجع موافقات Exec للحصول على نموذج إعادة توجيه الموافقات الكامل.
الأحداث والسلوك التشغيلي
- تُربط تعديلات الرسائل/حذفها/بث السلاسل بأحداث النظام.
- تُربط أحداث إضافة/إزالة التفاعلات بأحداث النظام.
- تُربط أحداث انضمام/مغادرة الأعضاء، وإنشاء/إعادة تسمية القنوات، وإضافة/إزالة التثبيتات بأحداث النظام.
- يمكن لـ
channel_id_changedترحيل مفاتيح إعداد القنوات عندما يكونconfigWritesمفعّلًا. - تُعامل بيانات topic/purpose الخاصة بالقناة كسياق غير موثوق ويمكن حقنها في سياق التوجيه.
- تُصفّى بادئات السلاسل وسياق تهيئة سجل السلسلة الأولي بحسب قوائم السماح المكونة للمرسلين عند الاقتضاء.
- تصدر إجراءات الكتل وتفاعلات النوافذ المنظمة أحداث نظام منظمة باسم
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,nativeStreaming - العمليات/الميزات:
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
- عناوين Slack Request URL (الأحداث + التفاعلية + أوامر Slash)
webhookPathفريد لكل حساب HTTP
signingSecretStatus: "configured_unavailable" في لقطات
الحساب، فهذا يعني أن حساب HTTP مُعدّ لكن وقت التشغيل الحالي لم يتمكن
من حل signing secret المدعوم بـ SecretRef.الأوامر الأصلية/slash لا تعمل
الأوامر الأصلية/slash لا تعمل
تحقّق مما إذا كنت تقصد:
- وضع الأوامر الأصلية (
channels.slack.commands.native: true) مع تسجيل أوامر slash المطابقة في Slack - أو وضع أمر slash واحد (
channels.slack.slashCommand.enabled: true)
commands.useAccessGroups وقوائم سماح القنوات/المستخدمين.