---
read_when:
    - تغيير توجيه القناة أو سلوك صندوق الوارد
summary: قواعد التوجيه لكل قناة (WhatsApp وTelegram وDiscord وSlack) والسياق المشترك
title: توجيه القناة
x-i18n:
    generated_at: "2026-04-23T07:18:26Z"
    model: gpt-5.4
    provider: openai
    source_hash: ad1101d9d3411d9e9f48efd14c0dab09d76e83a6bd93c713d38efc01a14c8391
    source_path: channels/channel-routing.md
    workflow: 15
---

# القنوات والتوجيه

يوجّه OpenClaw الردود **مرة أخرى إلى القناة التي جاءت منها الرسالة**. لا يختار
النموذج قناة؛ فالتوجيه حتمي وتتحكم فيه تهيئة المضيف.

## المصطلحات الأساسية

- **القناة**: `telegram`، `whatsapp`، `discord`، `irc`، `googlechat`، `slack`، `signal`، `imessage`، `line`، بالإضافة إلى قنوات Plugin. تمثل `webchat` قناة واجهة WebChat الداخلية وليست قناة صادرة قابلة للتهيئة.
- **AccountId**: مثيل حساب لكل قناة (عند الدعم).
- الحساب الافتراضي الاختياري للقناة: يحدد `channels.<channel>.defaultAccount`
  أي حساب يُستخدم عندما لا يحدد المسار الصادر `accountId`.
  - في إعدادات الحسابات المتعددة، اضبط قيمة افتراضية صريحة (`defaultAccount` أو `accounts.default`) عند تهيئة حسابين أو أكثر. من دون ذلك، قد يختار التوجيه الاحتياطي أول معرّف حساب مُطبّع.
- **AgentId**: مساحة عمل معزولة + مخزن جلسات ("العقل").
- **SessionKey**: مفتاح الحاوية المستخدم لتخزين السياق والتحكم في التزامن.

## أشكال مفاتيح الجلسات (أمثلة)

تُدمج الرسائل المباشرة في جلسة **main** الخاصة بالوكيل افتراضيًا:

- `agent:<agentId>:<mainKey>` (الافتراضي: `agent:main:main`)

حتى عندما يكون محفوظ محادثة الرسائل المباشرة مشتركًا مع main، تستخدم سياسات
العزل وأدوات التنفيذ مفتاح تشغيل مشتقًا لكل حساب ومحادثة مباشرة للرسائل
المباشرة الخارجية، بحيث لا تُعامل الرسائل الواردة من القنوات مثل تشغيلات
الجلسة الرئيسية المحلية.

تظل المجموعات والقنوات معزولة لكل قناة:

- المجموعات: `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` لجلسة main.

## قواعد التوجيه (كيفية اختيار الوكيل)

يختار التوجيه **وكيلًا واحدًا** لكل رسالة واردة:

1. **مطابقة نظير تامة** (`bindings` مع `peer.kind` و `peer.id`).
2. **مطابقة النظير الأصل** (وراثة سلسلة الرسائل).
3. **مطابقة الخادم + الأدوار** (Discord) عبر `guildId` و `roles`.
4. **مطابقة الخادم** (Discord) عبر `guildId`.
5. **مطابقة الفريق** (Slack) عبر `teamId`.
6. **مطابقة الحساب** (`accountId` على القناة).
7. **مطابقة القناة** (أي حساب على تلك القناة، `accountId: "*"`).
8. **الوكيل الافتراضي** (`agents.list[].default`، وإلا أول إدخال في القائمة، مع الرجوع إلى `main`).

عندما يتضمن الربط عدة حقول مطابقة (`peer`، `guildId`، `teamId`، `roles`)، **يجب أن تتطابق جميع الحقول المقدمة** حتى يُطبّق ذلك الربط.

يحدد الوكيل المطابق مساحة العمل ومخزن الجلسات المستخدمين.

## مجموعات البث (تشغيل عدة وكلاء)

تتيح لك مجموعات البث تشغيل **عدة وكلاء** للنظير نفسه **عندما يرد OpenClaw عادةً** (على سبيل المثال: في مجموعات WhatsApp، بعد بوابة الذكر/التفعيل).

التهيئة:

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

راجع: [مجموعات البث](/ar/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` عاديًا. يتم تجاهل الروابط الرمزية والمسارات الخارجة عن الجذر.

## سلوك WebChat

يرتبط WebChat بـ **الوكيل المحدد** ويستخدم افتراضيًا جلسة main الخاصة بالوكيل.
وبسبب ذلك، يتيح لك WebChat رؤية السياق المشترك بين القنوات لذلك الوكيل في مكان واحد.

## سياق الرد

تتضمن الردود الواردة:

- `ReplyToId` و `ReplyToBody` و `ReplyToSender` عند التوفر.
- يُلحق السياق المقتبس إلى `Body` ككتلة `[Replying to ...]`.

وهذا متسق عبر جميع القنوات.
