---
read_when:
    - تغيير توجيه القنوات أو سلوك صندوق الوارد
summary: قواعد التوجيه لكل قناة (WhatsApp، Telegram، Discord، Slack) والسياق المشترك
title: توجيه القنوات
x-i18n:
    generated_at: "2026-05-06T07:42:24Z"
    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`. يتعامل Core مع تلك البادئة كتلميح لاختيار القناة فقط عندما تكون القناة المحددة هي `last` أو غير محسومة بطريقة أخرى، وفقط عندما يعلن Plugin المحمّل عن تلك البادئة. إذا كان المستدعي قد اختار قناة صريحة بالفعل، فيجب أن تطابق بادئة الموفّر تلك القناة؛ تفشل التركيبات العابرة للقنوات مثل تسليم WhatsApp إلى `telegram:123` قبل التطبيع الخاص بهدف Plugin.

تبقى بادئات نوع الهدف والخدمة مثل `channel:<id>` و`user:<id>` و`room:<id>` و`thread:<id>` و`imessage:<handle>` و`sms:<number>` داخل قواعد القناة المحددة. وهي لا تحدد الموفّر بمفردها.

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

تُدمج الرسائل المباشرة في جلسة **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.

## التسجيل الوارد المحمي

يمكن لـ Plugins القنوات وسم سجل جلسة وارد بأنه `createIfMissing: false`
عندما يجب ألا ينشئ المسار المحمي جلسة OpenClaw جديدة. في ذلك الوضع،
قد يحدّث OpenClaw بيانات التعريف و`lastRoute` لجلسة موجودة، لكنه
لا ينشئ إدخال جلسة للمسار فقط لمجرد ملاحظة رسالة.

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

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

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 ...]`.

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

## ذو صلة

- [المجموعات](/ar/channels/groups)
- [مجموعات البث](/ar/channels/broadcast-groups)
- [الاقتران](/ar/channels/pairing)
