إنتقل إلى المحتوى الرئيسي

تقييد التثبيت المحلي (On-Premise) حسب عنوان IP

هذه الصفحة موجهة لمشغّلي التثبيت المحلي (On-Premise) من MonoChat. تشرح كيفية حصر تطبيق الويب في شبكاتك الخاصة على مستوى الشبكة (nginx أو جدار الحماية) دون حظر الخدمات التي يجب أن تستدعي MonoChat من الإنترنت.

لا يملك MonoChat قائمة عناوين IP مسموحة خاصة به. يوجد التقييد في nginx أو موازن الحمل أو جدار الحماية لديك، ويسري على التثبيت بالكامل لا على مؤسسة واحدة.

ما الذي يجب تقييده وما الذي يبقى مفتوحًا​

يبقى مقيّدًا بشبكاتكيبقى متاحًا من الإنترنت
تطبيق الويب وكل ما لم يرد في العمود الأيمنمسارات webhook والاستدعاء الراجع (callback) في الجداول أدناه
نقطة نهاية DDP/WebSocket التي يتصل بها تطبيق الويب (/websocket)

قيّد واجهة الويب ونقطة نهاية WebSocket معًا: فالتطبيق يستخدمهما كليهما. اسمح لبقية الجهات بالمسارات الواردة أدناه فقط، واحظر الباقي.

المسارات التي تستدعيها الخدمات الخارجية​

كل مسار أدناه مسجَّل في خادم MonoChat. المسار المبني من إعداد هو hookPath الذي ضبطته على الخادم (في channelConnectors.<name> أو paymentSystemConnectors.<name> ضمن إعدادات الخادم)، أما اللاحقة فيضيفها الكود. افتح الموصلات التي تستخدمها فقط.

القنوات​

المساريستدعيهموضع التعريف
<hookPath>/webhooks (POST)omni-message، لقنوات WhatsApp Cloud وWhatsApp Gupshup وInstagram وMessenger وTelegram وTikTok وTwilio SMS وVaran OTPpackages/app-connectors-om2-*/src/webhooks/webhook.ts؛ وhookPath من channelConnectors.whatsappBusinessVegaCloud, whatsappBusinessVegaGupshup, instagramCastor, messengerRigel, telegramBotRegulus, tikTokTimir, twilioSms, varanOtp
<hookPath>/webhooks, <hookPath>/sessions, <hookPath>/messages (POST)أنظمتك الخاصة، عبر قناة Messages APIchannelConnectors.messagesApi.hookPath, packages/app-connectors-messages-api/src/webhooks/webhook.ts
<hookPath>/message, <hookPath>/info (POST)ChatwootchannelConnectors.chatwoot.hookPath, packages/app-connectors-chatwoot/src/webhook.ts
<hookPath>/inbound (POST)مزوّد SIP (قناتا generic SIP وSonitel SIP)channelConnectors.genericSip.hookPath, channelConnectors.sonitelSip.hookPath
/api/facebook/channels/:channelId/flows/:flowId (POST)WhatsApp، لـ WhatsApp Flowsserver/api/whatsapp-flow.js

لا يستدعي مزوّدو القنوات (Meta وTelegram وTikTok وTwilio) خادم MonoChat مباشرة، بل يستدعون مستمع webhook في omni-message الذي يمرّر الطلب إلى مسار /webhooks أعلاه. إذا كنت تشغّل omni-message بنفسك، فيجب أن يكون مستمع webhook فيه متاحًا من الإنترنت على هذه المسارات: /webhooks/meta-messenger, /webhooks/instagram-business, /webhooks/wab-cloud, /webhooks/wab-gupshup/:channelId, /webhooks/wab-360-dialog/:channelId, /webhooks/telegram-bot/:channelId, /webhooks/tiktok و/webhooks/twilio-sms/:channelId (apps/webhook-listener/src/modules/webhook-listeners/webhook-listeners.controller.ts في omni-message). ويجب أن يكون MonoChat نفسه متاحًا لـ omni-message على مسارات /webhooks أعلاه.

أنظمة الدفع​

يستدعي مزوّدو الدفع خادمك عندما يدفع العميل، ثم يعيدون العميل إلى MonoChat بعد ذلك. يجب أن يعمل الأمران من خارج شبكتك.

الموصلالمسارات تحت hookPath الخاص به (paymentSystemConnectors.<name>.hookPath)
Stripe/webhook/:clientId (POST), /return/success/:paymentSystemId, /return/cancel/:paymentSystemId
HyperPay/pay/:clientId/:paymentSystemOrderId, /result/:clientId/:paymentSystemOrderId
Mamo/webhook/:clientId (POST), /return/:clientId/:paymentSystemOrderId
Midtrans/webhook/:clientId (POST), /return/:paymentSystemOrderId
Paymob/webhook/:clientId (POST), /return/:paymentSystemOrderId
PayTabs/callback/:clientId/:paymentSystemOrderId (POST), /return/:paymentSystemOrderId
Tabby/webhook/:clientId (POST), /return/:paymentSystemOrderId/:status
Tamara/webhook/:clientId (POST), /return/:paymentSystemOrderId/:status
Tap/webhook/:clientId (POST), /return/:clientId/:paymentSystemOrderId
Telr/webhook/:clientId/:paymentSystemOrderId (POST), /return/:paymentSystemOrderId/:status
Ziina/return/:clientId/:paymentSystemOrderId/:status
iyzico/:transactionId (POST)
JCC/:status
MyFatoorahhookPath نفسه (POST), /:paymentSystemOrderId/:status (POST)
N-GeniushookPath نفسه (POST), /:paymentSystemOrderId/:status
Paywall/:paymentSystemOrderId/:status
UniqoPayhookPath نفسه (POST), /:paymentSystemOrderId/:status (POST)
VakıfBank Sanal POS/:status (GET وPOST)
İş Yerim POShookPath نفسه (GET وPOST)

