---
read_when:
    - تصحيح أخطاء وصول WebChat أو تهيئته
summary: مضيف WebChat ثابت عبر local loopback واستخدام Gateway WS لواجهة الدردشة
title: WebChat
x-i18n:
    generated_at: "2026-06-27T18:48:50Z"
    model: gpt-5.5
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: 108dd98f975a2d2e980921bd0f486c3683c18ba6eb37111163af87929a9d7973
    source_path: web/webchat.md
    workflow: 16
---

الحالة: تتواصل واجهة دردشة SwiftUI على macOS/iOS مباشرة مع WebSocket الخاص بـ Gateway.

## ما هي

- واجهة دردشة أصلية لـ Gateway (من دون متصفح مضمّن ومن دون خادم ثابت محلي).
- تستخدم الجلسات نفسها وقواعد التوجيه نفسها مثل القنوات الأخرى.
- توجيه حتمي: تعود الردود دائمًا إلى WebChat.

## البدء السريع

1. ابدأ تشغيل Gateway.
2. افتح واجهة WebChat (تطبيق macOS/iOS) أو تبويب الدردشة في Control UI.
3. تأكد من تكوين مسار مصادقة صالح لـ Gateway (السر المشترك افتراضيًا،
   حتى على الحلقة الراجعة).

## كيف يعمل (السلوك)

- تتصل الواجهة بـ WebSocket الخاص بـ Gateway وتستخدم `chat.history` و`chat.send` و`chat.inject`.
- `chat.history` محدود لضمان الاستقرار: قد يقتطع Gateway حقول النص الطويلة، ويحذف البيانات الوصفية الثقيلة، ويستبدل الإدخالات كبيرة الحجم بـ `[chat.history omitted: message too large]`.
- عندما تكون رسالة مساعد مرئية قد اقتُطعت في `chat.history`، يمكن لـ Control UI فتح قارئ جانبي وجلب الإدخال الكامل بعد تطبيع العرض عند الطلب عبر `chat.message.get` من دون زيادة حمولة السجل الافتراضية.
- يتبع `chat.history` فرع النص النشط لملفات الجلسات الحديثة القائمة على الإلحاق فقط، لذلك لا تُعرَض فروع إعادة الكتابة المهجورة ونسخ المطالبات المستبدلة في WebChat.
- تُعرَض إدخالات Compaction كفاصل صريح للسجل المضغوط. يوضح الفاصل أن النص المضغوط محفوظ كنقطة تحقق ويربط بعناصر تحكم نقاط تحقق الجلسات، حيث يمكن للمشغلين إنشاء فرع أو الاستعادة من ذلك العرض المضغوط عندما تسمح أذوناتهم بذلك.
- يتذكر Control UI قيمة `sessionId` الخاصة بـ Gateway التي يعيدها `chat.history` ويضمّنها في استدعاءات `chat.send` اللاحقة، بحيث تستمر عمليات إعادة الاتصال وتحديث الصفحة في المحادثة المخزنة نفسها ما لم يبدأ المستخدم جلسة أو يعيد ضبطها.
- يدمج Control UI عمليات الإرسال المكررة الجارية للجلسة والرسالة والمرفقات نفسها قبل إنشاء معرف تشغيل `chat.send` جديد؛ ولا يزال Gateway يزيل تكرار الطلبات المتكررة التي تعيد استخدام مفتاح عديمية التكرار نفسه.
- تُمرَّر ملفات بدء مساحة العمل وتعليمات `BOOTSTRAP.md` المعلّقة عبر سياق المشروع في موجه نظام الوكيل، ولا تُنسخ إلى رسالة مستخدم WebChat. لا يضيف اقتطاع Bootstrap إلا إشعار استرداد موجزًا في موجه النظام؛ وتبقى العدادات التفصيلية ومقابض التكوين على أسطح التشخيص.
- `chat.history` مطبّع أيضًا للعرض: سياق OpenClaw الخاص بوقت التشغيل فقط،
  وأغلفة المغلفات الواردة، ووسوم توجيه التسليم المضمّنة
  مثل `[[reply_to_*]]` و`[[audio_as_voice]]`، وحمولات XML النصية الصرفة لاستدعاءات الأدوات
  (بما في ذلك `<tool_call>...</tool_call>`،
  و`<function_call>...</function_call>`، و`<tool_calls>...</tool_calls>`،
  و`<function_calls>...</function_calls>`، وكتل استدعاء الأدوات المقتطعة)،
  ورموز تحكم النموذج المسرّبة بصيغة ASCII/العرض الكامل تُزال من النص المرئي،
  وتُحذف إدخالات المساعد التي يكون نصها المرئي كله هو رمز الصمت الدقيق
  `NO_REPLY` / `no_reply` فقط.
