Chuyển tới nội dung chính

Giới hạn bản cài đặt on-premise theo IP

Trang này dành cho người vận hành bản cài đặt MonoChat on-premise. Trang giải thích cách giới hạn ứng dụng web trong mạng của riêng bạn ở cấp mạng (nginx hoặc tường lửa) mà không chặn các dịch vụ bắt buộc phải gọi MonoChat từ internet.

MonoChat không có danh sách IP cho phép riêng. Việc giới hạn nằm ở nginx, bộ cân bằng tải hoặc tường lửa của bạn và áp dụng cho toàn bộ bản cài đặt, không phải cho một tổ chức riêng lẻ.

Những gì cần giới hạn, những gì cần để mở​

Chỉ cho phép từ mạng của bạnCho phép truy cập từ internet
Ứng dụng web và mọi thứ không được liệt kê ở cột bên phảiCác đường dẫn webhook và callback trong các bảng bên dưới
Điểm cuối DDP/WebSocket mà ứng dụng web kết nối tới (/websocket)

Hãy giới hạn giao diện web và điểm cuối WebSocket cùng nhau: ứng dụng dùng cả hai. Với những người còn lại, chỉ cho phép các đường dẫn bên dưới và chặn phần còn lại.

Các đường dẫn mà dịch vụ bên ngoài gọi đến​

Mọi đường dẫn bên dưới đều do máy chủ MonoChat đăng ký. Đường dẫn được tạo từ một cài đặt là hookPath bạn đã cấu hình trên máy chủ (trong channelConnectors.<name> hoặc paymentSystemConnectors.<name> trong cài đặt máy chủ); phần hậu tố do mã thêm vào. Chỉ mở các trình kết nối bạn sử dụng.

Kênh​

Đường dẫnĐược gọi bởiĐịnh nghĩa tại
<hookPath>/webhooks (POST)omni-message, cho WhatsApp Cloud, WhatsApp Gupshup, Instagram, Messenger, Telegram, TikTok, Twilio SMS và Varan OTPpackages/app-connectors-om2-*/src/webhooks/webhook.ts; hookPath from channelConnectors.whatsappBusinessVegaCloud, whatsappBusinessVegaGupshup, instagramCastor, messengerRigel, telegramBotRegulus, tikTokTimir, twilioSms, varanOtp
<hookPath>/webhooks, <hookPath>/sessions, <hookPath>/messages (POST)Hệ thống của riêng bạn, thông qua kênh 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)Nhà cung cấp SIP (các kênh generic SIP và Sonitel SIP)channelConnectors.genericSip.hookPath, channelConnectors.sonitelSip.hookPath
/api/facebook/channels/:channelId/flows/:flowId (POST)WhatsApp, cho WhatsApp Flowsserver/api/whatsapp-flow.js

Các nhà cung cấp kênh (Meta, Telegram, TikTok, Twilio) không gọi trực tiếp MonoChat. Họ gọi webhook listener của omni-message, và listener chuyển tiếp đến đường dẫn /webhooks ở trên. Nếu bạn tự chạy omni-message, webhook listener của nó phải truy cập được từ internet trên các đường dẫn sau: /webhooks/meta-messenger, /webhooks/instagram-business, /webhooks/wab-cloud, /webhooks/wab-gupshup/:channelId, /webhooks/wab-360-dialog/:channelId, /webhooks/telegram-bot/:channelId, /webhooks/tiktok và /webhooks/twilio-sms/:channelId (apps/webhook-listener/src/modules/webhook-listeners/webhook-listeners.controller.ts trong omni-message). Bản thân MonoChat phải truy cập được từ omni-message trên các đường dẫn /webhooks ở trên.

Hệ thống thanh toán​

Nhà cung cấp thanh toán gọi lại khi khách hàng thanh toán, và sau đó đưa khách hàng quay lại MonoChat. Cả hai đều phải hoạt động từ bên ngoài mạng của bạn.

