دليل النشر

‏استضافة Chatwoot على VPS: دعم عملاء متعدد القنوات

انشر على VPS Cloud ←

دليل عملي

‏استضافة Chatwoot على VPS: دعم عملاء متعدد القنوات

الاستضافة الذاتية12 دقيقةً للقراءةعدد الخطوات: 10

‏تفرض Intercom وZendesk رسومًا لكل وكيل وتحتجز بياناتك على خوادمها. ‏Chatwoot (MIT، أكثر من 34 ألف نجمة، v4.17.1) يقدّم بديلًا جذريًا: منصة دعم عملاء مفتوحة المصدر متعددة القنوات تستضيفها على خادمك الخاص. دردشة مباشرة، بريد إلكتروني، WhatsApp Business، Telegram، Facebook Messenger ورسائل Twitter/X — جميع محادثات عملائك في صندوق وارد مشترك واحد، بلا رسوم لكل وكيل، بلا بيانات تغادر بنيتك التحتية.

المحتويات· لماذا تستضيف دعم عملائك ذاتيًا1/12
  1. 01لماذا تستضيف دعم عملائك ذاتيًا
  2. 02‏ما تحصل عليه مع Chatwoot المستضاف ذاتيًا
  3. 03المتطلبات الأساسية
  4. 04‏نشر Chatwoot على VPS في 6 خطوات
  5. 05إدارة صناديق الوارد المتعددة
  6. 06‏تكاملات Chatwoot: Webhooks وSlack وواجهة برمجية REST
  7. 07‏تحديث Chatwoot
  8. 08‏الترقية من Chatwoot v3 إلى v4
  9. 09‏إجراء الترقية من v3 إلى v4
  10. 10استكشاف الأخطاء: الأخطاء الشائعة
  11. 11‏Chatwoot مقابل Crisp مقابل Intercom: أي أداة لأي موقف
  12. 12الوثائق الرسمية

لماذا تستضيف دعم عملائك ذاتيًا

‏لحلول دعم العملاء SaaS نموذج أعمال بسيط: تدفع لكل وكيل ولكل قناة، وتُخزَّن بيانات عملائك على خوادمهم. بالنسبة لوكالة ويب أو مؤسسة صغيرة ومتوسطة، يمكن أن تتراكم التكاليف بسرعة لتبلغ مئات الدراهم شهريًا حين يتجاوز الفريق شخصين أو ثلاثة. ‏Chatwoot يعكس هذه المعادلة: تنشر المنصة على خادمك الخاص، وتدعو عدد الوكلاء الذي تحتاجه، وتربط جميع قنواتك بلا تكاليف إضافية. تبقى تبادلات عملائك على بنيتك التحتية — حجة قوية للامتثال لـ GDPR وثقة العميل وسيادة البيانات.

‏ما تحصل عليه مع Chatwoot المستضاف ذاتيًا

  • ‏صندوق وارد مشترك متعدد القنوات: دردشة مباشرة وبريد إلكتروني وWhatsApp وTelegram وFacebook Messenger ورسائل Twitter/X في لوحة تحكم واحدة.
  • ‏ودجت دردشة مباشرة قابل للتضمين: واجهة قابلة للتخصيص تُضاف إلى أي موقع ويب بسطرين من JavaScript.
  • ‏ردود جاهزة وقواعد أتمتة: التعيين التلقائي والرد الأول والتوجيه حسب اللغة أو الكلمة المفتاحية.
  • ‏تعاون الفريق: ملاحظات داخلية وتعيين المحادثات والإشارات وطوابير الفريق المرئية لجميع الوكلاء.
  • ‏CRM مدمج: ملفات تعريف جهات الاتصال مع سجل المحادثات والسمات المخصصة والتصنيفات.
  • ‏واجهة برمجية REST وWebhooks: تكامل مع n8n أو Activepieces أو خادمك الخاص.
  • ‏رخصة MIT — بلا تسعير لكل وكيل، بلا بيانات ترسل لطرف ثالث، سيادة كاملة.

المتطلبات الأساسية

