WebChat
توفر کانال WebChat ابزار دردشة مدمجة وقابلة للتضمين تتصل بعامل Triggerfish از طریق WebSocket. صُممت للتفاعخیرت با العمخیرء وابزارها پشتیبانی، یا هر سيناريو تريد دره تقديم تجربة دردشة از طریق الويب.
طبقهبندی پیشفرض
انجام میشود طبقهبندی WebChat بهصورت پیشفرض كـ PUBLIC. این پیشفرض ثابت لسبب وجيه: زوار الويب خیر يُعاملون هرگز كمالك. هر پیام از نشست WebChat تحمل Taint PUBLIC بغض النظر عن پیکربندی.
الزوار ليسوا مالكين هرگز بخخیرف کانالها الأخرى حيث انجام میشود التحقق از هویت المالك
ببارّف المستخدم یا رقم الهاتف، يعيّن WebChat isOwner: false لتمام اخیرتصاخیرت. این يعني أن عامل لن ينفذ هرگز یاامر روی مستوى المالك از نشست WebChat. این قرار أازي متعمد -- نمیتوانك التحقق از هویت زائر ويب مجهول. :::
راهاندازی
الخطوة 1: تكوين Triggerfish
أضف کانال WebChat به triggerfish.yaml:
yaml
channels:
webchat:
port: 8765
allowedOrigins:
- "https://your-site.com"| الخيار | النوع | الزامی | الوصف |
|---|---|---|---|
port | number | خیر | ازفذ خادم WebSocket (پیشفرض: 8765) |
classification | string | خیر | سطح طبقهبندی (پیشفرض: PUBLIC) |
allowedOrigins | string[] | خیر | أصول CORS المسموح بها (پیشفرض: ["*"]) |
الخطوة 2: تشغيل Triggerfish
bash
triggerfish stop && triggerfish startيبدأ خادم WebSocket باخیرستماع روی الازفذ المُعدّ.
الخطوة 3: توصيل ابزار الدردشة
اتصل بنقطة نهاية WebSocket از تطبيق الويب الخاص بك:
javascript
const ws = new WebSocket("ws://localhost:8765");
ws.onopen = () => {
console.log("Connected to Triggerfish");
};
ws.onmessage = (event) => {
const frame = JSON.parse(event.data);
if (frame.type === "session") {
// الخادم عيّن بارّف نشست
console.log("Session:", frame.sessionId);
}
if (frame.type === "message") {
// رد عامل
console.log("Agent:", frame.content);
}
};
// إرسال پیام
function sendMessage(text) {
ws.send(JSON.stringify({
type: "message",
content: text,
}));
}چگونه کار میکند
تدفق اخیرتصال
- يفتح عميل مرورگر اتصال WebSocket به الازفذ المُعدّ
- يُرقّي Triggerfish درخواست HTTP به WebSocket
- يُولّد بارّف نشست فريد (
webchat-<uuid>) - يرسل الخادم بارّف نشست للعميل در إطار
session - يرسل ويستقبل العميل إطارات
messageبصيغة JSON
تنسيق إطار پیام
تمام الپیامها هي كائنات JSON باین الهيهر:
json
{
"type": "message",
"content": "Hello, how can I help?",
"sessionId": "webchat-a1b2c3d4-..."
}أنواع الإطارات:
| النوع | اخیرتجاه | الوصف |
|---|---|---|
session | از الخادم به العميل | يُرسل عند اخیرتصال با بارّف نشست المُعيّن |
message | كخیر اخیرتجاهين | پیام دردشة بمحتوى نصي |
ping | كخیر اخیرتجاهين | نبض للحفاظ روی اخیرتصال |
pong | كخیر اخیرتجاهين | پاسخ نبض الحفاظ روی اخیرتصال |
مدیریت نشست
هر اتصال WebSocket يحصل روی جلسته الخاصة. عند إغخیرق اخیرتصال، تُزال نشست از خريطة اخیرتصاخیرت النشطة. خیر يوجد استئناف للنشست -- إذا انقطع اخیرتصال، يُعيّن بارّف نشست جديد عند إعادة اخیرتصال.
فحص الصحة
يستجيب خادم WebSocket همچنین لدرخواستات HTTP العادية بفحص صحة:
bash
curl http://localhost:8765
# پاسخ: "WebChat OK"این مدرد لفحوصات صحة موازن الحمل والمراقبة.
مؤشرات الكتابة
يرسل ويستقبل Triggerfish مؤشرات كتابة از طریق WebChat. عندما يعالج عامل درخواستاً، يُرسل إطار مؤشر كتابة به العميل. يمكن لخیربزار عرضه لإظهار أن عامل يفكر.
اعتبارات أازية
- تمام الزوار خارجيون --
isOwnerهمیشهfalse. لن ينفذ عامل یاامر المالك از WebChat. - Taint PUBLIC -- هر پیام ملوثة بـ
PUBLICروی مستوى نشست. نمیتوان للعامل الوصول به یا إعادة بيانات فوق طبقهبندیPUBLICدر نشست WebChat. - CORS -- كوّن
allowedOriginsلتقييد النطاقات التي يمكنها اخیرتصال. پیشفرض["*"]يسمح بهر أصل، وهو ازاسب للتطوير لكن باید تقييده در الإنتاج.
قيّد الأصول در الإنتاج لنشر الإنتاج، حدد همیشه
الأصول المسموح بها صراحة:
yaml
channels:
webchat:
port: 8765
allowedOrigins:
- "https://your-domain.com"
- "https://app.your-domain.com"تغيير طبقهبندی
بینما انجام میشود طبقهبندی WebChat بهصورت پیشفرض كـ PUBLIC، میتوانید تقنياً تعيينه لمستوى مختلف. وبا آن، بما أن isOwner همیشه false، يظل طبقهبندی الفعّال لتمام الپیامها PUBLIC بسبب قانون طبقهبندی الفعّال (min(channel, recipient)).
yaml
channels:
webchat:
port: 8765
classification: INTERNAL # مسموح، لكن isOwner خیر يزال falseالمستويات الصالحة: PUBLIC، INTERNAL، CONFIDENTIAL، RESTRICTED.
