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 دامنه را برای همتایان منطبق خود بازنویسی کند.

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

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

  • گروه‌ها: 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.list[].default، در غیر این صورت نخستین ورودی فهرست، با بازگشت به main).

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

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

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

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

پیکربندی:

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

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

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

  • agents.list: تعریف‌های نام‌گذاری‌شده عامل (فضای کاری، مدل و غیره).
  • 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