‏يعمل Chatwoot بمكدس Ruby on Rails + Sidekiq + PostgreSQL 15 + Redis 7، أي أربع حاويات Docker. خطِّط لخادم VPS بذاكرة لا تقل عن 2 غيغابايت (يُوصى بـ4 غيغابايت لفرق تتجاوز 10 وكلاء). ‏Ubuntu 24.04 مع Docker هو المسار الأسرع. على صعيد الشبكة، أعدّ نطاقًا فرعيًا — مثل support.your-domain.com — وبروكسي عكسي (Nginx أو Caddy) لتفعيل HTTPS. ‏يستلزم Chatwoot FRONTEND_URL بصيغة HTTPS لعمل إعادة توجيه OAuth وروابط البريد الإلكتروني وسكريبت ودجت الدردشة المباشرة بشكل صحيح.

‏قبل البدء، تحقق من تثبيت Docker Compose v2 (docker compose version): يستخدم Chatwoot v4 صيغة docker compose (بمسافة) وليس الأمر القديم docker-compose.

‏نشر Chatwoot على VPS في 6 خطوات

  1. ‏النشر بنقرة واحدة من Marketplace ServOrbit

    ‏افتح لوحة تحكم ServOrbit، اذهب إلى Marketplace ← التعاون والإنتاجية ← Chatwoot، ثم انقر على نشر. يسحب Docker صورة chatwoot/chatwoot:latest ويشغّل أربع حاويات: PostgreSQL وRedis وخادم Rails والعامل Sidekiq. عند الإقلاع الأول تعمل هجرة قاعدة البيانات تلقائيًا — انتظر 60 إلى 90 ثانية قبل توفر الواجهة.

    ‏للتثبيت اليدوي، انسخ docker-compose.yml الرسمي، وانسخ .env.example إلى .env، واضبط SECRET_KEY_BASE (أنشئه بـopenssl rand -hex 64) ثم شغّل:

    docker compose up -d
    docker compose exec rails bundle exec rails db:chatwoot_prepare
  2. إنشاء حساب المدير

    ‏اذهب إلى http://<IP-VPS>:3000. يعرض Chatwoot معالج الإعداد الأول: أدخل اسمك وبريدك الإلكتروني وكلمة مرور قوية. يصبح هذا الحساب المدير العام. يمكنك بعد ذلك دعوة وكلاء إضافيين وإنشاء فرق من لوحة الإعدادات.

    ‏إن بقيت الصفحة بيضاء بعد 90 ثانية، تحقق من سجلات حاوية الويب: docker compose logs web --tail=50. يشير خطأ SECRET_KEY_BASE not set أو PG::ConnectionBad إلى مشكلة في إعدادات .env.

  3. ‏تهيئة FRONTEND_URL وتفعيل HTTPS

    ‏وجِّه نطاقك نحو الخادم (سجل A ← IP الخادم). ثبِّت Caddy (apt install -y caddy) وأنشئ /etc/caddy/Caddyfile: support.your-domain.com { reverse_proxy localhost:3000 }. أعِد تحميل Caddy (systemctl reload caddy). ثم اضبط FRONTEND_URL=https://support.your-domain.com في ملف .env وأعد تشغيل حاوية الويب: docker compose restart web. يستخدم Chatwoot هذا العنوان لإعادة توجيه OAuth وروابط البريد وسكريبت الودجت.

    ‏فعِّل أيضًا FORCE_SSL=true في .env لكي تعيد Rails توجيه اتصالات HTTP إلى HTTPS وتضبط ملفات تعريف الارتباط Secure.

  4. إضافة أول صندوق وارد

    ‏في Chatwoot، اذهب إلى الإعدادات ← صناديق الوارد ← إضافة صندوق. اختر موقع الويب للدردشة المباشرة، أو البريد الإلكتروني لتبادلات SMTP/IMAP، أو قناة مراسلة مثل WhatsApp Cloud API أو Telegram. للدردشة المباشرة، انسخ سكريبت JavaScript المولَّد والصقه في <head> موقعك. يرى الزوار فورًا فقاعة الدردشة.

  5. دعوة الوكلاء وتهيئة الأتمتة

    ‏اذهب إلى الإعدادات ← الوكلاء وأرسل دعوات بالبريد الإلكتروني. في الإعدادات ← الأتمتة، أنشئ قواعد لتعيين المحادثات تلقائيًا (مثلًا، WhatsApp ← فريق المبيعات، البريد ← الفوترة) وإرسال رسائل الاتصال الأول خارج ساعات العمل. يتولى عامل Sidekiq جميع المهام غير المتزامنة: إرسال رسائل البريد وتشغيل Webhooks وإشعارات الدفع.

  6. ‏ربط WhatsApp Business (اختياري)

    ‏أنشئ تطبيقًا في Meta for Developers وفعِّل WhatsApp Business Cloud API. في Chatwoot ← الإعدادات ← صناديق الوارد ← إضافة ← WhatsApp، أدخل رقم هاتف WhatsApp Business ومعرّف الحساب والرمز المميز ورمز التحقق من Webhook. تظهر رسائل WhatsApp الواردة الآن في صندوق الوارد المشترك جانب الدردشة المباشرة والبريد الإلكتروني.