- تُستبعد حمولات الرد المعلّمة بالاستدلال (`isReasoning: true`) من محتوى مساعد WebChat، ونص إعادة تشغيل النص، وكتل المحتوى الصوتي، لذلك لا تظهر الحمولات المخصصة للتفكير فقط كرسائل مساعد مرئية أو صوت قابل للتشغيل.
- يضيف `chat.inject` ملاحظة مساعد مباشرة إلى النص ويبثها إلى الواجهة (من دون تشغيل وكيل).
- يمكن أن تُبقي عمليات التشغيل المُجهضة إخراج المساعد الجزئي مرئيًا في الواجهة.
- يحفظ Gateway نص المساعد الجزئي المُجهض في سجل النص عندما يوجد إخراج مخزّن مؤقتًا، ويميّز تلك الإدخالات ببيانات وصفية للإجهاض.
- يُجلَب السجل دائمًا من Gateway (من دون مراقبة ملفات محلية).
- إذا تعذّر الوصول إلى Gateway، يكون WebChat للقراءة فقط.

### نموذج النص والتسليم

لدى WebChat مساران منفصلان للبيانات:

- ملف JSONL للجلسة هو نص النموذج/وقت التشغيل المتين. في عمليات تشغيل الوكيل العادية، يحفظ وقت تشغيل OpenClaw المضمّن رسائل `user` و`assistant` و`toolResult` المرئية للنموذج عبر مدير الجلسات. لا يكتب WebChat نصوص تسليم أو حالة أو مساعدة عشوائية في ذلك النص.
- أحداث `ReplyPayload` الخاصة بـ Gateway هي إسقاط التسليم الحي. يمكن تطبيعها لعرض WebChat/القناة، وبث الكتل، ووسوم التوجيه، وتضمين الوسائط، وأعلام TTS/الصوت، وسلوك الرجوع في الواجهة. وهي ليست بحد ذاتها سجل الجلسة القانوني.
- لا تزال الحِزم التي تتطلب ردودًا مرئية عبر `tools.message` تستخدم WebChat كمصب رد داخلي للتشغيل الحالي. يُسقط `message.send` بلا هدف من تشغيل WebChat النشط هذا في الدردشة نفسها ويُعكس إلى نص الجلسة؛ ولا يصبح WebChat قناة صادرة قابلة لإعادة الاستخدام ولا يرث `lastChannel` أبدًا.
- يحقن WebChat إدخالات نص المساعد فقط عندما يملك Gateway رسالة معروضة خارج دورة وكيل مضمّنة عادية: `chat.inject`، وردود الأوامر غير الوكيلة، والإخراج الجزئي المُجهض، وملاحق نص الوسائط التي يديرها WebChat.
- يقرأ `chat.history` نص الجلسة المخزّن ويطبّق إسقاط عرض WebChat. إذا ظهر نص مساعد حي أثناء تشغيل ثم اختفى بعد إعادة تحميل السجل، فتحقق أولًا مما إذا كان JSONL الخام يحتوي على نص المساعد، ثم مما إذا كان إسقاط `chat.history` قد جرّده، ثم مما إذا كان دمج الذيل التفاؤلي في Control UI قد استبدل حالة التسليم المحلية باللقطة المخزنة.
- يستخدم `chat.message.get` فرع النص نفسه وقواعد إسقاط العرض نفسها مثل `chat.history`، بما في ذلك نطاق الوكيل النشط، لكنه يستهدف إدخال نص واحدًا بواسطة `messageId` ويعيد سبب عدم إتاحة صادقًا عندما لا يمكن إعادة المحتوى الكامل بعد الآن.

