arc/hesabixAPI/docs/CRM_CHAT_WEBSOCKET_DEPLOYMENT.md
2026-05-07 22:21:45 +03:30

2 KiB
Executable file

چت CRM و WebSocket (/ws/crm-chat)

وضعیت اتصال وب‌سوکت و رویدادهای زندهٔ چت وب (تایپ، ورود عامل، پیام‌ها) در حافظهٔ هر فرایند uvicorn گیر می‌کنند.

Redis خاموش است

بدون Redis هیچ پخشی بین چند worker وجود ندارد. باید یکی از دو کار را انجام دهید:

  1. یک worker برای API که پشت آن WebSocket باز می‌شود
    مثال: --workers 1 یا تنها یک نمونهٔ برنامهٔ ASGI؛ یا کل ترافیک wss://…/ws/crm-chat را به یک نمونه هدایت کنید.

  2. Sticky وب‌سوکت در لودبالانسر
    هر دو اتصال (ویجیت سایت بازدیدکننده و اپراتور CRM که به همان apiBase/دامنه وب‌سوکت وصل می‌شوند) باید تا پایان عمر سکشن وب‌سوکت به یک upstream بروند (ip_hash، cookie sticky، یا مکانیزم معادل).

اگر هم‌زمان چند worker داشته باشید و بازدیدکننده روی worker A و عامل روی worker B باشد، تایپ و agent.joined به طرف مقابل نمی‌رسد — این رفتار مورد انتظار است تا Redis روشن نشود.

Redis روشن است

می‌توانید چند worker داشته باشید؛ کانال Pub/Sub داخلی رویدادها را به همهٔ فرایندها می‌رساند (بعد از هر رویداد، تحویل محلی هم روی کارگر فرستنده انجام می‌شود تا حتی بدون تأخیر شبکهٔ Redis، کلاینت‌های همان کارگر آپدیت شوند).

مسیر وب‌سوکت

نقطهٔ اتصال معمولا زیر پیشوند API است، مثلاً:

{base}/ws/crm-chat

همان میزبانی را که کلاینت‌های Flutter وب و ویجیت وردپرس استفاده می‌کنند، در تنظیمات sticky در نظر بگیرید.