‏أعدَّ الردود الجاهزة (الإعدادات ← الردود الجاهزة) منذ اليوم الأول: تأكيد الاستلام، تأكيد الطلب، مدد المعالجة. يوفّر وكلاؤك عدة دقائق لكل محادثة — واتساق الأسلوب مضمون بغض النظر عمّن يجيب. ادمجها مع قواعد الأتمتة لإرسال رد الاتصال الأول تلقائيًا ليلًا وعطل نهاية الأسبوع.

إدارة صناديق الوارد المتعددة

‏يتيح Chatwoot مركزة قنوات متعددة في واجهة واحدة. تنشئ كل قناة صندوق وارد مستقلًا، مرئيًا في الشريط الجانبي وقابلًا للتعيين لفريق مخصص.

‏البريد الإلكتروني (SMTP/IMAP): في الإعدادات ← صناديق الوارد ← البريد الإلكتروني، أدخل عنوانك الوارد وبيانات IMAP. يستطلع Chatwoot صندوق البريد كل دقيقتين وينشئ محادثة لكل خيط. تُرسل الردود عبر SMTP مع الحفاظ على نفس الخيط.

‏رسائل Twitter/X المباشرة: اربط حسابًا عبر واجهة برمجية Twitter v2 (مفتاح API + السر + رمز الوصول). تظهر الرسائل المباشرة الواردة في الوقت الفعلي عبر Webhook. ملاحظة: يتطلب الوصول إلى Twitter v2 API اشتراكًا Developer Basic أو أعلى.

‏الهاتف وWebRTC: هاجر Chatwoot v4.17 تكامله للمكالمات المرئية من Dyte إلى Cloudflare RealtimeKit. إن كنت تستخدم المكالمات المرئية، أعد تهيئة التكامل في الإعدادات ← التكاملات ← Cloudflare Calls وأدخل App ID وApp Token.

‏قناة API: للتكاملات المخصصة (chatbot، CRM داخلي)، أنشئ صندوق وارد من نوع API. يكشف نقطة نهاية REST لاستقبال الرسائل وترسل الردود عبر POST /api/v1/accounts/{id}/conversations/{conv_id}/messages. هذه هي نقطة الدخول لربط أي مصدر خارجي.

‏تكاملات Chatwoot: Webhooks وSlack وواجهة برمجية REST

‏يوفر Chatwoot مستويات تكامل متعددة للاندماج في مكدسك الحالي.

‏Webhooks: في الإعدادات ← التكاملات ← Webhooks، أضف عنوان URL لنقطة النهاية. يطلق Chatwoot حدث JSON عند كل محادثة تُنشأ أو رسالة تُستقبل أو حالة تتغير. مفيد لمزامنة التذاكر مع CRM أو تشغيل سير عمل n8n أو تسجيل المحادثات في قاعدة بياناتك.

‏إشعارات Slack: اربط مساحة عمل Slack عبر OAuth في الإعدادات ← التكاملات ← Slack. تولّد المحادثات الجديدة والإشارات في Chatwoot إشعارًا في قناة Slack التي تختارها. لا يفوت وكلاؤك أي رسالة حتى خارج الواجهة.

‏واجهة برمجية REST: جميع موارد Chatwoot (محادثات، جهات اتصال، رسائل، فرق، تصنيفات) مكشوفة عبر واجهة برمجية REST v1 موثقة على /swagger. المصادقة برمز (user_access_token أو مفتاح API للوكيل). حالات الاستخدام الشائعة: استيراد جهات الاتصال من CRM، إعداد تقارير عن المحادثات المحلولة، تحديث سمات جهات الاتصال تلقائيًا.

