القنوات والتوجيه
يوجّه 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:42agent:main:discord:channel:123456:thread:987654
تثبيت مسار الرسائل المباشرة الرئيسية
عندما تكون قيمةsession.dmScope هي main، قد تشترك الرسائل المباشرة في جلسة رئيسية واحدة.
ولمنع الكتابة فوق lastRoute الخاص بالجلسة بواسطة الرسائل المباشرة من غير المالك،
يستنتج OpenClaw مالكًا مثبتًا من allowFrom عندما تتحقق جميع الشروط التالية:
- يحتوي
allowFromعلى إدخال واحد غير شامل تمامًا. - يمكن تطبيع هذا الإدخال إلى معرّف مرسل فعلي لتلك القناة.
- لا يتطابق مرسل الرسالة المباشرة الواردة مع ذلك المالك المثبت.
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، بعد ذكر الاسم/بوابة التفعيل). الإعداد:نظرة عامة على الإعداد
agents.list: تعريفات الوكلاء المسماة (مساحة العمل، النموذج، وما إلى ذلك).bindings: ربط القنوات/الحسابات/النظراء الواردة بالوكلاء.
تخزين الجلسات
توجد مخازن الجلسات ضمن دليل الحالة (الافتراضي~/.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 ...].