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 بازنویسی کند.
حتی هنگامی که تاریخچه مکالمه پیام مستقیم با نشست اصلی بهاشتراک گذاشته میشود، سیاست sandbox و ابزار برای پیامهای خصوصی خارجی از کلید زمان اجرای گفتوگوی مستقیم مشتقشده مختص هر حساب استفاده میکند تا پیامهای منشأگرفته از کانال مانند اجراهای محلی نشست اصلی در نظر گرفته نشوند.
گروهها و کانالها بهازای هر کانال مجزا باقی میمانند:
- گروهها:
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 نشست اصلی را انجام نمیدهد.
ثبت محافظتشده ورودی
pluginهای کانال میتوانند یک رکورد نشست ورودی را با createIfMissing: false
علامتگذاری کنند، هنگامی که یک مسیر محافظتشده نباید نشست جدید OpenClaw ایجاد کند. در این حالت،
OpenClaw ممکن است فراداده و lastRoute را برای یک نشست موجود بهروزرسانی کند، اما
صرفاً بهدلیل مشاهده یک پیام، ورودی نشستی مختص مسیر ایجاد نمیکند.
قواعد مسیریابی (نحوه انتخاب عامل)
مسیریابی برای هر پیام ورودی یک عامل انتخاب میکند:
- تطابق دقیق همتا (
bindingsباpeer.kind+peer.id). - تطابق همتای والد (وراثت رشته).
- تطابق عام همتا (
peer.id: "*"برای یک نوع همتا). - تطابق انجمن + نقشها (Discord) از طریق
guildId+roles. - تطابق انجمن (Discord) از طریق
guildId. - تطابق تیم (Slack) از طریق
teamId. - تطابق حساب (
accountIdدر کانال). - تطابق کانال (هر حسابی در آن کانال،
accountId: "*"). - عامل پیشفرض (
agents.entries.*.default، در غیر این صورت نخستین ورودی فهرست، با بازگشت بهmain).
هنگامی که یک اتصال چند فیلد تطابق دارد (peer، guildId، teamId، roles)، برای اعمال آن اتصال همه فیلدهای ارائهشده باید مطابقت داشته باشند.
عامل مطابقشده تعیین میکند کدام فضای کاری و مخزن نشست استفاده شوند.
گروههای پخش همگانی (اجرای چند عامل)
گروههای پخش همگانی امکان اجرای چند عامل را برای یک همتای یکسان، هنگامی که OpenClaw در حالت عادی پاسخ میدهد، فراهم میکنند (برای نمونه: در گروههای WhatsApp، پس از عبور از محدودیت اشاره/فعالسازی).
پیکربندی:
{ broadcast: { strategy: "parallel", "120363403215116621@g.us": ["alfred", "baerbel"], "+15555550123": ["support", "logger"], },}ببینید: گروههای پخش همگانی.
نمای کلی پیکربندی
agents.entries: تعریفهای نامگذاریشده عامل (فضای کاری، مدل و غیره).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" }, ],}ذخیرهسازی نشست
ردیفهای نشست زمان اجرا در پایگاه داده 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 و توالی اعتبارسنجی
Doctor استفاده کنید.
همچنان میتوان با استفاده از session.store و قالببندی {agentId}
یک مسیر مخزن قدیمی را برای گردشکارهای مهاجرت و نگهداری آفلاین انتخاب کرد.
کشف نشست Gateway و ACP همچنین مخزنهای عامل مبتنی بر دیسک را در ریشه پیشفرض
agents/ و ریشههای قالببندیشده session.store اسکن میکند. مخزنهای کشفشده
باید درون ریشه عامل حلشده باقی بمانند و از یک فایل قدیمی عادی
sessions.json استفاده کنند. پیوندهای نمادین و مسیرهای خارج از ریشه نادیده گرفته میشوند.
رفتار WebChat
WebChat به عامل انتخابشده متصل میشود و بهطور پیشفرض از نشست اصلی عامل استفاده میکند. به همین دلیل، WebChat امکان مشاهده زمینه میانکانالی آن عامل را در یک مکان فراهم میکند.
زمینه پاسخ
پاسخهای ورودی شامل موارد زیر هستند:
ReplyToId،ReplyToBodyوReplyToSenderدر صورت موجود بودن.- زمینه نقلقولشده بهصورت یک بلوک
[Replying to ...]بهBodyافزوده میشود.
این رفتار در همه کانالها یکسان است.