‏Zapier / Make: يمتلك Chatwoot موصلات أصلية على Zapier وMake لتشغيل إجراءات بدون برمجة. مثال: محادثة Chatwoot جديدة ← إنشاء فرصة في CRM ← إخطار فريق المبيعات بالبريد الإلكتروني.

‏تحديث Chatwoot

‏التحديثات الثانوية (إصدارات ترقيعية مثل v4.17.0 ← v4.17.1) آمنة وتحتوي غالبًا على إصلاحات أمنية: خطط لها في غضون 48 ساعة من نشرها.

‏للتحديث الترقيعي:

docker compose pull
docker compose down
docker compose up -d
docker compose exec rails bundle exec rails db:migrate

‏ثم تحقق من السجلات (docker compose logs web --tail=30) واختبر إرسال رسالة على كل قناة.

‏للتحديث الرئيسي (v3 ← v4)، الإجراء أكثر دقة: يُدخل v4 هجرات مخطط PostgreSQL حاجبة (جدولا mentions وconversation_participants المعاد هيكلتهما). لا تشغّل أبدًا docker compose pull && docker compose up -d بدون نسخة احتياطية مسبقة على إصدار رئيسي.

‏الممارسة الجيدة: دائمًا ثبّت إصدارًا محددًا في docker-compose.yml (chatwoot/chatwoot:v4.17.1 بدلًا من latest) لتتحكم بالضبط في ما يعمل في الإنتاج وتتجنب التحديثات الصامتة.

‏الترقية من Chatwoot v3 إلى v4

‏أطلق Chatwoot الإصدار v4 في يونيو 2026 مع واجهة 'Nova UI' الجديدة وعدة هجرات مخطط PostgreSQL تعطيلية. ترقية في المكان من v3 تُعطّل المثيل بصورة منهجية إن لم تُجرَ بتحضير مسبق — وهذا موضوع المشكلة الرسمية #12088 التي ترصد أكثر حالات الفشل شيوعًا.

‏السبب الرئيسي للعطل: يُعيد v4 تسمية جدول mentions ويُعيد هيكلة جدول conversation_participants. تشغيل docker compose pull && docker compose up -d بلا نسخة احتياطية مسبقة يطلق الهجرات تلقائيًا؛ إن فشلت هجرة في المنتصف (انتهاء المهلة، قيد FK غير محقق)، تبقى قاعدة البيانات في حالة وسيطة ولا يعود Chatwoot يعمل.

‏عمليًا، ثلاث فئات من المثيلات معرّضة للخطر: تلك التي تعمل بـv3 مع أكثر من 50,000 محادثة (هجرات الجملة بطيئة وقد تتجاوز مهلة Rails البالغة 30 ثانية)، وتلك التي تحتوي على أعمدة مخصصة غير موثقة في جدول contacts، وتلك التي تستخدم Sidekiq Pro (أُزيل من Community Edition في v4 — المهام في قائمة الانتظار وقت الهجرة تُفقد).

‏إجراء الترقية من v3 إلى v4

  1. نسخ قاعدة البيانات والأحجام احتياطيًا

    ‏قبل أي إجراء، احفظ الحالة الكاملة: docker compose exec postgres pg_dumpall -U postgres > /tmp/chatwoot-v3-dump-$(date +%F).sql. انسخ أيضًا أحجام Docker المرتبطة بـPostgreSQL وRails Storage. هذه النسخة الاحتياطية هي شبكة أمانك الوحيدة: إن فشلت الهجرة، الاستعادة هي المخرج النظيف الوحيد.

  2. ‏تثبيت علامة الصورة على v4

    ‏في docker-compose.yml، استبدل chatwoot/chatwoot:latest بـchatwoot/chatwoot:v4.17.1 (أو آخر إصدار ترقيعي لـv4). تجنّب latest في الإنتاج: تتبع هذه العلامة HEAD وقد تُدخل تراجعات دون إنذار. راجع سجل التغييرات لكل إصدار على GitHub قبل تحديد هدف.

  3. تشغيل الهجرات يدويًا

    ‏بدلًا من ترك Rails تشغّل الهجرات عند بدء حاوية الويب، شغّلها صراحةً في المقدمة لمراقبة التقدم: docker compose run --rm web bundle exec rails db:migrate. عند وقوع خطأ، تظهر الرسالة فورًا — تحدّد الهجرة المعطوبة وتتيح تصحيحها أو تخطيها بـdb:migrate:up VERSION=... قبل إعادة التشغيل.

  4. البدء والتحقق

    ‏بمجرد اكتمال الهجرات بلا أخطاء، ابدأ المكدس: docker compose up -d. سجّل الدخول إلى واجهة Nova UI وتأكد من وجود صناديق الوارد وجهات الاتصال والمحادثات الحالية. اختبر إرسال واستقبال رسالة على كل قناة متصلة. إن أظهر Sidekiq مهامًا فاشلة، استخدم واجهة Sidekiq Web (إن كانت مفعّلة على /sidekiq) لإعادة محاولتها.

