التكوين

توجيه القنوات

يقوم OpenClaw بتوجيه الردود إلى القناة التي أتت منها الرسالة. النموذج لا يختار قناة؛ التوجيه حتمي ويتم التحكم به من خلال تكوين المضيف.

مصطلحات رئيسية

  • القناة: whatsapp, telegram, discord, slack, signal, imessage, webchat.
  • معرف الحساب: مثيل حساب لكل قناة (عندما يكون مدعوماً).
  • الحساب الافتراضي الاختياري للقناة: channels.<channel>.defaultAccount يختار الحساب المستخدم عندما لا يحدد مسار الصادر accountId.
    • في إعدادات الحسابات المتعددة، قم بتعيين افتراضي صريح (defaultAccount أو accounts.default) عند تكوين حسابين أو أكثر. بدونه، قد يختار التوجيه الاحتياطي أول معرف حساب معياري.
  • معرف الوكيل: مساحة عمل معزولة + مخزن الجلسات ("الدماغ").
  • مفتاح الجلسة: مفتاح المجموعة المستخدم لتخزين السياق والتحكم في التزامن.

أشكال مفاتيح الجلسة (أمثلة)

الرسائل المباشرة تنهار إلى الجلسة الرئيسية للوكيل:

  • agent:<agentId>:<mainKey> (الافتراضي: agent:main:main)

المجموعات والقنوات تبقى معزولة لكل قناة:

  • المجموعات: agent:<agentId>:<channel>:group:<id>
  • القنوات/الغرف: agent:<agentId>:<channel>:channel:<id>

المواضيع:

  • مواضيع Slack/Discord تضيف :thread:<threadId> إلى المفتاح الأساسي.
  • مواضيع منتدى Telegram تضمن :topic:<topicId> في مفتاح المجموعة.

أمثلة:

  • agent:main:telegram:group:-1001234567890:topic:42
  • agent:main:discord:channel:123456:thread:987654

تثبيت مسار الرسائل المباشرة الرئيسي

عندما يكون session.dmScope هو main، قد تشارك الرسائل المباشرة جلسة رئيسية واحدة. لمنع الكتابة فوق lastRoute للجلسة بواسطة رسائل مباشرة من غير المالك، يستنتج OpenClaw مالكاً مثبتاً من allowFrom عندما تكون جميع هذه الشروط صحيحة:

  • يحتوي allowFrom على مدخل واحد بالضبط غير حرف البدل.
  • يمكن تحويل المدخل إلى معرف مرسل ملموس لتلك القناة.
  • مرسل الرسالة المباشرة الواردة لا يتطابق مع ذلك المالك المثبت.

في حالة عدم التطابق هذه، لا يزال OpenClaw يسجل بيانات وصفية للجلسة الواردة، ولكنه يتخطى تحديث lastRoute للجلسة الرئيسية.

قواعد التوجيه (كيف يتم اختيار الوكيل)

يختار التوجيه وكيلاً واحداً لكل رسالة واردة:

  1. تطابق نظير تام (bindings مع peer.kind + peer.id).
  2. تطابق نظير أصل (وراثة الموضوع).
  3. تطابق النقابة + الأدوار (Discord) عبر guildId + roles.
  4. تطابق النقابة (Discord) عبر guildId.
  5. تطابق الفريق (Slack) عبر teamId.
  6. تطابق الحساب (accountId على القناة).
  7. تطابق القناة (أي حساب على تلك القناة، accountId: "*").
  8. الوكيل الافتراضي (agents.list[].default، وإلا أول مدخل في القائمة، احتياطي إلى main).

عندما يتضمن الربط حقول مطابقة متعددة (peer, guildId, teamId, rolesيجب أن تتطابق جميع الحقول المقدمة لكي ينطبق ذلك الربط. الوكيل المطابق يحدد مساحة العمل ومخزن الجلسات المستخدم.

مجموعات البث (تشغيل وكلاء متعددين)

تتيح لك مجموعات البث تشغيل وكلاء متعددين لنفس النظير عندما يقوم OpenClaw بالرد عادةً (على سبيل المثال: في مجموعات واتساب، بعد بوابات التنبيه/التفعيل). التكوين:

{
  broadcast: {
    strategy: "parallel",
    "120363403215116621@g.us": ["alfred", "baerbel"],
    "+15555550123": ["support", "logger"],
  },
}

انظر: مجموعات البث.

نظرة عامة على التكوين

  • agents.list: تعريفات وكلاء مسماة (مساحة العمل، النموذج، إلخ.).
  • bindings: ربط القنوات/الحسابات/النظراء الواردة بالوكلاء.

مثال:

{
  agents: {
    list: [{ id: "support", name: "Support", workspace: "~/.openclaw/workspace-support" }],
  },
  bindings: [
    { match: { channel: "slack", teamId: "T123" }, agentId: "support" },
    { match: { channel: "telegram", peer: { kind: "group", id: "-100123" } }, agentId: "support" },
  ],
}

تخزين الجلسات

تعيش مخازن الجلسات تحت دليل الحالة (الافتراضي ~/.openclaw):

  • ~/.openclaw/agents/<agentId>/sessions/sessions.json
  • نصوص JSONL تعيش بجانب المخزن

يمكنك تجاوز مسار المخزن عبر session.store والقالب {agentId}.

سلوك WebChat

يرتبط WebChat بالوكيل المحدد ويستخدم افتراضياً الجلسة الرئيسية للوكيل. بسبب هذا، يتيح لك WebChat رؤية السياق عبر القنوات لذلك الوكيل في مكان واحد.

سياق الرد

تتضمن الردود الواردة:

  • ReplyToId, ReplyToBody, و ReplyToSender عندما تكون متوفرة.
  • يتم إلحاق السياق المقتبس بـ Body ككتلة [Replying to ...].

هذا متسق عبر جميع القنوات.

مجموعات البثتحليل موقع القناة