Webhook Nodes Not Sending or Receiving Data in Locally Hosted n8n (Docker + ngrok Setup)

Describe the problem/error/question

I’m running a locally hosted n8n instance using Docker and ngrok. The setup runs correctly and the n8n editor is accessible through the ngrok public URL.

The problem occurs when I use webhook-based trigger nodes (for example, Telegram Trigger or Facebook Messenger). The node starts listening when executed, but when I send a message from the connected app, no data is received or output in n8n.

The webhook endpoint appears to be registered correctly, but the incoming requests never reach n8n.

What is the error message (if any)?

No explicit error message.
The webhook nodes show “listening for requests”, but nothing is received.

Please share your workflow

Share the output returned by the last node

No output is returned because the webhook is not receiving any data.

Information on your n8n setup

    1. n8n version: 1.116.2
    2. Database: Postgres (Docker service)
    3. n8n EXECUTIONS_PROCESS: own (default)
    4. Running n8n via: Docker + ngrok
    5. Operating system: macOS (Apple Silicon, ARM64)

Additional details

  • ngrok and n8n are running in separate containers on the same Docker network.

  • ngrok exposes http://n8n_app:5678 to a public https://*.ngrok-free.app URL.

  • The editor loads successfully via the ngrok URL.

  • Webhook trigger nodes show as “listening” but do not react when messages are sent from external apps.

  • Verified that containers are healthy, migrations complete, and no port conflicts exist.

I plead with experts to help. I have been on this since 4:00AM and this is after 13 hours in still yet to resolve the issue

I’m no expert with ngrok, but I see that your telegram node listens on http://localhost:5678
Are you using docker compose? Then I’d suggest you set WEBHOOK_URL in your .env file to your https://*.ngrok-free.app URL.

Thank you @markup ,

I was able to resolve it yesterday. What happened is that ngrog generates 2 different domains, which is surprising. The first one is the dev domain (https://xyz-yyy-zzz.ngrok-free.app), while the other was generated when the container starts (https://xyz.ngrok-free.app). The dev domain is what the webhook uses but the one I was using was the domain generated when the container starts.

1 Like