استكشاف الأخطاء: الأخطاء الشائعة

‏عمال Sidekiq محجوبون. إن توقفت رسائل البريد الصادرة أو Webhooks، فالأرجح أن Sidekiq متوقف أو عماله منهكون. تحقق عبر واجهة Sidekiq Web (/sidekiq) أو السجلات: docker compose logs sidekiq --tail=50. السبب الأكثر شيوعًا هو طابور mailers المشبع. أعد تشغيل العامل: docker compose restart sidekiq. إن استمر الأمر، تحقق من اتصال Redis (docker compose exec redis redis-cli ping يجب أن يردّ PONG).

‏Redis connection refused. إن فشل بدء Rails وSidekiq مع Redis::CannotConnectError، حاوية Redis غير جاهزة. تحقق من حالتها: docker compose ps redis. حاوية في حالة Restarting تشير إلى مشكلة حجم أو صلاحية. احذف حجم Redis وأعد التشغيل إن كانت بيانات Redis عابرة (ستُفقد المهام في قائمة الانتظار).

‏ActionCable WebSocket غير متصل. يعرض ودجت الدردشة المباشرة 'فُقد الاتصال' أو لا يستقبل الوكلاء الرسائل في الوقت الفعلي. السبب الأرجح: البروكسي العكسي لا يمرر ترويسات WebSocket. مع Nginx، أضف إلى كتلة location:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

‏مع Caddy، تهيئة reverse_proxy localhost:3000 تعالج WebSockets تلقائيًا.

‏هجرة عالقة في المنتصف. إن توقف rails db:migrate بخطأ، لا تعد المحاولة فورًا. حدّد الهجرة الفاشلة في رسالة الخطأ، وصحّحها يدويًا أو تخطّها (rails db:migrate:up VERSION=<timestamp>)، ثم أعد التشغيل. كملاذ أخير، استعد النسخة الاحتياطية المأخوذة قبل الهجرة.

‏Chatwoot مقابل Crisp مقابل Intercom: أي أداة لأي موقف

مرّر الجدول أفقيًا

المعيار‏Chatwoot (مستضاف ذاتيًا)CrispIntercom
نموذج التسعيرمجاني (تكلفة VPS فقط)مجاني محدود، ثم ~25 €/شهرمن ~74 $/وكيل/شهر
الاستضافةعلى خادمك الخاص‏SaaS فقط‏SaaS فقط
بيانات العملاءعلى بنيتك التحتية‏خوادم Crisp‏خوادم Intercom
GDPR / السيادةكاملة — بلا طرف ثالث‏DPA متاح‏DPA متاح
القنوات المدعومة‏دردشة مباشرة وبريد وWhatsApp وTelegram وFB وTwitter/X وAPI‏دردشة مباشرة وبريد وMessenger‏دردشة مباشرة وبريد وSMS وWhatsApp (خطة أعلى)
وكلاء غير محدوديننعملا (محدود بالخطة)لا (فوترة بالوكيل)
الأتمتة‏قواعد أصلية + APIقواعد أصليةسير عمل متقدمة
تعقيد النشرمتوسط (Docker مطلوب)لا شيءلا شيء

الوثائق الرسمية

‏للإعداد المتقدم (SMTP، LDAP SSO، تخزين S3، حسابات متعددة) والخيارات الخاصة بـChatwoot، راجع الوثائق الرسمية لـChatwoot المستضاف ذاتيًا. يغطي هذا الدليل النشر على VPS؛ وثائق المطوّر تبقى المرجع للإعدادات الدقيقة والتحديثات الكبرى.

انشر Chatwoot على خادمك الخاص

استضف Chatwoot ذاتيًا على خادم ServOrbit VPS — مفتوح المصدر، بلا رسوم لكل وكيل، جميع محادثات عملائك على بنيتك التحتية.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة