---
read_when:
    - شرح كيفية عمل البث أو التجزئة في القنوات
    - تغيير سلوك بث الكتل أو تقسيم القنوات
    - تصحيح أخطاء ردود الحظر المكررة/المبكرة أو بث معاينة القناة
summary: سلوك البث والتقسيم إلى أجزاء (ردود الكتل، بث معاينة القناة، تعيين الأوضاع)
title: البث والتقسيم إلى أجزاء
x-i18n:
    generated_at: "2026-07-01T05:43:47Z"
    model: gpt-5.5
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: 2724c21414dd470780f0c7f634380bef3feeb54a08bd0da3e944173340df1c80
    source_path: concepts/streaming.md
    workflow: 16
---

يحتوي OpenClaw على طبقتي بث منفصلتين:

- **بث الكتل (القنوات):** يصدر **كتلًا** مكتملة أثناء كتابة المساعد. هذه رسائل قناة عادية (وليست فروق رموز).
- **بث المعاينة (Telegram/Discord/Slack):** يحدّث **رسالة معاينة** مؤقتة أثناء التوليد.

لا يوجد اليوم **بث حقيقي لفروق الرموز** إلى رسائل القنوات. بث المعاينة قائم على الرسائل (إرسال + تعديلات/إلحاقات).

## بث الكتل (رسائل القنوات)

يرسل بث الكتل مخرجات المساعد في أجزاء خشنة عند توفرها.

```
Model output
  └─ text_delta/events
       ├─ (blockStreamingBreak=text_end)
       │    └─ chunker emits blocks as buffer grows
       └─ (blockStreamingBreak=message_end)
            └─ chunker flushes at message_end
                   └─ channel send (block replies)
```

وسيلة الإيضاح:

- `text_delta/events`: أحداث بث النموذج (قد تكون متفرقة للنماذج غير الباثة).
- `chunker`: يطبق `EmbeddedBlockChunker` حدود الحد الأدنى/الأقصى + تفضيل الفاصل.
- `channel send`: الرسائل الصادرة الفعلية (ردود الكتل).

**عناصر التحكم:**