ينبغي أن تكون الإجابات النهائية لعمليات تشغيل الوكيل العادية متينة لأن وقت التشغيل المضمّن يكتب `message_end` الخاص بالمساعد. يجب على أي رجوع يعكس حمولة نهائية مسلّمة إلى النص أن يتجنب أولًا تكرار دورة مساعد كتبها وقت التشغيل المضمّن بالفعل.

## لوحة أدوات وكلاء Control UI

- تحتوي لوحة الأدوات في `/agents` ضمن Control UI على عرضين منفصلين:
  - **متاح الآن** يستخدم `tools.effective(sessionKey=...)` ويعرض إسقاطًا للقراءة فقط مشتقًا من الخادم
    لمخزون الجلسة الحالي، بما في ذلك الأدوات الأساسية، وأدوات Plugin، والأدوات المملوكة للقنوات،
    وأدوات خادم MCP المكتشفة بالفعل.
  - **تكوين الأدوات** يستخدم `tools.catalog` ويبقى مركّزًا على الملفات الشخصية، والتجاوزات، ودلالات
    الفهرس.
- الإتاحة في وقت التشغيل مرتبطة بنطاق الجلسة. يمكن أن يؤدي تبديل الجلسات على الوكيل نفسه إلى تغيير
  قائمة **متاح الآن**. إذا لم تكن خوادم MCP المكوّنة قد اتصلت أو تغيّرت
  منذ آخر اكتشاف، تعرض اللوحة إشعارًا بدلًا من بدء نواقل MCP بصمت
  من مسار القراءة.
- لا يعني محرر التكوين الإتاحة في وقت التشغيل؛ فلا يزال الوصول الفعّال يتبع أسبقية السياسة
  (`allow`/`deny`، وتجاوزات كل وكيل ومزود/قناة).

## الاستخدام عن بُعد

- يمرر الوضع البعيد WebSocket الخاص بـ Gateway عبر SSH/Tailscale.
- لا تحتاج إلى تشغيل خادم WebChat منفصل.

## مرجع التكوين (WebChat)

التكوين الكامل: [التكوين](/ar/gateway/configuration)

لا يحتوي WebChat على قسم تكوين محفوظ. يستخدم Gateway حد العرض المضمّن لـ `chat.history`؛ يمكن لعملاء API إرسال `maxChars` لكل طلب لتجاوزه لاستدعاء `chat.history` واحد. أُحيل تكوين `channels.webchat` و`gateway.webchat` القديم إلى التقاعد؛ شغّل `openclaw doctor --fix` لإزالته.

الخيارات العامة ذات الصلة:

- `gateway.port`، `gateway.bind`: مضيف/منفذ WebSocket.
- `gateway.auth.mode`، `gateway.auth.token`، `gateway.auth.password`:
  مصادقة WebSocket بالسر المشترك.
- `gateway.auth.allowTailscale`: يمكن لتبويب دردشة Control UI في المتصفح استخدام
  ترويسات هوية Tailscale Serve عند تفعيلها.
- `gateway.auth.mode: "trusted-proxy"`: مصادقة الوكيل العكسي لعملاء المتصفح خلف مصدر وكيل **غير حلقة راجعة** واعٍ بالهوية (انظر [مصادقة الوكيل الموثوق](/ar/gateway/trusted-proxy-auth)).
- `gateway.remote.url`، `gateway.remote.token`، `gateway.remote.password`: هدف Gateway البعيد.
- `session.*`: تخزين الجلسة والافتراضيات الرئيسية للمفتاح.

## ذات صلة

- [Control UI](/ar/web/control-ui)
- [لوحة المعلومات](/ar/web/dashboard)
