---
read_when:
    - تغییر مسیریابی کانال یا رفتار صندوق ورودی
summary: قواعد مسیریابی به‌ازای هر کانال (WhatsApp، Telegram، Discord، Slack) و زمینهٔ مشترک
title: مسیریابی کانال
x-i18n:
    generated_at: "2026-05-06T09:02:04Z"
    model: gpt-5.5
    provider: openai
    source_hash: 92b14cf02b00312121bec2f0f8ec784f36364babd6085d684e71f425dd82715e
    source_path: channels/channel-routing.md
    workflow: 16
---

# کانال‌ها و مسیریابی

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، پس از دروازه‌گذاری اشاره/فعال‌سازی).

پیکربندی:

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

ببینید: [گروه‌های پخش](/fa/channels/broadcast-groups).

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

- `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" },
  ],
}
```

## ذخیره‌سازی نشست

ذخیره‌گاه‌های نشست زیر دایرکتوری وضعیت قرار دارند (پیش‌فرض `~/.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` اضافه می‌شود.

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

## مرتبط

- [گروه‌ها](/fa/channels/groups)
- [گروه‌های پخش](/fa/channels/broadcast-groups)
- [جفت‌سازی](/fa/channels/pairing)