القاعدة الأبسط هي فتح <hookPath> وكل ما تحته لكل موصل دفع تستخدمه. مصدر كل منها هو packages/app-connectors-<name>/src/webhook.ts.

نقاط نهاية أخرى في الخادم​

المساريُستخدم من أجلموضع التعريف
/api/:slug/custom-functions/… (POST)استدعاء دالة مخصصة عبر HTTP باستخدام رمز وصولlib/managers/custom-function-sdk/_/server/endpoint.js
/api/ai-agent/mcp, /api/ai-agent/events (POST)تشغيلات وكيل الذكاء الاصطناعي التي تبلّغ MonoChat بنتائجهاserver/api/ai-agent.ts
/api/channels-manager/facebook/auth, /api/channels-manager/tiktok/auth (GET)النافذة المنبثقة التي تعود بعد ربط حساب Facebook أو TikTokpackages/app-managers-channel/src/webhook.ts
/l/:_id (GET)الروابط القصيرة التي ترسلها إلى العملاءserver/api/short-link.js
/api/status (GET)يتحقق تطبيق الجوال من الخادم ومن خيارات تسجيل الدخول فيهserver/api/status.js
/.well-known/assetlinks.json, /.well-known/apple-app-site-association (GET)روابط التطبيقات في Android وiOSserver/api/assetlinks.js, server/api/apple-app-site-association.js

افتح /api/:slug/custom-functions و/api/ai-agent و/l/ ومساري النافذة المنبثقة للقنوات إذا كنت تستخدم هذه الميزات من خارج شبكتك. يُفتح مسارا النافذة المنبثقة للقنوات في متصفح الشخص الذي يربط الحساب، لذا يمكن إبقاؤهما مقيّدين إذا كان من يربطون القنوات هم أشخاص داخل شبكتك فقط. افتح /api/status وملفَّي /.well-known فقط إذا كان وكلاؤك يستخدمون تطبيق MonoChat للجوال من خارج شبكتك.

تسجيل الدخول عبر مزوّد (OAuth)​

عندما يعيد مزوّد تسجيل الدخول توجيه المتصفح إلى MonoChat، يكون هذا التوجيه طلب متصفح عاديًا من الشخص الذي يسجّل الدخول، لذلك يخضع للتقييد نفسه الذي يخضع له تطبيق الويب. أبقِ مسارات إعادة التوجيه متاحة للأشخاص الذين يسجّلون الدخول بهذه الطريقة. المسارات هي قيم redirectPath في public.oauth.<provider> ضمن إعدادات الخادم (الأمثلة الافتراضية هي /api/oauth/google/redirect و/api/oauth/microsoft/redirect و/api/oauth/facebook/redirect و/api/oauth/apple/redirect). يعيد تسجيل الدخول عبر Apple المتصفح بطلب POST (responseMode: form_post)، ويقبله المسار نفسه. أما لتطبيق الجوال، فيستجيب الخادم أيضًا على /api/oauth/facebook/mobile و/api/oauth/microsoft/mobile و/auth/oauth-callback/<provider> (server/configs/oauth/mobile.ts).

إذا كنت تستخدم تكامل Microsoft Marketplace، فإن المسار في microsoftMarketplace.redirectWebhookPath يستقبل طلب Microsoft Marketplace ويجب أن يكون متاحًا من الإنترنت (server/configs/microsoft-marketplace/webook.ts).

تمرير عنوان IP الحقيقي للعميل عبر الوكيل​

يسجّل MonoChat عنوان IP للعميل في الجلسات وسجلات الحالة. خلف وكيل عكسي أو موازن حمل، يرى عنوان الوكيل ما لم تمرّر العنوان الحقيقي.

  1. اجعل nginx (أو موازن الحمل) يرسل العنوان الأصلي في ترويسة X-Forwarded-For، على سبيل المثال proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;.
  2. اضبط متغير البيئة HTTP_FORWARDED_COUNT على خادم MonoChat بعدد الوكلاء الموجودين أمام التطبيق. يقرؤه إطار Meteor وليس كود MonoChat، لذلك مكانه إعدادات النشر لديك وليس ملف JSON الخاص بالإعدادات.

تحقق من إعدادك​

  1. من شبكة غير مسموح لها، افتح تطبيق الويب. يجب أن يُرفض الطلب.
  2. من شبكة مسموح لها، سجّل الدخول وافتح صندوق الوارد. يجب أن تُحمَّل الرسائل، وهذا يثبت أن نقطة نهاية WebSocket مفتوحة لك.
  3. أرسل رسالة اختبار إلى قناة متصلة من خارج شبكتك وتأكد من وصولها إلى صندوق الوارد.
  4. أنشئ رابط دفع لطلب اختباري صغير، وادفعه، وتأكد من ظهور الطلب على أنه مدفوع.
تحذير

اختبر المسارات بعد كل تغيير في قواعد الوكيل لديك. لا يظهر مسار webhook المحظور أي خطأ في MonoChat: ببساطة تتوقف الرسائل وتأكيدات الدفع عن الوصول.