Configuration

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

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

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

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

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

بادئات الوجهات الصادرة

قد تتضمن الوجهات الصادرة الصريحة بادئة موفّر، مثل telegram:123 أو tg:123. لا تتعامل النواة مع هذه البادئة كتلميح لاختيار القناة إلا عندما تكون القناة المحددة هي last أو لم تُحسم بطريقة أخرى، وفقط عندما يعلن Plugin المحمّل دعمه لتلك البادئة. إذا كان المستدعي قد اختار قناة صريحة بالفعل، فيجب أن تطابق بادئة الموفّر تلك القناة؛ وتفشل التركيبات العابرة للقنوات، مثل تسليم WhatsApp إلى telegram:123، قبل تطبيع الوجهة الخاص بـ Plugin.

تبقى بادئات نوع الوجهة والخدمة، مثل channel:<id> وuser:<id> وroom:<id> وthread:<id> وimessage:<handle> وsms:<number>، ضمن قواعد القناة المحددة. وهي لا تختار الموفّر بذاتها.

صيغ مفاتيح الجلسات (أمثلة)

تُدمج الرسائل المباشرة افتراضيًا في جلسة الوكيل الرئيسية:

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

تتحكم session.dmScope في دمج الرسائل المباشرة: تشارك main (الافتراضية) جلسة رئيسية واحدة، بينما تُبقي per-peer وper-channel-peer وper-account-channel-peer الرسائل المباشرة في جلسات منفصلة. ويمكن لربط توجيه تجاوز النطاق للنظراء المطابقين عبر bindings[].session.dmScope.

حتى عندما يكون سجل محادثات الرسائل المباشرة مشتركًا مع الجلسة الرئيسية، تستخدم سياسات وضع الحماية والأدوات مفتاح تشغيل مشتقًا للمحادثات المباشرة لكل حساب بالنسبة إلى الرسائل المباشرة الخارجية، بحيث لا تُعامل الرسائل الواردة من القنوات مثل عمليات تشغيل الجلسة الرئيسية المحلية.

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

  • المجموعات: 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 الخاصة بالجلسة الرئيسية.

تسجيل الرسائل الواردة المحمي

يمكن لـ Plugins القنوات وسم سجل جلسة واردة بأنه createIfMissing: false عندما يجب ألا ينشئ مسار محمي جلسة OpenClaw جديدة. في هذا الوضع، قد يحدّث OpenClaw البيانات الوصفية وlastRoute لجلسة موجودة، لكنه لا ينشئ مُدخل جلسة مخصصًا للمسار لمجرد رصد رسالة.

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

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

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

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

يحدد الوكيل المطابق مساحة العمل ومخزن الجلسات المستخدمين.

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

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

التهيئة:

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

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

نظرة عامة على التهيئة

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

مثال:

json5
{  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" },  ],}

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

توجد صفوف جلسات وقت التشغيل في قاعدة بيانات SQLite الخاصة بكل وكيل ضمن دليل الحالة (الافتراضي ~/.openclaw):

  • ~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite

قد تحتوي عمليات التثبيت الأقدم على ملفات JSONL قديمة لنصوص الجلسات ومخزن صفوف sessions.json ضمن ~/.openclaw/agents/<agentId>/sessions/. تستورد عملية بدء Gateway و openclaw doctor --fix الصفوف/السجلات القديمة النشطة إلى SQLite تلقائيًا. استخدم openclaw doctor --session-sqlite inspect --session-sqlite-all-agents وتسلسل التحقق الخاص بـ أداة التشخيص عندما تحتاج إلى دليل صريح على الترحيل. لا يزال بإمكانك تحديد مسار مخزن قديم عبر قالبَي session.store و{agentId} لسير عمل الترحيل والصيانة دون اتصال.

يفحص اكتشاف جلسات Gateway وACP أيضًا مخازن الوكلاء المدعومة بالقرص ضمن جذر agents/ الافتراضي وضمن جذور session.store المقولبة. يجب أن تبقى المخازن المكتشفة داخل جذر الوكيل المحسوم وأن تستخدم ملف sessions.json قديمًا عاديًا. تُتجاهل الروابط الرمزية والمسارات الواقعة خارج الجذر.

سلوك WebChat

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

سياق الرد

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

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

يكون ذلك متسقًا عبر القنوات.

ذو صلة

Was this useful?
On this page

On this page