Slack
الحالة: جاهز للإنتاج للرسائل المباشرة + القنوات عبر تكاملات تطبيق Slack. الوضع الافتراضي هو Socket Mode؛ كما يتم دعم وضع HTTP Events API.
الاقتران
الرسائل المباشرة في Slack تتبع وضع الاقتران افتراضيًا.
أوامر الشرطة المائلة
سلوك الأمر الأصلي وفهرس الأوامر.
استكشاف أخطاء القنوات
تشخيصات عبر القنوات وسيناريوهات الإصلاح.
الإعداد السريع
{
channels: {
slack: {
enabled: true,
mode: "socket",
appToken: "xapp-...",
botToken: "xoxb-...",
},
},
}نموذج الرموز المميزة
botToken+appTokenمطلوبان لوضع Socket Mode.- وضع HTTP يتطلب
botToken+signingSecret. - رموز التكوين تتجاوز الرجوع إلى متغيرات البيئة.
- الرجوع إلى متغير البيئة
SLACK_BOT_TOKEN/SLACK_APP_TOKENينطبق فقط على الحساب الافتراضي. userToken(xoxp-...) خاص بالتكوين فقط (لا رجوع إلى متغير البيئة) ويفترض سلوك القراءة فقط افتراضيًا (userTokenReadOnly: true).- اختياري: أضف
chat:write.customizeإذا كنت تريد أن تستخدم الرسائل الصادرة هوية الوكيل النشط (usernameمخصص وأيقونة). يستخدمicon_emojiبناء الجملة:emoji_name:.
💡 للإجراءات/قراءات الدليل، يمكن تفضيل رمز المستخدم عند تكوينه. للكتابة، يبقى رمز البوت مفضلًا؛ كتابات رمز المستخدم مسموح بها فقط عندما يكون
userTokenReadOnly: falseورمز البوت غير متوفر.
التحكم في الوصول والتوجيه
يتحكم 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>.
الأوامر وسلوك الشرطة المائلة
- الوضع التلقائي للأمر الأصلي معطل لـ Slack (
commands.native: "auto"لا يُفعّل أوامر Slack الأصلية). - فعّل معالجات أوامر Slack الأصلية باستخدام
channels.slack.commands.native: true(أوcommands.native: trueعام). - عند تمكين الأوامر الأصلية، سجل أوامر الشرطة المائلة المطابقة في Slack (
/<command>أسماء)، باستثناء واحد:- سجل
/agentstatusلأمر الحالة (Slack يحتفظ بـ/status)
- سجل
- إذا لم تكن الأوامر الأصلية مفعلة، يمكنك تشغيل أمر شرطة مائلة واحد مُكون عبر
channels.slack.slashCommand. - قوائم وسيطات الأمر الأصلي الآن تتكيف مع استراتيجية العرض:
- حتى 5 خيارات: كتل أزرار
- 6-100 خيار: قائمة اختيار ثابتة
- أكثر من 100 خيار: اختيار خارجي مع تصفية خيارات غير متزامنة عندما تكون معالجات خيارات التفاعل متاحة
- إذا تجاوزت قيم الخيارات المشفرة حدود Slack، يتراجع التدفق إلى الأزرار
- للحِمل الطويل للخيارات، تستخدم قوائم وسيطات أمر الشرطة المائلة مربع حوار تأكيد قبل إرسال القيمة المحددة.
إعدادات أمر الشرطة المائلة الافتراضية:
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
جلسات الشرطة المائلة تستخدم مفاتيح معزولة:
agent:<agentId>:slack:slash:<userId>
ولا تزال توجه تنفيذ الأمر ضد جلسة المحادثة المستهدفة (CommandTargetSessionKey).
الخيوط، الجلسات، وعلامات الرد
- الرسائل المباشرة توجه كـ
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 مرئية في تدفق المحادثة الرئيسي.
الوسائط، التقسيم، والتسليم
الإجراءات والبوابات
يتم التحكم في إجراءات Slack بواسطة channels.slack.actions.*. مجموعات الإجراءات المتاحة في أدوات Slack الحالية:
| المجموعة | الافتراضي |
|---|---|
| messages | مفعل |
| reactions | مفعل |
| pins | مفعل |
| memberInfo | مفعل |
| emojiList | مفعل |
الأحداث والسلوك التشغيلي
- تحرير/حذف الرسائل وبث الخيوط يتم تعيينها في أحداث النظام.
- أحداث إضافة/إزالة التفاعل يتم تعيينها في أحداث النظام.
- أحداث انضمام/مغادرة الأعضاء، وإنشاء/إعادة تسمية القناة، وإضافة/إزالة التثبيت يتم تعيينها في أحداث النظام.
- تحديثات حالة خيط المساعد (لمؤشرات "يكتب..." في الخيوط) تستخدم
assistant.threads.setStatusوتتطلب نطاق البوتassistant:write. - يمكن لـ
channel_id_changedنقل مفاتيح تكوين القناة عندما يكونconfigWritesمفعلًا. - يتم التعامل مع بيانات وصفية لموضوع/غرض القناة كسياق غير موثوق ويمكن حقنها في سياق التوجيه.
- إجراءات الكتل وتفاعلات النماذج تنبعث أحداث نظام منظمة
Slack interaction: ...بحقول حمولة غنية:- إجراءات الكتل: القيم المحددة، التسميات، قيم منتقي القيم، وبيانات وصفية
workflow_* - أحداث
view_submissionوview_closedللنماذج مع بيانات وصفية قناة موجهة ومدخلات النموذج
- إجراءات الكتل: القيم المحددة، التسميات، قيم منتقي القيم، وبيانات وصفية
تفاعلات التأكيد
ackReaction يرسل رمز تعبيري تأكيد بينما يعالج OpenClaw رسالة واردة. ترتيب الحل:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- الرجوع إلى رمز تعبيري هوية الوكيل (
agents.list[].identity.emoji، وإلا ”👀“)
ملاحظات:
- يتوقع Slack رموز قصيرة (على سبيل المثال
"eyes"). - استخدم
""لتعطيل التفاعل لحساب Slack أو عالميًا.
الرجوع إلى تفاعل الكتابة
typingReaction يضيف تفاعلًا مؤقتًا إلى رسالة Slack الواردة بينما يعالج OpenClaw ردًا، ثم يزيله عند انتهاء التشغيل. هذا رجوع مفيد عندما يكون الكتابة الأصلية للمساعد في Slack غير متاحة، خاصة في الرسائل المباشرة. ترتيب الحل:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
ملاحظات:
- يتوقع Slack رموز قصيرة (على سبيل المثال
"hourglass_flowing_sand"). - التفاعل هو أفضل جهد ويتم محاولة التنظيف تلقائيًا بعد اكتمال مسار الرد أو الفشل.
البيان وقائمة التحقق للنطاقات
استكشاف الأخطاء وإصلاحها
بث النص
يدعم OpenClaw بث النص الأصلي لـ Slack عبر واجهة برمجة تطبيقات الوكيلين والتطبيقات الذكية. يتحكم channels.slack.streaming في سلوك المعاينة المباشرة:
off: تعطيل بث المعاينة المباشرة.partial(افتراضي): استبدال نص المعاينة بأحدث الإخراج الجزئي.block: إلحاق تحديثات المعاينة المجزأة.progress: عرض نص حالة التقدم أثناء التوليد، ثم إرسال النص النهائي.
يتحكم channels.slack.nativeStreaming في واجهة برمجة تطبيقات البث الأصلية لـ Slack (chat.startStream / chat.appendStream / chat.stopStream) عندما يكون streaming هو partial (افتراضي: true). عطّل بث Slack الأصلي (احتفظ بسلوب مسودة المعاينة):
channels:
slack:
streaming: partial
nativeStreaming: false
مفاتيح قديمة:
channels.slack.streamMode(replace | status_final | append) يتم ترحيله تلقائيًا إلىchannels.slack.streaming.- القيمة المنطقية
channels.slack.streamingيتم ترحيلها تلقائيًا إلىchannels.slack.nativeStreaming.
المتطلبات
- فعّل الوكلاء والتطبيقات الذكية في إعدادات تطبيق Slack الخاص بك.
- تأكد من أن التطبيق لديه نطاق
assistant:write. - يجب أن يكون خيط رد متاحًا لتلك الرسالة. اختيار الخيط لا يزال يتبع
replyToMode.
السلوك
- تبدأ أول قطعة نصية بثًا (
chat.startStream). - تقوم القطع النصية اللاحقة بإلحاق نفس البث (
chat.appendStream). - نهاية الرد ينهي البث (
chat.stopStream). - الوسائط وحِمل غير النص تتراجع إلى التسليم العادي.
- إذا فشل البث أثناء الرد، يتراجع OpenClaw إلى التسليم العادي للحمولات المتبقية.
مؤشرات مرجع التكوين
المرجع الأساسي:
- مرجع التكوين - 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
- الوضع/المصادقة: