Configuration
توجيه القنوات
القنوات والتوجيه
يوجّه OpenClaw الردود إلى القناة نفسها التي جاءت منها الرسالة. لا يختار النموذج قناة؛ فالتوجيه حتمي وتتحكم فيه إعدادات المضيف.
المصطلحات الأساسية
- القناة:
telegram,whatsapp,discord,irc,googlechat,slack,signal,imessage,line، بالإضافة إلى قنوات Plugin.webchatهي قناة واجهة WebChat الداخلية وليست قناة صادرة قابلة للإعداد. - AccountId: نسخة حساب لكل قناة (عند الدعم).
- حساب القناة الافتراضي الاختياري: يختار
channels.<channel>.defaultAccountالحساب المستخدم عندما لا يحدد مسار صادرaccountId.- في إعدادات الحسابات المتعددة، عيّن افتراضيًا صريحًا (
defaultAccountأوaccounts.default) عندما يكون حسابان أو أكثر مهيأين. بدونه، قد يختار التوجيه الاحتياطي أول معرّف حساب مُطبّع.
- في إعدادات الحسابات المتعددة، عيّن افتراضيًا صريحًا (
- AgentId: مساحة عمل معزولة + مخزن جلسات ("عقل").
- SessionKey: مفتاح الحاوية المستخدم لتخزين السياق والتحكم في التزامن.
بادئات الهدف الصادر
قد تتضمن الأهداف الصادرة الصريحة بادئة موفّر، مثل telegram:123 أو tg:123. يتعامل Core مع تلك البادئة كتلميح لاختيار القناة فقط عندما تكون القناة المحددة هي last أو غير محسومة بطريقة أخرى، وفقط عندما يعلن Plugin المحمّل عن تلك البادئة. إذا كان المستدعي قد اختار قناة صريحة بالفعل، فيجب أن تطابق بادئة الموفّر تلك القناة؛ تفشل التركيبات العابرة للقنوات مثل تسليم WhatsApp إلى telegram:123 قبل التطبيع الخاص بهدف Plugin.
تبقى بادئات نوع الهدف والخدمة مثل channel:<id> وuser:<id> وroom:<id> وthread:<id> وimessage:<handle> وsms:<number> داخل قواعد القناة المحددة. وهي لا تحدد الموفّر بمفردها.
أشكال مفاتيح الجلسات (أمثلة)
تُدمج الرسائل المباشرة في جلسة main الخاصة بالوكيل افتراضيًا:
agent:<agentId>:<mainKey>(الافتراضي:agent:main: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:42agent:main:discord:channel:123456:thread:987654
تثبيت مسار الرسائل المباشرة الرئيسية
عندما يكون session.dmScope هو main، قد تشارك الرسائل المباشرة جلسة رئيسية واحدة.
لمنع الكتابة فوق lastRoute الخاص بالجلسة بواسطة رسائل مباشرة من غير المالك،
يستنتج OpenClaw مالكًا مثبّتًا من allowFrom عندما تكون كل هذه الشروط صحيحة:
- يحتوي
allowFromعلى إدخال واحد فقط غير شامل. - يمكن تطبيع الإدخال إلى معرّف مرسل ملموس لتلك القناة.
- لا يطابق مرسل الرسالة المباشرة الواردة ذلك المالك المثبّت.
في حالة عدم التطابق تلك، يظل OpenClaw يسجل بيانات تعريف الجلسة الواردة، لكنه
يتخطى تحديث lastRoute لجلسة main.
التسجيل الوارد المحمي
يمكن لـ Plugins القنوات وسم سجل جلسة وارد بأنه createIfMissing: false
عندما يجب ألا ينشئ المسار المحمي جلسة OpenClaw جديدة. في ذلك الوضع،
قد يحدّث OpenClaw بيانات التعريف وlastRoute لجلسة موجودة، لكنه
لا ينشئ إدخال جلسة للمسار فقط لمجرد ملاحظة رسالة.
قواعد التوجيه (كيف يتم اختيار وكيل)
يختار التوجيه وكيلًا واحدًا لكل رسالة واردة:
- تطابق النظير الدقيق (
bindingsمعpeer.kind+peer.id). - تطابق النظير الأصل (وراثة الموضوع).
- تطابق الخادم + الأدوار (Discord) عبر
guildId+roles. - تطابق الخادم (Discord) عبر
guildId. - تطابق الفريق (Slack) عبر
teamId. - تطابق الحساب (
accountIdعلى القناة). - تطابق القناة (أي حساب على تلك القناة،
accountId: "*"). - الوكيل الافتراضي (
agents.list[].default، وإلا أول إدخال في القائمة، مع الرجوع إلىmain).
عندما يتضمن ربط واحد عدة حقول مطابقة (peer, guildId, teamId, roles)، يجب أن تطابق كل الحقول المقدمة حتى ينطبق ذلك الربط.
يحدد الوكيل المطابق مساحة العمل ومخزن الجلسات المستخدمين.
مجموعات البث (تشغيل عدة وكلاء)
تتيح لك مجموعات البث تشغيل عدة وكلاء للنظير نفسه عندما يرد OpenClaw عادةً (على سبيل المثال: في مجموعات WhatsApp، بعد بوابة الذكر/التفعيل).
الإعداد:
{
broadcast: {
strategy: "parallel",
"[email protected]": ["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 بـ الوكيل المحدد ويستخدم افتراضيًا جلسة main الخاصة بالوكيل. وبسبب ذلك، يتيح لك WebChat رؤية السياق العابر للقنوات لذلك الوكيل في مكان واحد.
سياق الرد
تتضمن الردود الواردة:
ReplyToIdوReplyToBodyوReplyToSenderعند توفرها.- يُضاف السياق المقتبس إلى
Bodyككتلة[Replying to ...].
وهذا متسق عبر القنوات.