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