Een on-premise installatie beperken op IP-adres
Deze pagina is bedoeld voor beheerders van een on-premise MonoChat-installatie. Ze legt uit hoe u de webapp op netwerkniveau (nginx of een firewall) beperkt tot uw eigen netwerken, zonder de diensten te blokkeren die MonoChat vanaf internet moeten aanroepen.
MonoChat heeft geen eigen IP-toegestanelijst. De beperking staat in uw nginx, load balancer of firewall en geldt voor de hele installatie, niet voor één enkele werkruimte.
Wat u beperkt en wat u open houdt
| Beperkt houden tot uw netwerken | Bereikbaar houden vanaf internet |
|---|---|
| De webapp en alles wat rechts niet wordt genoemd | De webhook- en callbackpaden in de onderstaande tabellen |
Het DDP/WebSocket-eindpunt waarmee de webapp verbinding maakt (/websocket) |
Beperk de web-UI en het WebSocket-eindpunt samen: de app gebruikt beide. Sta voor iedereen anders alleen de onderstaande paden toe en blokkeer de rest.
Paden die externe diensten aanroepen
Elk onderstaand pad wordt geregistreerd door de MonoChat-server. Een pad dat uit een instelling is opgebouwd, is de hookPath die u op de server hebt ingesteld (in channelConnectors.<name> of paymentSystemConnectors.<name> in de serverinstellingen); het achtervoegsel wordt door de code toegevoegd. Open alleen de connectors die u gebruikt.
Kanalen
| Pad | Aangeroepen door | Gedefinieerd in |
|---|---|---|
<hookPath>/webhooks (POST) | omni-message, voor WhatsApp Cloud, WhatsApp Gupshup, Instagram, Messenger, Telegram, TikTok, Twilio SMS en Varan OTP | packages/app-connectors-om2-*/src/webhooks/webhook.ts; hookPath uit channelConnectors.whatsappBusinessVegaCloud, whatsappBusinessVegaGupshup, instagramCastor, messengerRigel, telegramBotRegulus, tikTokTimir, twilioSms, varanOtp |
<hookPath>/webhooks, <hookPath>/sessions, <hookPath>/messages (POST) | Uw eigen systemen, via het Messages API-kanaal | 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) | De SIP-provider (kanalen Generic SIP en Sonitel SIP) | channelConnectors.genericSip.hookPath, channelConnectors.sonitelSip.hookPath |
/api/facebook/channels/:channelId/flows/:flowId (POST) | WhatsApp, voor WhatsApp Flows | server/api/whatsapp-flow.js |
De kanaalproviders (Meta, Telegram, TikTok, Twilio) roepen MonoChat niet rechtstreeks aan. Ze roepen de webhook-listener van omni-message aan, die doorstuurt naar het /webhooks-pad hierboven. Als u omni-message zelf draait, moet de webhook-listener vanaf internet bereikbaar zijn op deze paden: /webhooks/meta-messenger, /webhooks/instagram-business, /webhooks/wab-cloud, /webhooks/wab-gupshup/:channelId, /webhooks/wab-360-dialog/:channelId, /webhooks/telegram-bot/:channelId, /webhooks/tiktok en /webhooks/twilio-sms/:channelId (apps/webhook-listener/src/modules/webhook-listeners/webhook-listeners.controller.ts in omni-message). MonoChat zelf moet vanuit omni-message bereikbaar zijn op de /webhooks-paden hierboven.
Betalingssystemen
Betalingsproviders roepen een callback aan wanneer een klant betaalt en sturen de klant daarna terug naar MonoChat. Beide moeten van buiten uw netwerk werken.
| Connector | Paden onder de 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 | de hookPath zelf (POST), /:paymentSystemOrderId/:status (POST) |
| N-Genius | de hookPath zelf (POST), /:paymentSystemOrderId/:status |
| Paywall | /:paymentSystemOrderId/:status |
| UniqoPay | de hookPath zelf (POST), /:paymentSystemOrderId/:status (POST) |
| VakıfBank Sanal POS | /:status (GET en POST) |
| İş Yerim POS | de hookPath zelf (GET en POST) |
De eenvoudigste regel is om voor elke betalingsconnector die u gebruikt <hookPath> en alles daaronder te openen. Elke bron is packages/app-connectors-<name>/src/webhook.ts.
Overige serverendpoints
| Pad | Gebruikt voor | Gedefinieerd in |
|---|---|---|
/api/:slug/custom-functions/… (POST) | Een aangepaste functie via HTTP aanroepen met een toegangstoken | lib/managers/custom-function-sdk/_/server/endpoint.js |
/api/ai-agent/mcp, /api/ai-agent/events (POST) | AI-agentruns die terugrapporteren aan MonoChat | server/api/ai-agent.ts |
/api/channels-manager/facebook/auth, /api/channels-manager/tiktok/auth (GET) | Het pop-upvenster dat terugkeert na het koppelen van een Facebook- of TikTok-account | packages/app-managers-channel/src/webhook.ts |
/l/:_id (GET) | Korte links die u naar klanten stuurt | server/api/short-link.js |
/api/status (GET) | De mobiele app controleert de server en de inlogopties | server/api/status.js |
/.well-known/assetlinks.json, /.well-known/apple-app-site-association (GET) | App-links voor Android en iOS | server/api/assetlinks.js, server/api/apple-app-site-association.js |
Open /api/:slug/custom-functions, /api/ai-agent, /l/ en de twee pop-uppaden voor kanalen als u die functies van buiten uw netwerk gebruikt. De pop-uppaden voor kanalen worden geopend in de browser van de persoon die het account koppelt, dus ze kunnen beperkt blijven als alleen mensen op uw netwerk kanalen koppelen. Open /api/status en de twee /.well-known-bestanden alleen als uw medewerkers de MonoChat-mobiele app van buiten uw netwerk gebruiken.
Inloggen met een provider (OAuth)
Wanneer een inlogprovider de browser terugstuurt naar MonoChat, is die redirect een gewoon browserverzoek van de persoon die inlogt, dus er geldt dezelfde beperking als voor de webapp. Houd de redirectpaden bereikbaar voor de mensen die op deze manier inloggen. De paden zijn de redirectPath-waarden in public.oauth.<provider> in de serverinstellingen (de standaardvoorbeelden zijn /api/oauth/google/redirect, /api/oauth/microsoft/redirect, /api/oauth/facebook/redirect en /api/oauth/apple/redirect). Apple-inloggen stuurt de browser terug met een POST (responseMode: form_post), die hetzelfde pad accepteert. Voor de mobiele app beantwoordt de server ook /api/oauth/facebook/mobile, /api/oauth/microsoft/mobile en /auth/oauth-callback/<provider> (server/configs/oauth/mobile.ts).
Als u de Microsoft Marketplace-integratie gebruikt, ontvangt het pad in microsoftMarketplace.redirectWebhookPath het verzoek van Microsoft Marketplace en moet dat vanaf internet bereikbaar zijn (server/configs/microsoft-marketplace/webook.ts).
Het echte client-IP doorgeven via de proxy
MonoChat legt het client-IP vast voor sessies en statuslogs. Achter een reverse proxy of load balancer ziet het het adres van de proxy, tenzij u het echte adres doorgeeft.
- Laat nginx (of uw load balancer) het oorspronkelijke adres meesturen in de header
X-Forwarded-For, bijvoorbeeld metproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;. - Stel de omgevingsvariabele
HTTP_FORWARDED_COUNTop de MonoChat-server in op het aantal proxy's vóór de app. Ze wordt gelezen door het Meteor-framework, niet door de MonoChat-code, dus ze hoort in uw deploymentinstellingen en niet in de instellingen-JSON.
Uw configuratie controleren
- Open de webapp vanaf een netwerk dat niet is toegestaan. Dit moet worden geweigerd.
- Log in vanaf een toegestaan netwerk en open de inbox. De berichten moeten laden, wat bewijst dat het WebSocket-eindpunt voor u open staat.
- Stuur van buiten uw netwerk een testbericht naar een gekoppeld kanaal en controleer of het in de inbox aankomt.
- Maak een betaallink voor een kleine testbestelling, betaal deze en controleer of de bestelling als betaald wordt weergegeven.
Test de paden na elke wijziging aan uw proxyregels. Een geblokkeerd webhookpad geeft in MonoChat geen foutmelding: de berichten en betalingsbevestigingen komen simpelweg niet meer aan.