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:42
  • agent:main:discord:channel:123456:thread:987654

تثبیت مسیر پیام خصوصی اصلی

هنگامی که session.dmScope برابر با main است، پیام‌های مستقیم ممکن است یک نشست اصلی مشترک داشته باشند. برای جلوگیری از بازنویسی lastRoute نشست توسط پیام‌های خصوصی افراد غیرمالک، OpenClaw زمانی مالک تثبیت‌شده را از allowFrom استنباط می‌کند که همه شرایط زیر برقرار باشند:

  • allowFrom دقیقاً یک ورودی غیرعام دارد.
  • ورودی را می‌توان برای آن کانال به یک شناسه فرستنده مشخص نرمال‌سازی کرد.
  • فرستنده پیام خصوصی ورودی با آن مالک تثبیت‌شده مطابقت ندارد.

در این حالت عدم تطابق، OpenClaw همچنان فراداده نشست ورودی را ثبت می‌کند، اما به‌روزرسانی lastRoute نشست اصلی را انجام نمی‌دهد.

ثبت محافظت‌شده ورودی

pluginهای کانال می‌توانند یک رکورد نشست ورودی را با 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.entries.*.default، در غیر این صورت نخستین ورودی فهرست، با بازگشت به main).

هنگامی که یک اتصال چند فیلد تطابق دارد (peer، guildId، teamId، roles)، برای اعمال آن اتصال همه فیلدهای ارائه‌شده باید مطابقت داشته باشند.

عامل مطابق‌شده تعیین می‌کند کدام فضای کاری و مخزن نشست استفاده شوند.

گروه‌های پخش همگانی (اجرای چند عامل)

گروه‌های پخش همگانی امکان اجرای چند عامل را برای یک همتای یکسان، هنگامی که OpenClaw در حالت عادی پاسخ می‌دهد، فراهم می‌کنند (برای نمونه: در گروه‌های WhatsApp، پس از عبور از محدودیت اشاره/فعال‌سازی).

پیکربندی:

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

ببینید: گروه‌های پخش همگانی.

نمای کلی پیکربندی

  • agents.entries: تعریف‌های نام‌گذاری‌شده عامل (فضای کاری، مدل و غیره).
  • 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 و توالی اعتبارسنجی Doctor استفاده کنید. همچنان می‌توان با استفاده از session.store و قالب‌بندی {agentId} یک مسیر مخزن قدیمی را برای گردش‌کارهای مهاجرت و نگه‌داری آفلاین انتخاب کرد.

کشف نشست Gateway و ACP همچنین مخزن‌های عامل مبتنی بر دیسک را در ریشه پیش‌فرض agents/ و ریشه‌های قالب‌بندی‌شده session.store اسکن می‌کند. مخزن‌های کشف‌شده باید درون ریشه عامل حل‌شده باقی بمانند و از یک فایل قدیمی عادی sessions.json استفاده کنند. پیوندهای نمادین و مسیرهای خارج از ریشه نادیده گرفته می‌شوند.

رفتار WebChat

WebChat به عامل انتخاب‌شده متصل می‌شود و به‌طور پیش‌فرض از نشست اصلی عامل استفاده می‌کند. به همین دلیل، WebChat امکان مشاهده زمینه میان‌کانالی آن عامل را در یک مکان فراهم می‌کند.

زمینه پاسخ

پاسخ‌های ورودی شامل موارد زیر هستند:

  • ReplyToId، ReplyToBody و ReplyToSender در صورت موجود بودن.
  • زمینه نقل‌قول‌شده به‌صورت یک بلوک [Replying to ...] به Body افزوده می‌شود.

این رفتار در همه کانال‌ها یکسان است.

مرتبط

Was this useful?
On this page

On this page