IP দিয়ে অন-প্রিমাইজ ইনস্টলেশন সীমাবদ্ধ করুন
এই পেজটি MonoChat-এর অন-প্রিমাইজ ইনস্টলেশনের অপারেটরদের জন্য। এখানে ব্যাখ্যা করা হয়েছে কীভাবে নেটওয়ার্ক স্তরে (nginx বা ফায়ারওয়াল) ওয়েব অ্যাপ শুধু আপনার নিজের নেটওয়ার্কে সীমিত করবেন, অথচ ইন্টারনেট থেকে MonoChat-কে কল করতে হয় এমন সার্ভিসগুলো আটকে যাবে না।
MonoChat-এর নিজস্ব কোনো IP অ্যালাউলিস্ট নেই। সীমাবদ্ধতা থাকে আপনার nginx, লোড ব্যালান্সার বা ফায়ারওয়ালে এবং তা পুরো ইনস্টলেশনের ওপর প্রযোজ্য হয়, কোনো একটি ওয়ার্কস্পেসের ওপর নয়।
কী সীমাবদ্ধ করবেন, কী খোলা রাখবেন
| আপনার নেটওয়ার্কে সীমাবদ্ধ রাখুন | ইন্টারনেট থেকে পৌঁছানোর মতো রাখুন |
|---|---|
| ওয়েব অ্যাপ এবং ডানদিকে তালিকাভুক্ত নয় এমন সবকিছু | নিচের টেবিলগুলোর ওয়েবহুক ও কলব্যাক পাথ |
ওয়েব অ্যাপ যে DDP/WebSocket এন্ডপয়েন্টে সংযুক্ত হয় (/websocket) |
ওয়েব UI এবং WebSocket এন্ডপয়েন্ট একসঙ্গে সীমাবদ্ধ করুন: অ্যাপ দুটোই ব্যবহার করে। বাকি সবার জন্য শুধু নিচের পাথগুলো অনুমোদন করুন এবং অন্যগুলো ব্লক করুন।
যেসব পাথ বাইরের সার্ভিস কল করে
নিচের প্রতিটি পাথ MonoChat সার্ভার নিবন্ধন করে। কোনো সেটিং থেকে তৈরি পাথ হলো সার্ভারে আপনার কনফিগার করা hookPath (সার্ভার সেটিংসের channelConnectors.<name> বা paymentSystemConnectors.<name>-এ); সাফিক্সটি কোড যোগ করে। শুধু যে কানেক্টরগুলো ব্যবহার করেন সেগুলো খুলুন।
চ্যানেল
| পাথ | যে কল করে | যেখানে সংজ্ঞায়িত |
|---|---|---|
<hookPath>/webhooks (POST) | omni-message, WhatsApp Cloud, WhatsApp Gupshup, Instagram, Messenger, Telegram, TikTok, Twilio SMS ও Varan OTP-এর জন্য | packages/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 API চ্যানেলের মাধ্যমে | channelConnectors.messagesApi.hookPath, packages/app-connectors-messages-api/src/webhooks/webhook.ts |
<hookPath>/message, <hookPath>/info (POST) | Chatwoot | channelConnectors.chatwoot.hookPath, packages/app-connectors-chatwoot/src/webhook.ts |
<hookPath>/inbound (POST) | SIP প্রোভাইডার (জেনেরিক SIP ও Sonitel SIP চ্যানেল) | channelConnectors.genericSip.hookPath, channelConnectors.sonitelSip.hookPath |
/api/facebook/channels/:channelId/flows/:flowId (POST) | WhatsApp, WhatsApp Flows-এর জন্য | server/api/whatsapp-flow.js |
চ্যানেল প্রোভাইডাররা (Meta, Telegram, TikTok, Twilio) সরাসরি MonoChat-কে কল করে না। তারা omni-message ওয়েবহুক লিসেনারকে কল করে, যা উপরের /webhooks পাথে ফরওয়ার্ড করে। আপনি নিজে omni-message চালালে এর ওয়েবহুক লিসেনার এই পাথগুলোতে ইন্টারনেট থেকে পৌঁছানোর মতো হতে হবে: /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 (omni-message-এর apps/webhook-listener/src/modules/webhook-listeners/webhook-listeners.controller.ts)। MonoChat নিজেও উপরের /webhooks পাথগুলোতে omni-message থেকে পৌঁছানোর মতো হতে হবে।
পেমেন্ট সিস্টেম
কোনো গ্রাহক পেমেন্ট করলে পেমেন্ট প্রোভাইডাররা কলব্যাক করে এবং পরে গ্রাহককে 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 |
| MyFatoorah | hookPath নিজেই (POST), /:paymentSystemOrderId/:status (POST) |
| N-Genius | hookPath নিজেই (POST), /:paymentSystemOrderId/:status |
| Paywall | /:paymentSystemOrderId/:status |
| UniqoPay | hookPath নিজেই (POST), /:paymentSystemOrderId/:status (POST) |
| VakıfBank Sanal POS | /:status (GET ও POST) |
| İş Yerim POS | hookPath নিজেই (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) | AI এজেন্ট রান MonoChat-কে ফলাফল জানাচ্ছে | server/api/ai-agent.ts |
/api/channels-manager/facebook/auth, /api/channels-manager/tiktok/auth (GET) | Facebook বা TikTok অ্যাকাউন্ট সংযুক্ত করার পর ফিরে আসা পপ-আপ | packages/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 ও iOS অ্যাপ লিংক | server/api/assetlinks.js, server/api/apple-app-site-association.js |
এই ফিচারগুলো আপনার নেটওয়ার্কের বাইরে থেকে ব্যবহার করলে /api/:slug/custom-functions, /api/ai-agent, /l/ এবং চ্যানেলের দুটি পপ-আপ পাথ খুলুন। চ্যানেলের পপ-আপ পাথগুলো যিনি অ্যাকাউন্ট সংযুক্ত করছেন তার ব্রাউজারে খোলে, তাই শুধু আপনার নেটওয়ার্কের লোকজন চ্যানেল সংযুক্ত করলে সেগুলো সীমাবদ্ধ থাকতে পারে। আপনার এজেন্টরা নেটওয়ার্কের বাইরে থেকে MonoChat মোবাইল অ্যাপ ব্যবহার করলেই কেবল /api/status এবং দুটি /.well-known ফাইল খুলুন।
প্রোভাইডার দিয়ে সাইন-ইন (OAuth)
কোনো সাইন-ইন প্রোভাইডার ব্রাউজারকে MonoChat-এ ফেরত রিডাইরেক্ট করলে সেটি সাইন-ইনকারী ব্যক্তির সাধারণ ব্রাউজার রিকোয়েস্ট, তাই ওয়েব অ্যাপের মতো একই সীমাবদ্ধতা প্রযোজ্য। যারা এভাবে সাইন-ইন করেন তাদের জন্য রিডাইরেক্ট পাথগুলো পৌঁছানোর মতো রাখুন। পাথগুলো হলো সার্ভার সেটিংসের public.oauth.<provider>-এর redirectPath মান (ডিফল্ট উদাহরণ /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 রেকর্ড করে। রিভার্স প্রক্সি বা লোড ব্যালান্সারের পেছনে আসল ঠিকানা পাঠিয়ে না দিলে এটি প্রক্সির ঠিকানা দেখে।
- nginx (বা আপনার লোড ব্যালান্সার) যেন মূল ঠিকানা
X-Forwarded-Forহেডারে পাঠায়, যেমনproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;। - MonoChat সার্ভারে পরিবেশ ভেরিয়েবল
HTTP_FORWARDED_COUNT-এর মান অ্যাপের সামনে থাকা প্রক্সির সংখ্যা অনুযায়ী সেট করুন। এটি Meteor ফ্রেমওয়ার্ক পড়ে, MonoChat-এর কোড নয়, তাই এটি আপনার ডিপ্লয়মেন্ট সেটিংসে থাকবে, সেটিংস JSON-এ নয়।
আপনার সেটআপ যাচাই করুন
- অনুমোদিত নয় এমন নেটওয়ার্ক থেকে ওয়েব অ্যাপ খুলুন। এটি প্রত্যাখ্যাত হতে হবে।
- অনুমোদিত নেটওয়ার্ক থেকে সাইন-ইন করে ইনবক্স খুলুন। মেসেজ লোড হতে হবে, যা প্রমাণ করে WebSocket এন্ডপয়েন্ট আপনার জন্য খোলা।
- আপনার নেটওয়ার্কের বাইরে থেকে সংযুক্ত কোনো চ্যানেলে একটি টেস্ট মেসেজ পাঠান এবং নিশ্চিত করুন এটি ইনবক্সে পৌঁছেছে।
- একটি ছোট টেস্ট অর্ডারের জন্য পেমেন্ট লিংক তৈরি করুন, পেমেন্ট করুন এবং নিশ্চিত করুন অর্ডারটি পরিশোধিত দেখাচ্ছে।
আপনার প্রক্সি নিয়মে প্রতিটি পরিবর্তনের পর পাথগুলো পরীক্ষা করুন। ব্লক হওয়া ওয়েবহুক পাথ MonoChat-এ কোনো ত্রুটি দেখায় না: মেসেজ ও পেমেন্ট নিশ্চিতকরণ শুধু আসা বন্ধ হয়ে যায়।