منصات المراسلة

Slack

الحالة: جاهز للإنتاج للرسائل المباشرة + القنوات عبر تكاملات تطبيق Slack. الوضع الافتراضي هو Socket Mode؛ كما يتم دعم وضع HTTP Events API.

الإعداد السريع

{
  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 (افتراضي)
  • allowlist
  • open (يتطلب تضمين "*" في 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: false
  • name: "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>.ackReaction
  • channels.slack.ackReaction
  • messages.ackReaction
  • الرجوع إلى رمز تعبيري هوية الوكيل (agents.list[].identity.emoji، وإلا ”👀“)

ملاحظات:

  • يتوقع Slack رموز قصيرة (على سبيل المثال "eyes").
  • استخدم "" لتعطيل التفاعل لحساب Slack أو عالميًا.

الرجوع إلى تفاعل الكتابة

typingReaction يضيف تفاعلًا مؤقتًا إلى رسالة Slack الواردة بينما يعالج OpenClaw ردًا، ثم يزيله عند انتهاء التشغيل. هذا رجوع مفيد عندما يكون الكتابة الأصلية للمساعد في Slack غير متاحة، خاصة في الرسائل المباشرة. ترتيب الحل:

  • channels.slack.accounts.<accountId>.typingReaction
  • channels.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.

المتطلبات

  1. فعّل الوكلاء والتطبيقات الذكية في إعدادات تطبيق Slack الخاص بك.
  2. تأكد من أن التطبيق لديه نطاق assistant:write.
  3. يجب أن يكون خيط رد متاحًا لتلك الرسالة. اختيار الخيط لا يزال يتبع 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

ذات صلة

Synology ChatTelegram