الانتقال إلى المحتوى الرئيسي

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

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

المصطلحات الأساسية

  • القناة: telegram وwhatsapp وdiscord وirc وgooglechat وslack وsignal وimessage وline، بالإضافة إلى قنوات الإضافات. webchat هي قناة واجهة WebChat الداخلية وليست قناة صادرة قابلة للإعداد.
  • AccountId: مثيل حساب لكل قناة (عند الدعم).
  • الحساب الافتراضي الاختياري للقناة: يحدد channels.<channel>.defaultAccount الحساب المستخدم عندما لا يحدد مسار صادر قيمة accountId.
    • في إعدادات الحسابات المتعددة، عيّن قيمة افتراضية صريحة (defaultAccount أو accounts.default) عند إعداد حسابين أو أكثر. وبدون ذلك، قد يختار التوجيه الاحتياطي أول معرّف حساب مُطبّع.
  • AgentId: مساحة عمل + مخزن جلسات معزولان (“العقل”).
  • SessionKey: مفتاح الحاوية المستخدم لتخزين السياق والتحكم في التزامن.

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

تُطوى الرسائل المباشرة إلى جلسة الرئيسية الخاصة بالوكيل:
  • 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 سيرد عادةً (على سبيل المثال: في مجموعات WhatsApp، بعد ذكر الاسم/بوابة التفعيل). الإعداد:
{
  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}. يفحص اكتشاف جلسات Gateway وACP أيضًا مخازن الوكلاء المعتمدة على القرص ضمن الجذر الافتراضي agents/ وضمن جذور session.store ذات القوالب. ويجب أن تبقى المخازن المكتشفة داخل جذر الوكيل المحلول هذا وأن تستخدم ملف sessions.json عاديًا. يتم تجاهل الروابط الرمزية والمسارات الخارجة عن الجذر.

سلوك WebChat

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

سياق الرد

تتضمن الردود الواردة ما يلي:
  • ReplyToId وReplyToBody وReplyToSender عند توفرها.
  • يُلحَق السياق المقتبس بـ Body ككتلة [Replying to ...].
وهذا متسق عبر القنوات.