- `agents.defaults.blockStreamingDefault`: `"on"`/`"off"` (الافتراضي إيقاف).
- تجاوزات القنوات: `*.blockStreaming` (ومتغيرات كل حساب) لفرض `"on"`/`"off"` لكل قناة.
- `agents.defaults.blockStreamingBreak`: `"text_end"` أو `"message_end"`.
- `agents.defaults.blockStreamingChunk`: `{ minChars, maxChars, breakPreference? }`.
- `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (دمج الكتل المبثوثة قبل الإرسال).
- الحد الصارم للقناة: `*.textChunkLimit` (مثلًا، `channels.whatsapp.textChunkLimit`).
- وضع تقطيع القناة: `*.chunkMode` (`length` هو الافتراضي، و`newline` يقسم عند الأسطر الفارغة (حدود الفقرات) قبل التقطيع حسب الطول).
- الحد المرن في Discord: `channels.discord.maxLinesPerMessage` (الافتراضي 17) يقسم الردود الطويلة لتجنب اقتطاع واجهة المستخدم.

**دلالات الحدود:**

- `text_end`: بث الكتل بمجرد أن يصدرها المقطّع؛ التفريغ عند كل `text_end`.
- `message_end`: الانتظار حتى تنتهي رسالة المساعد، ثم تفريغ المخرجات المخزنة مؤقتًا.

لا يزال `message_end` يستخدم المقطّع إذا تجاوز النص المخزن مؤقتًا `maxChars`، لذلك يمكنه إصدار عدة أجزاء في النهاية.

### تسليم الوسائط مع بث الكتل

يجب أن تستخدم وسائط البث حقول حمولة منظمة مثل `mediaUrl` أو
`mediaUrls`؛ لا يُحلّل النص المبثوث كأمر مرفق. عندما يرسل بث الكتل
وسائط مبكرًا، يتذكر OpenClaw ذلك التسليم للدورة. إذا كررت حمولة المساعد
النهائية عنوان URL نفسه للوسائط، يزيل التسليم النهائي الوسائط المكررة بدلًا من إرسال المرفق مرة أخرى.

تُمنع الحمولات النهائية المتطابقة تمامًا. إذا أضافت الحمولة النهائية
نصًا مميزًا حول وسائط سبق بثها، لا يزال OpenClaw يرسل النص
الجديد مع إبقاء الوسائط بتسليم واحد. يمنع هذا تكرار الملاحظات الصوتية
أو الملفات على قنوات مثل Telegram.

## خوارزمية التقطيع (الحدود الدنيا/العليا)

ينفذ `EmbeddedBlockChunker` تقطيع الكتل:

- **الحد الأدنى:** لا تصدر حتى يكون المخزن المؤقت >= `minChars` (ما لم يُفرض ذلك).
- **الحد الأعلى:** تفضيل التقسيم قبل `maxChars`؛ وإذا كان مفروضًا، قسّم عند `maxChars`.
- **تفضيل الفاصل:** `paragraph` → `newline` → `sentence` → `whitespace` → فاصل صارم.
- **أسوار الكود:** لا تقسّم أبدًا داخل الأسوار؛ وعند الفرض عند `maxChars`، أغلق السور وأعد فتحه للحفاظ على صلاحية Markdown.

يُقيّد `maxChars` بحد `textChunkLimit` للقناة، لذلك لا يمكنك تجاوز حدود كل قناة.

## الدمج (دمج الكتل المبثوثة)

عند تمكين بث الكتل، يمكن لـ OpenClaw **دمج أجزاء الكتل المتتالية**
قبل إرسالها. يقلل هذا "الإزعاج أحادي السطر" مع الاستمرار في توفير
مخرجات تدريجية.

- ينتظر الدمج **فجوات الخمول** (`idleMs`) قبل التفريغ.
- تُقيّد المخازن المؤقتة بواسطة `maxChars` وستُفرّغ إذا تجاوزته.
- يمنع `minChars` إرسال الشظايا الصغيرة حتى يتراكم نص كافٍ
  (يرسل التفريغ النهائي دائمًا النص المتبقي).
- يُشتق رابط الدمج من `blockStreamingChunk.breakPreference`
  (`paragraph` → `\n\n`، و`newline` → `\n`، و`sentence` → مسافة).
- تتوفر تجاوزات القنوات عبر `*.blockStreamingCoalesce` (بما في ذلك إعدادات كل حساب).
- يرفع الحد الافتراضي للدمج `minChars` إلى 1500 في Signal/Slack/Discord ما لم يُتجاوز.

## إيقاع شبيه بالبشر بين الكتل

عند تمكين بث الكتل، يمكنك إضافة **توقف عشوائي** بين
ردود الكتل (بعد الكتلة الأولى). هذا يجعل الاستجابات متعددة الفقاعات تبدو
أكثر طبيعية.

- الإعداد: `agents.defaults.humanDelay` (تجاوز لكل وكيل عبر `agents.list[].humanDelay`).
- الأوضاع: `off` (الافتراضي)، و`natural` (800-2500ms)، و`custom` (`minMs`/`maxMs`).
- ينطبق فقط على **ردود الكتل**، وليس الردود النهائية أو ملخصات الأدوات.

## "بث الأجزاء أو كل شيء"

يناظر هذا:

- **بث الأجزاء:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (الإصدار أثناء التقدم). تحتاج القنوات غير Telegram أيضًا إلى `*.blockStreaming: true`.
- **بث كل شيء في النهاية:** `blockStreamingBreak: "message_end"` (تفريغ مرة واحدة، وربما عدة أجزاء إذا كان طويلًا جدًا).
- **بدون بث كتل:** `blockStreamingDefault: "off"` (الرد النهائي فقط).

**ملاحظة القناة:** يكون بث الكتل **متوقفًا ما لم**
يُضبط `*.blockStreaming` صراحة على `true`. يمكن للقنوات بث معاينة حية
(`channels.<channel>.streaming`) بدون ردود كتل.

تذكير بموقع الإعدادات: توجد افتراضيات `blockStreaming*` ضمن
`agents.defaults`، وليس إعداد الجذر.

## أوضاع بث المعاينة

المفتاح المعتمد: `channels.<channel>.streaming`

الأوضاع:

- `off`: تعطيل بث المعاينة.
- `partial`: معاينة واحدة تُستبدل بأحدث نص.
- `block`: تحديثات المعاينة في خطوات مقطعة/ملحقة.
- `progress`: معاينة تقدم/حالة أثناء التوليد، والإجابة النهائية عند الاكتمال.

`streaming.mode: "block"` هو وضع بث معاينة للقنوات القابلة للتحرير
مثل Discord وTelegram. لا يفعّل تسليم كتل القناة هناك.
استخدم `streaming.block.enabled` أو مفتاح القناة القديم `blockStreaming` عندما
تريد ردود كتل عادية. Microsoft Teams هو الاستثناء: لا يملك
نقل كتل معاينة مسودة، لذلك يطابق `streaming.mode: "block"` تسليم كتل Teams
بدلًا من البث الجزئي/التقدمي الأصلي.

### تعيين القنوات

| القناة    | `off` | `partial` | `block` | `progress`              |
| ---------- | ----- | --------- | ------- | ----------------------- |
| Telegram   | ✅    | ✅        | ✅      | مسودة تقدم قابلة للتحرير |
| Discord    | ✅    | ✅        | ✅      | مسودة تقدم قابلة للتحرير |
| Slack      | ✅    | ✅        | ✅      | ✅                      |
| Mattermost | ✅    | ✅        | ✅      | ✅                      |
| MS Teams   | ✅    | ✅        | ✅      | بث تقدم أصلي            |

خاص بـ Slack فقط:

- يبدّل `channels.slack.streaming.nativeTransport` استدعاءات واجهة برمجة تطبيقات البث الأصلية في Slack عندما يكون `channels.slack.streaming.mode="partial"` (الافتراضي: `true`).
- يتطلب بث Slack الأصلي وحالة سلسلة مساعد Slack هدف سلسلة رد. لا تعرض الرسائل المباشرة على المستوى الأعلى تلك المعاينة ذات نمط السلسلة، لكنها لا تزال تستطيع استخدام منشورات معاينة مسودة Slack وتعديلاتها.

ترحيل المفتاح القديم:

- Telegram: يكتشف doctor/مسارات توافق الإعدادات قيم `streamMode` القديمة وقيم `streaming` العددية/المنطقية ويرحلها إلى `streaming.mode`.
- Discord: يبقى `streamMode` + `streaming` المنطقي أسماء مستعارة وقت التشغيل لتعداد `streaming`؛ شغّل `openclaw doctor --fix` لإعادة كتابة الإعدادات المحفوظة.
- Slack: يبقى `streamMode` اسمًا مستعارًا وقت التشغيل لـ `streaming.mode`؛ ويبقى `streaming` المنطقي اسمًا مستعارًا وقت التشغيل لـ `streaming.mode` بالإضافة إلى `streaming.nativeTransport`؛ ويبقى `nativeStreaming` القديم اسمًا مستعارًا وقت التشغيل لـ `streaming.nativeTransport`. شغّل `openclaw doctor --fix` لإعادة كتابة الإعدادات المحفوظة.

### سلوك وقت التشغيل

Telegram:

- يستخدم تحديثات معاينة `sendMessage` + `editMessageText` عبر الرسائل المباشرة والمجموعات/المواضيع.
- لا تزال المعاينات الأولية القصيرة مؤجلة بإزالة الارتداد لتحسين تجربة إشعارات الدفع، لكن Telegram يجسدها الآن بعد تأخير محدود حتى لا تبقى التشغيلات النشطة صامتة بصريًا.
- يعدل النص النهائي المعاينة النشطة في مكانها؛ وتعيد النهايات الطويلة استخدام تلك الرسالة للجزء الأول وترسل الأجزاء المتبقية فقط.
- يدير وضع `block` المعاينة إلى رسالة جديدة عند `streaming.preview.chunk.maxChars` (الافتراضي 800، مقيّد بحد تحرير Telegram البالغ 4096)؛ أما الأوضاع الأخرى فتنمّي معاينة واحدة حتى 4096 حرفًا.
- يبقي وضع `progress` تقدم الأدوات في مسودة حالة قابلة للتحرير، ويجسد تسمية الحالة عندما يكون بث الإجابة نشطًا لكن لا يتوفر سطر أداة بعد، ويمسح تلك المسودة عند الاكتمال، ويرسل الإجابة النهائية عبر التسليم العادي.
- إذا فشل التعديل النهائي قبل تأكيد النص المكتمل، يستخدم OpenClaw التسليم النهائي العادي وينظف المعاينة القديمة.
- يُتخطى بث المعاينة عندما يكون بث كتل Telegram ممكّنًا صراحة (لتجنب البث المزدوج).
- يمكن لـ `/reasoning stream` كتابة الاستدلال إلى معاينة عابرة تُحذف بعد التسليم النهائي.

Discord:

- يستخدم رسائل معاينة بإرسال + تعديل.
- يستخدم وضع `block` تقطيع المسودة (`draftChunk`).
- يُتخطى بث المعاينة عندما يكون بث كتل Discord ممكّنًا صراحة.
- تلغي حمولات الوسائط النهائية والخطأ والرد الصريح المعاينات المعلقة بدون تفريغ مسودة جديدة، ثم تستخدم التسليم العادي.

Slack:

- يمكن لـ `partial` استخدام بث Slack الأصلي (`chat.startStream`/`append`/`stop`) عند توفره.
- يستخدم `block` معاينات مسودة بأسلوب الإلحاق.
- يستخدم `progress` نص معاينة الحالة، ثم الإجابة النهائية.
- تستخدم الرسائل المباشرة على المستوى الأعلى بدون سلسلة رد منشورات معاينة مسودة وتعديلات بدلًا من بث Slack الأصلي.
- يمنع بث المعاينة الأصلي والمسودة ردود الكتل لتلك الدورة، لذلك يُبث رد Slack عبر مسار تسليم واحد فقط.
- لا تنشئ حمولات الوسائط/الأخطاء النهائية ونهايات التقدم رسائل مسودة مؤقتة؛ وحدها النهايات النصية/الكتلية التي يمكنها تعديل المعاينة تفرّغ نص المسودة المعلق.

Mattermost:

- يبث التفكير ونشاط الأدوات ونص الرد الجزئي في منشور معاينة مسودة واحد يُنهى في مكانه عندما يكون إرسال الإجابة النهائية آمنًا.
- يعود إلى إرسال منشور نهائي جديد إذا حُذف منشور المعاينة أو أصبح غير متاح عند وقت الإنهاء.
- تلغي حمولات الوسائط/الأخطاء النهائية تحديثات المعاينة المعلقة قبل التسليم العادي بدلًا من تفريغ منشور معاينة مؤقت.

Matrix:

- تُنهى معاينات المسودة في مكانها عندما يستطيع النص النهائي إعادة استخدام حدث المعاينة.
- تلغي النهايات الخاصة بالوسائط فقط، والخطأ، وعدم تطابق هدف الرد تحديثات المعاينة المعلقة قبل التسليم العادي؛ وتُنقّح المعاينة القديمة الظاهرة بالفعل.

### تحديثات معاينة تقدم الأدوات

يمكن أن يتضمن بث المعاينة أيضًا تحديثات **تقدم الأدوات** - أسطر حالة قصيرة مثل "البحث في الويب"، أو "قراءة ملف"، أو "استدعاء أداة" - تظهر في رسالة المعاينة نفسها أثناء تشغيل الأدوات، قبل الرد النهائي. في وضع خادم تطبيق Codex، تستخدم رسائل التمهيد/التعليق في Codex مسار المعاينة نفسه، لذلك يمكن لملاحظات تقدم قصيرة مثل "أتحقق..." أن تُبث إلى المسودة القابلة للتحرير دون أن تصبح جزءًا من الإجابة النهائية. يحافظ هذا على حيوية بصرية لدورات الأدوات متعددة الخطوات بدلًا من الصمت بين أول معاينة تفكير والإجابة النهائية.

قد تصدر الأدوات طويلة التشغيل تقدمًا نمطيًا قبل أن تعود. على سبيل المثال،
يجهز `web_fetch` مؤقتًا مدته خمس ثوانٍ عند بدئه: إذا كان الجلب لا يزال
معلقًا، يمكن للمعاينة عرض `Fetching page content...`؛ وإذا انتهى الجلب
أو أُلغي قبل ذلك، فلا يصدر أي سطر تقدم. لا تزال نتيجة الأداة النهائية
اللاحقة تُسلّم بشكل عادي إلى النموذج.

الأسطح المدعومة:

- يبث **Discord** و**Slack** و**Telegram** و**Matrix** تقدّم الأدوات وتحديثات تمهيد Codex إلى تعديل المعاينة المباشرة افتراضياً عندما يكون بث المعاينة نشطاً. يستخدم Microsoft Teams بث التقدّم الأصلي لديه في المحادثات الشخصية.
- شُحن Telegram مع تفعيل تحديثات معاينة تقدّم الأدوات منذ `v2026.4.22`؛ وإبقاؤها مفعّلة يحافظ على ذلك السلوك الصادر.
- يدمج **Mattermost** بالفعل نشاط الأدوات في منشور معاينة المسودة الوحيد الخاص به (انظر أعلاه).
- تتبع تعديلات تقدّم الأدوات وضع بث المعاينة النشط؛ ويتم تخطيها عندما يكون بث المعاينة `off` أو عندما يكون بث الكتل قد تولّى الرسالة. في Telegram، يكون `streaming.mode: "off"` للنتيجة النهائية فقط: كما يتم كتم ثرثرة التقدّم العامة بدلاً من تسليمها كرسائل حالة مستقلة، بينما تستمر مطالبات الموافقة وحمولات الوسائط والأخطاء في التوجيه بشكل طبيعي.
- للإبقاء على بث المعاينة مع إخفاء أسطر تقدّم الأدوات، اضبط `streaming.preview.toolProgress` على `false` لذلك القناة. ولإبقاء أسطر تقدّم الأدوات مرئية مع إخفاء نص الأوامر/التنفيذ، اضبط `streaming.preview.commandText` على `"status"` أو `streaming.progress.commandText` على `"status"`؛ الافتراضي هو `"raw"` للحفاظ على السلوك الصادر. هذه السياسة مشتركة بين قنوات المسودة/التقدّم التي تستخدم عارض التقدّم المدمج في OpenClaw، بما في ذلك Discord وMatrix وMicrosoft Teams وMattermost ومعاينات مسودات Slack وTelegram. لتعطيل تعديلات المعاينة بالكامل، اضبط `streaming.mode` على `off`.
- تُعد ردود الاقتباس المحددة في Telegram استثناءً: عندما لا يكون `replyToMode` هو `"off"` ويكون نص اقتباس محدد موجوداً، يتخطى OpenClaw بث معاينة الإجابة لذلك الدور حتى لا يمكن عرض أسطر معاينة تقدّم الأدوات. ولا تزال الردود على الرسالة الحالية من دون نص اقتباس محدد تُبقي بث المعاينة. راجع [وثائق قناة Telegram](/ar/channels/telegram) لمعرفة التفاصيل.

### مسار تقدّم التعليقات

إلى جانب تقدّم الأدوات، يمكن لعارض التقدّم المدمج إظهار مسار إضافي واحد في المسودة:

- **`streaming.progress.commentary`** — اعرض **تعليقات** النموذج قبل الأداة (💬) — سرداً قصيراً من نوع "سأتحقق… ثم…" — متداخلاً مع أسطر الأدوات في مسودة التقدّم.

```json
{
  "channels": {
    "discord": {
      "streaming": { "mode": "progress", "progress": { "commentary": true } }
    }
  }
}
```

أبقِ أسطر التقدّم مرئية لكن أخفِ نص الأوامر/التنفيذ الخام:

```json
{
  "channels": {
    "telegram": {
      "streaming": {
        "mode": "partial",
        "preview": {
          "toolProgress": true,
          "commandText": "status"
        }
      }
    }
  }
}
```

استخدم الشكل نفسه تحت مفتاح قناة تقدّم مدمج آخر، على سبيل المثال `channels.discord` أو `channels.matrix` أو `channels.msteams` أو `channels.mattermost` أو معاينات مسودات Slack. في وضع مسودة التقدّم، ضع السياسة نفسها تحت `streaming.progress`:

```json
{
  "channels": {
    "telegram": {
      "streaming": {
        "mode": "progress",
        "progress": {
          "toolProgress": true,
          "commandText": "status"
        }
      }
    }
  }
}
```

## ذات صلة

- [إعادة هيكلة دورة حياة الرسالة](/ar/concepts/message-lifecycle-refactor) - تستهدف تصميم المعاينة والتحرير والبث والإنهاء المشترك
- [مسودات التقدّم](/ar/concepts/progress-drafts) - رسائل عمل جارٍ مرئية تُحدّث أثناء الأدوار الطويلة
- [الرسائل](/ar/concepts/messages) - دورة حياة الرسالة وتسليمها
- [إعادة المحاولة](/ar/concepts/retry) - سلوك إعادة المحاولة عند فشل التسليم
- [القنوات](/ar/channels) - دعم البث لكل قناة
