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

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

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

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

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

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

تُطوى الرسائل المباشرة إلى جلسة **الرئيسية** الخاصة بالوكيل:

- `agent:<agentId>:<mainKey>` (الافتراضي: `agent: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` للجلسة الرئيسية.

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

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

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

راجع: [مجموعات البث](/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 بـ **الوكيل المحدد** ويستخدم افتراضيًا الجلسة الرئيسية للوكيل.
ولهذا السبب، يتيح لك WebChat رؤية السياق المشترك بين القنوات لذلك
الوكيل في مكان واحد.

## سياق الرد

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

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

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