If you've wired up n8n's Chat Trigger and pointed its widget at a public page, open dev tools and check the network tab. Your production webhook URL is sitting right there in the client-side JavaScript. Anyone can copy it and start posting to your workflow directly, from outside your site, with no rate limit and no auth in front of it.
That's not a bug in n8n — the Chat Trigger is built to be called however you wire it up, including straight from a browser. It just means a public chatbot on a public page needs something in front of it before it goes live. I didn't find that something, so I built it: ChatFlowGate.
What it actually does
Point a bot at your n8n webhook URL and ChatFlowGate becomes the only thing that ever touches it. The browser talks to ChatFlowGate; ChatFlowGate talks to n8n.
- Hidden webhook — the URL is a server-side database field, never sent to the client.
- Signed, bot-bound sessions — visitors get an HMAC-SHA256 token scoped to one bot, expiring in 24h, issued only after the parent page's origin is checked against that bot's domain allowlist.
- Rate limiting — token-bucket limits per session and per IP, tunable per bot, resolved from a trusted proxy hop so a spoofed X-Forwarded-For can't dodge it.
- SSRF guard — webhook targets are DNS-resolved and rejected if they point at loopback, private, link-local, or cloud metadata addresses, checked again at connect time, not just when you save the bot.
- Spam traps — hidden honeypot fields in the widget forms that a real visitor can't see or tab to. A bot filling them in gets a normal-looking response and nothing else happens: no webhook call, no charge.
- No message storage — chat text is never written to the database. One row per session holds IP, coarse location, browser/OS, and a message count. That's the entire analytics story.
- Streaming — n8n's reply (NDJSON, SSE, or a single JSON body) is parsed and streamed back to the widget token by token.
- Multi-tenant — bots, sessions, and API keys are scoped to a workspace, so an agency can run one bot per client from a single account, each pointed at a different n8n workflow, each with its own branding.
Try it
There's a live demo on the homepage — a real bot through the real gateway, rate limits and session tokens included, not a scripted mockup:
Embedding is one script tag:
<script src="https://www.chatflowgate.com/embed.js" data-bot="YOUR_BOT_ID" defer></script>
Free to start, no card required. It's early — a handful of real users so far — so if you build with n8n, I'd genuinely value you trying it and telling me what's missing or what breaks.
Top comments (0)