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. هسته فقط زمانی آن پیشوند را به‌عنوان راهنمای انتخاب کانال در نظر می‌گیرد که کانال انتخاب‌شده last باشد یا به‌شکل دیگری حل نشده باشد، و فقط وقتی Plugin بارگذاری‌شده آن پیشوند را اعلام کرده باشد. اگر فراخواننده از قبل یک کانال صریح انتخاب کرده باشد، پیشوند ارائه‌دهنده باید با همان کانال مطابقت داشته باشد؛ ترکیب‌های بین‌کانالی مانند تحویل WhatsApp به telegram:123 پیش از نرمال‌سازی مقصد مخصوص Plugin شکست می‌خورند.

پیشوندهای نوع مقصد و سرویس مانند channel:<id>، user:<id>، room:<id>، thread:<id>، imessage:<handle>، و sms:<number> داخل دستور زبان کانال انتخاب‌شده باقی می‌مانند. آن‌ها به‌تنهایی ارائه‌دهنده را انتخاب نمی‌کنند.

شکل‌های کلید نشست (نمونه‌ها)

پیام‌های مستقیم به‌صورت پیش‌فرض در نشست اصلی عامل ادغام می‌شوند:

  • agent:<agentId>:<mainKey> (پیش‌فرض: agent:main:main)

حتی وقتی تاریخچه گفت‌وگوی پیام مستقیم با نشست اصلی مشترک است، sandbox و سیاست ابزار برای DMهای خارجی از یک کلید زمان اجرای گفت‌وگوی مستقیم مشتق‌شده برای هر حساب استفاده می‌کنند تا پیام‌های منشأگرفته از کانال مانند اجراهای محلی نشست اصلی تلقی نشوند.

گروه‌ها و کانال‌ها برای هر کانال ایزوله باقی می‌مانند:

  • گروه‌ها: 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

سنجاق‌کردن مسیر DM اصلی

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

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

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

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

Pluginهای کانال می‌توانند یک رکورد نشست ورودی را با createIfMissing: false علامت‌گذاری کنند، وقتی یک مسیر محافظت‌شده نباید نشست جدید OpenClaw ایجاد کند. در این حالت، OpenClaw ممکن است فراداده و lastRoute را برای یک نشست موجود به‌روزرسانی کند، اما صرفاً به‌دلیل مشاهده یک پیام، ورودی نشست فقط-مسیر ایجاد نمی‌کند.

قواعد مسیریابی (عامل چگونه انتخاب می‌شود)

مسیریابی برای هر پیام ورودی یک عامل انتخاب می‌کند:

  1. تطابق دقیق همتا (bindings با peer.kind + peer.id).
  2. تطابق همتای والد (ارث‌بری رشته).
  3. تطابق Guild + نقش‌ها (Discord) از طریق guildId + roles.
  4. تطابق Guild (Discord) از طریق guildId.
  5. تطابق تیم (Slack) از طریق teamId.
  6. تطابق حساب (accountId روی کانال).
  7. تطابق کانال (هر حساب روی آن کانال، accountId: "*").
  8. عامل پیش‌فرض (agents.list[].default، وگرنه نخستین ورودی فهرست، با جایگزین main).

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

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

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

گروه‌های پخش به شما اجازه می‌دهند چند عامل را برای یک همتا اجرا کنید وقتی 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 استفاده کنند. Symlinkها و مسیرهای خارج از ریشه نادیده گرفته می‌شوند.

رفتار WebChat

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

زمینه پاسخ

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

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

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

مرتبط