Ograniczanie instalacji lokalnej (on-premise) według adresu IP
Ta strona jest przeznaczona dla administratorów lokalnej instalacji MonoChat. Wyjaśnia, jak ograniczyć aplikację internetową do własnych sieci na poziomie sieci (nginx lub zapora sieciowa), nie blokując usług, które muszą łączyć się z MonoChat z internetu.
MonoChat nie ma własnej listy dozwolonych adresów IP. Ograniczenie jest ustawiane w nginx, load balancerze lub zaporze sieciowej i dotyczy całej instalacji, a nie pojedynczej organizacji.
Co ograniczyć, a co pozostawić otwarte
| Ogranicz do swoich sieci | Pozostaw dostępne z internetu |
|---|---|
| Aplikacja internetowa i wszystko, czego nie ma na liście po prawej | Ścieżki webhooków i callbacków z poniższych tabel |
Punkt końcowy DDP/WebSocket, z którym łączy się aplikacja internetowa (/websocket) |
Ogranicz interfejs internetowy i punkt końcowy WebSocket razem: aplikacja korzysta z obu. Dla pozostałych użytkowników zezwól tylko na poniższe ścieżki, a resztę zablokuj.
Ścieżki, z których korzystają usługi zewnętrzne
Każda poniższa ścieżka jest rejestrowana przez serwer MonoChat. Ścieżka zbudowana z ustawienia to skonfigurowany na serwerze hookPath (w channelConnectors.<name> lub paymentSystemConnectors.<name> w ustawieniach serwera); sufiks dodaje kod. Otwórz tylko te konektory, z których korzystasz.
Kanały
| Ścieżka | Wywoływana przez | Zdefiniowana w |
|---|---|---|
<hookPath>/webhooks (POST) | omni-message, dla WhatsApp Cloud, WhatsApp Gupshup, Instagram, Messenger, Telegram, TikTok, Twilio SMS i Varan OTP | packages/app-connectors-om2-*/src/webhooks/webhook.ts; hookPath z channelConnectors.whatsappBusinessVegaCloud, whatsappBusinessVegaGupshup, instagramCastor, messengerRigel, telegramBotRegulus, tikTokTimir, twilioSms, varanOtp |
<hookPath>/webhooks, <hookPath>/sessions, <hookPath>/messages (POST) | Twoje własne systemy, przez kanał 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) | Dostawca SIP (kanały generic SIP i Sonitel SIP) | channelConnectors.genericSip.hookPath, channelConnectors.sonitelSip.hookPath |
/api/facebook/channels/:channelId/flows/:flowId (POST) | WhatsApp, dla WhatsApp Flows | server/api/whatsapp-flow.js |
Dostawcy kanałów (Meta, Telegram, TikTok, Twilio) nie łączą się bezpośrednio z MonoChat. Łączą się z webhook listenerem omni-message, który przekazuje żądania do powyższej ścieżki /webhooks. Jeśli sam uruchamiasz omni-message, jego webhook listener musi być dostępny z internetu pod tymi ścieżkami: /webhooks/meta-messenger, /webhooks/instagram-business, /webhooks/wab-cloud, /webhooks/wab-gupshup/:channelId, /webhooks/wab-360-dialog/:channelId, /webhooks/telegram-bot/:channelId, /webhooks/tiktok i /webhooks/twilio-sms/:channelId (apps/webhook-listener/src/modules/webhook-listeners/webhook-listeners.controller.ts w omni-message). Sam MonoChat musi być dostępny dla omni-message pod powyższymi ścieżkami /webhooks.
Systemy płatności
Dostawcy płatności wywołują callback, gdy klient zapłaci, a następnie odsyłają klienta z powrotem do MonoChat. Oba mechanizmy muszą działać spoza Twojej sieci.
| Konektor | Ścieżki pod jego 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 | sam hookPath (POST), /:paymentSystemOrderId/:status (POST) |
| N-Genius | sam hookPath (POST), /:paymentSystemOrderId/:status |
| Paywall | /:paymentSystemOrderId/:status |
| UniqoPay | sam hookPath (POST), /:paymentSystemOrderId/:status (POST) |
| VakıfBank Sanal POS | /:status (GET i POST) |
| İş Yerim POS | sam hookPath (GET i POST) |
Najprościej otworzyć <hookPath> i wszystko pod nim dla każdego używanego konektora płatności. Źródłem każdego z nich jest packages/app-connectors-<name>/src/webhook.ts.
Pozostałe punkty końcowe serwera
| Ścieżka | Do czego służy | Zdefiniowana w |
|---|---|---|
/api/:slug/custom-functions/… (POST) | Wywoływanie funkcji niestandardowej przez HTTP z tokenem dostępu | lib/managers/custom-function-sdk/_/server/endpoint.js |
/api/ai-agent/mcp, /api/ai-agent/events (POST) | Uruchomienia agenta AI raportujące z powrotem do MonoChat | server/api/ai-agent.ts |
/api/channels-manager/facebook/auth, /api/channels-manager/tiktok/auth (GET) | Okno podręczne, które wraca po połączeniu konta Facebook lub TikTok | packages/app-managers-channel/src/webhook.ts |
/l/:_id (GET) | Krótkie linki wysyłane klientom | server/api/short-link.js |
/api/status (GET) | Aplikacja mobilna sprawdza serwer i dostępne opcje logowania | server/api/status.js |
/.well-known/assetlinks.json, /.well-known/apple-app-site-association (GET) | Linki aplikacji dla Androida i iOS | server/api/assetlinks.js, server/api/apple-app-site-association.js |
Otwórz /api/:slug/custom-functions, /api/ai-agent, /l/ i dwie ścieżki okien podręcznych kanałów, jeśli korzystasz z tych funkcji spoza swojej sieci. Ścieżki okien podręcznych kanałów otwierają się w przeglądarce osoby łączącej konto, więc mogą pozostać ograniczone, jeśli kanały łączą tylko osoby z Twojej sieci. Otwórz /api/status i dwa pliki /.well-known tylko wtedy, gdy Twoi agenci korzystają z aplikacji mobilnej MonoChat spoza Twojej sieci.
Logowanie przez dostawcę (OAuth)
Gdy dostawca logowania przekierowuje przeglądarkę z powrotem do MonoChat, przekierowanie jest zwykłym żądaniem przeglądarki osoby, która się loguje, więc podlega temu samemu ograniczeniu co aplikacja internetowa. Pozostaw ścieżki przekierowań dostępne dla osób logujących się w ten sposób. Ścieżki to wartości redirectPath w public.oauth.<provider> w ustawieniach serwera (domyślne przykłady to /api/oauth/google/redirect, /api/oauth/microsoft/redirect, /api/oauth/facebook/redirect i /api/oauth/apple/redirect). Logowanie przez Apple odsyła przeglądarkę metodą POST (responseMode: form_post), którą ta sama ścieżka akceptuje. Dla aplikacji mobilnej serwer odpowiada też na /api/oauth/facebook/mobile, /api/oauth/microsoft/mobile i /auth/oauth-callback/<provider> (server/configs/oauth/mobile.ts).
Jeśli korzystasz z integracji Microsoft Marketplace, ścieżka z microsoftMarketplace.redirectWebhookPath odbiera żądanie Microsoft Marketplace i musi być dostępna z internetu (server/configs/microsoft-marketplace/webook.ts).
Przekazywanie prawdziwego adresu IP klienta przez proxy
MonoChat zapisuje adres IP klienta dla sesji i logów statusu. Za reverse proxy lub load balancerem widzi adres proxy, dopóki nie przekażesz prawdziwego.
- Skonfiguruj nginx (lub load balancer), aby wysyłał oryginalny adres w nagłówku
X-Forwarded-For, na przykładproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;. - Ustaw na serwerze MonoChat zmienną środowiskową
HTTP_FORWARDED_COUNTna liczbę serwerów proxy przed aplikacją. Odczytuje ją framework Meteor, a nie kod MonoChat, więc należy do ustawień wdrożenia, a nie do pliku JSON z ustawieniami.
Sprawdź konfigurację
- Z sieci, która nie jest dozwolona, otwórz aplikację internetową. Dostęp musi zostać odrzucony.
- Z dozwolonej sieci zaloguj się i otwórz skrzynkę odbiorczą. Wiadomości muszą się załadować, co potwierdza, że punkt końcowy WebSocket jest dla Ciebie otwarty.
- Wyślij wiadomość testową do podłączonego kanału spoza swojej sieci i sprawdź, czy dotarła do skrzynki odbiorczej.
- Utwórz link płatności dla małego zamówienia testowego, opłać go i sprawdź, czy zamówienie jest oznaczone jako opłacone.
Przetestuj ścieżki po każdej zmianie reguł proxy. Zablokowana ścieżka webhooka nie powoduje błędu w MonoChat: wiadomości i potwierdzenia płatności po prostu przestają docierać.