Trình kết nốiCác đường dẫn dưới hookPath của nó (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
MyFatoorahchính hookPath (POST), /:paymentSystemOrderId/:status (POST)
N-Geniuschính hookPath (POST), /:paymentSystemOrderId/:status
Paywall/:paymentSystemOrderId/:status
UniqoPaychính hookPath (POST), /:paymentSystemOrderId/:status (POST)
VakıfBank Sanal POS/:status (GET và POST)
İş Yerim POSchính hookPath (GET và POST)

Quy tắc đơn giản nhất là mở <hookPath> và mọi thứ bên dưới nó cho từng trình kết nối thanh toán bạn sử dụng. Mỗi nguồn là packages/app-connectors-<name>/src/webhook.ts.

Các điểm cuối máy chủ khác​

Đường dẫnDùng đểĐịnh nghĩa tại
/api/:slug/custom-functions/… (POST)Gọi một custom function qua HTTP bằng access tokenlib/managers/custom-function-sdk/_/server/endpoint.js
/api/ai-agent/mcp, /api/ai-agent/events (POST)AI agent chạy xong báo kết quả về MonoChatserver/api/ai-agent.ts
/api/channels-manager/facebook/auth, /api/channels-manager/tiktok/auth (GET)Cửa sổ bật lên trả về sau khi kết nối tài khoản Facebook hoặc TikTokpackages/app-managers-channel/src/webhook.ts
/l/:_id (GET)Liên kết ngắn mà bạn gửi cho khách hàngserver/api/short-link.js
/api/status (GET)Ứng dụng di động kiểm tra máy chủ và các tùy chọn đăng nhập của nóserver/api/status.js
/.well-known/assetlinks.json, /.well-known/apple-app-site-association (GET)Liên kết ứng dụng Android và iOSserver/api/assetlinks.js, server/api/apple-app-site-association.js

Hãy mở /api/:slug/custom-functions, /api/ai-agent, /l/ và hai đường dẫn cửa sổ bật lên của kênh nếu bạn dùng các tính năng đó từ bên ngoài mạng của mình. Các đường dẫn cửa sổ bật lên của kênh được mở trong trình duyệt của người đang kết nối tài khoản, nên có thể giữ ở trạng thái bị giới hạn nếu chỉ những người trong mạng của bạn kết nối kênh. Chỉ mở /api/status và hai tệp /.well-known nếu nhân viên của bạn dùng ứng dụng di động MonoChat từ bên ngoài mạng.

Đăng nhập bằng nhà cung cấp (OAuth)​

Khi một nhà cung cấp đăng nhập chuyển hướng trình duyệt về MonoChat, đó là một yêu cầu trình duyệt thông thường từ người đang đăng nhập, nên tuân theo cùng giới hạn như ứng dụng web. Hãy giữ các đường dẫn chuyển hướng truy cập được đối với những người đăng nhập theo cách này. Các đường dẫn là giá trị redirectPath trong public.oauth.<provider> trong cài đặt máy chủ (các ví dụ mặc định là /api/oauth/google/redirect, /api/oauth/microsoft/redirect, /api/oauth/facebook/redirect và /api/oauth/apple/redirect). Đăng nhập Apple đưa trình duyệt quay lại bằng POST (responseMode: form_post), và cùng đường dẫn đó chấp nhận yêu cầu này. Với ứng dụng di động, máy chủ còn phản hồi /api/oauth/facebook/mobile, /api/oauth/microsoft/mobile và /auth/oauth-callback/<provider> (server/configs/oauth/mobile.ts).

Nếu bạn dùng tích hợp Microsoft Marketplace, đường dẫn trong microsoftMarketplace.redirectWebhookPath nhận yêu cầu từ Microsoft Marketplace và phải truy cập được từ internet (server/configs/microsoft-marketplace/webook.ts).

Chuyển IP thật của máy khách qua proxy​

MonoChat ghi lại IP máy khách cho các phiên và nhật ký trạng thái. Phía sau reverse proxy hoặc bộ cân bằng tải, nó chỉ thấy địa chỉ của proxy trừ khi bạn chuyển địa chỉ thật đi.

  1. Cấu hình nginx (hoặc bộ cân bằng tải của bạn) gửi địa chỉ gốc trong header X-Forwarded-For, ví dụ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;.
  2. Đặt biến môi trường HTTP_FORWARDED_COUNT trên máy chủ MonoChat bằng số proxy đứng trước ứng dụng. Biến này do framework Meteor đọc, không phải mã MonoChat, nên nó thuộc về cài đặt triển khai của bạn chứ không phải JSON cài đặt.

Kiểm tra cấu hình của bạn​

  1. Từ một mạng không được phép, hãy mở ứng dụng web. Yêu cầu phải bị từ chối.
  2. Từ một mạng được phép, đăng nhập và mở hộp thư. Tin nhắn phải tải được, điều này chứng tỏ điểm cuối WebSocket đang mở cho bạn.
  3. Gửi một tin nhắn thử đến một kênh đã kết nối từ bên ngoài mạng của bạn và xác nhận tin nhắn đến hộp thư.
  4. Tạo liên kết thanh toán cho một đơn hàng thử nhỏ, thanh toán và xác nhận đơn hàng hiển thị là đã thanh toán.
cảnh báo

Hãy kiểm tra các đường dẫn sau mỗi lần thay đổi quy tắc proxy. Đường dẫn webhook bị chặn sẽ không hiển thị lỗi trong MonoChat: tin nhắn và xác nhận thanh toán chỉ đơn giản là ngừng đến.