
n8n Telegram Trigger HTTPS Webhook Error: Causes, Fixes, and Setup Guide
Quick Summary
- •Telegram requires HTTPS for all webhook URLs — HTTP and self-signed certificates are rejected outright
- •The most common causes are: wrong protocol, self-signed certs, unreachable local webhooks, and stale webhook registrations
- •Use Let's Encrypt (free) with Nginx or Caddy for production TLS termination on self-hosted n8n
- •For local development, use a paid ngrok reserved subdomain to maintain a stable HTTPS URL
- •Always delete the old webhook before registering a new one: curl -X DELETE https://api.telegram.org/bot<TOKEN>/deleteWebhook
You set up the n8n Telegram Trigger node, copy the webhook URL into Telegram Bot Settings, hit Save - and get a red error: "Invalid webhook URL". Or maybe Telegram accepts the URL but your workflow never fires. Both problems point to the same root cause: Telegram requires a public HTTPS endpoint, and getting that right with a self-hosted n8n instance is where most people get stuck.
This guide covers every common cause of the n8n Telegram Trigger HTTPS webhook error, with exact fixes, working configurations, and the setup steps that actually work for both self-hosted and cloud n8n deployments.
Why Telegram Requires HTTPS
Telegram's Bot API deliberately rejects non-HTTPS webhook URLs. This is a security measure - Telegram sends your bot a verification request containing an auth token, and if that token travels over plain HTTP, it can be intercepted. Telegram will not let you register a webhook on an HTTP URL, localhost, or any IP address.
The error you see in Telegram Bot Settings looks like this:
Bad webhook: HTTPS required
If you're running n8n locally or on a self-hosted server without a public domain, this is the first wall you hit.
The 7 Most Common Causes and Fixes
1. Using HTTP Instead of HTTPS (Most Common)
This is the #1 cause. Your n8n webhook URL starts with http:// not https://.
Fix: Switch to HTTPS. If you're running n8n behind a reverse proxy like Nginx or Caddy, configure TLS termination there. Your n8n itself can still run on HTTP internally - the reverse proxy handles the HTTPS layer and forwards to n8n over localhost.
A minimal Nginx config for n8n with HTTPS:
server { listen 443 ssl; server_name your-domain.com; ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem; location / { proxy_pass http://localhost:5678; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
After reloading Nginx, use your https://your-domain.com/webhook/... URL in Telegram.
2. Self-Signed or Invalid SSL Certificate
Even with HTTPS, Telegram rejects self-signed certificates. Your certificate must be signed by a trusted Certificate Authority.
Fix: Use Let's Encrypt (free) or buy a certificate from a trusted CA. Certbot makes Let's Encrypt setup nearly automatic:
sudo certbot --nginx -d your-domain.com
If you're on Cloudflare, enable Full (strict) SSL mode - not Flexible. Flexible SSL routes traffic over HTTP between Cloudflare and your server, which Telegram will reject.
3. Local Development with ngrok (Test Webhooks)
When you're developing locally, you can't get a real public HTTPS URL without exposing your machine. ngrok solves this by creating a temporary public HTTPS URL that tunnels to your local n8n instance.
The problem: ngrok's free tier uses a random subdomain each time you restart it (e.g., https://abc123.ngrok.io). Telegram rejects webhook URLs with ngrok.io domains because they're recognized as tunnel services. On paid plans you can reserve a subdomain.
Fix (free tier workflow):
1. Start ngrok: ngrok http 5678
2. Note the https:// URL it gives you
3. In Telegram Bot Settings, set the webhook URL to https://[random-subdomain].ngrok.io/webhook/your-path
4. After testing, delete the webhook before restarting ngrok: curl -X DELETE https://api.telegram.org/bot<TOKEN>/deleteWebhook
5. Update the URL after ngrok restarts
Fix (paid ngrok): Reserve a static subdomain and use it consistently:
ngrok http --domain=your-subdomain.ngrok.io 5678
This gives you a permanent HTTPS URL you can register once with Telegram.
4. Telegram Webhook Verification Request Not Reaching n8n
Telegram doesn't just accept any HTTPS URL. When you set a webhook, Telegram sends a GET request to your endpoint with a ?search= query parameter containing a token. Your n8n workflow must respond to this verification request with the token value in plain text.
If your workflow only activates on specific message types or doesn't have a trigger node active, Telegram's verification request gets dropped silently.
Fix: Make sure your Telegram Trigger node is activated and listening before you save the webhook URL in Telegram Bot Settings. The Telegram Trigger node listens at the webhook URL path and responds to Telegram's verification automatically.
If you're still having trouble, verify manually:
curl "https://api.telegram.org/bot<YOUR_TOKEN>/getWebhookInfo"
Look for last_error_date and last_error_message - these tell you what Telegram saw when it tried to reach your webhook.
5. Docker Network Configuration Breaking Webhook Reachability
When n8n runs inside Docker, the webhook URL Telegram uses must be reachable from outside the Docker network. If you bind n8n to 127.0.0.1:5678 inside the container but don't map the port to the host, Telegram can't reach it.
Fix: In your Docker Compose file, bind n8n to all interfaces:
services: n8n: image: n8nio/n8n ports: - "5678:5678" environment: - N8N_HOST=0.0.0.0 - WEBHOOK_URL=https://your-domain.com/
And make sure the WEBHOOK_URL environment variable is set to your public HTTPS URL - not localhost or an internal IP.
6. Wrong Webhook Path in Telegram Settings
Telegram needs the full webhook URL - including the path. If your n8n Telegram Trigger node shows:
https://your-domain.com/webhook/telegram-bot/ABC123
You must paste the entire URL into Telegram Bot Settings, not just the domain part.
Fix: Copy the webhook URL directly from the Telegram Trigger node's header in n8n and paste it verbatim into Bot Settings > General > Endpoint URL.
7. Webhook Already Set from a Previous Setup
If you previously set a different webhook URL (from another tool, ngrok, or an older n8n instance), Telegram keeps the old URL active even after you try to set a new one.
Fix: Explicitly delete the old webhook before setting a new one:
curl -X POST "https://api.telegram.org/bot<YOUR_TOKEN>/deleteWebhook"
Then set your new webhook:
curl -F "url=https://your-domain.com/webhook/path" "https://api.telegram.org/bot<YOUR_TOKEN>/setWebhook"
Step-by-Step: Setting Up Telegram Trigger with a Public Domain
If you're starting fresh and want a working setup, here is the exact sequence:
Step 1: Get a Public Domain and Point It at Your Server
Register any domain and create an A record pointing to your server's public IP. Propagation can take up to 24 hours but usually completes within minutes to a few hours.
Step 2: Set Up TLS with Let's Encrypt
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
Step 3: Configure Nginx for n8n
Set up the Nginx reverse proxy with the config shown in section 1 above. Reload Nginx: sudo nginx -s reload
Step 4: Set n8n Environment Variables
export N8N_HOST=your-domain.com
export WEBHOOK_URL=https://your-domain.com/
export N8N_PROTOCOL=https
Or add them to your Docker Compose environment block.
Step 5: Create the Telegram Trigger Workflow in n8n
1. Add the Telegram Trigger node to a new workflow
2. Select your bot token (configure in n8n Credentials)
3. Activate the workflow
4. Copy the webhook URL from the node header
5. In Telegram Bot Settings (via BotFather), set the endpoint URL to the copied URL
6. Verify with: curl https://api.telegram.org/bot<TOKEN>/getWebhookInfo
You should see url: "https://your-domain.com/..." with no last_error_date.
Step 6: Send a Test Message
Have someone send a message to your bot, or send /start via Telegram. Your n8n workflow should trigger immediately.

How n8n Queue Mode Breaks Telegram Trigger (and the Fix)
If you have Execution Mode set to Queue in your n8n settings, Telegram's webhook can time out before n8n even picks up the job. Telegram sends a webhook, n8n queues it, but Telegram never gets the acknowledgment it expects within its timeout window.
Fix: Set Execution Mode back to Regular, or increase Telegram's webhook timeout. You can also use the "Respond to Webhook" node with a synchronous response mode to acknowledge immediately:
[ Telegram Trigger ] → [ Code: ack immediately ] → [ Respond to Webhook (Immediate) ]
This sends the acknowledgment to Telegram right away, then your workflow continues processing asynchronously.
What Synta Does Differently
Building the Telegram workflow correctly requires knowing all the gotchas above. Synta's AI workflow builder can generate a working Telegram automation from a plain English description like "When I send a message to my Telegram bot, extract the text and save it to a Google Sheet". It handles the webhook setup, error handling, and node configuration automatically - so you skip the debugging cycle entirely.
You can try it at synta.io and see the full workflow generated before you even open n8n.
FAQ
Can I use Telegram Trigger with a self-signed certificate?
No. Telegram rejects self-signed certificates outright. You must use a certificate from a trusted CA like Let's Encrypt.
Does n8n cloud (n8n.io) work with Telegram Trigger?
Yes. n8n cloud gives you a public HTTPS webhook URL automatically. You just paste it into Telegram Bot Settings - no nginx, no ngrok needed.
Why does Telegram sometimes work with ngrok free but then stop?
The free ngrok subdomain changes every time you restart ngrok. Telegram keeps the old webhook URL registered. Delete the old webhook before restarting ngrok: curl -X DELETE https://api.telegram.org/bot<TOKEN>/deleteWebhook
My workflow fires once and then stops. Why?
Check if Telegram's webhook is still registered. Some errors cause Telegram to automatically unregister your webhook. Run getWebhookInfo and look for pending_updates.
Does Telegram support wildcard certificates?
Yes, Telegram accepts wildcard HTTPS certificates (e.g., *.your-domain.com).
Conclusion
The n8n Telegram Trigger HTTPS webhook error is almost always one of three things: wrong protocol (HTTP instead of HTTPS), self-signed certificate, or a webhook URL that's unreachable from the public internet. Fix those three and Telegram will register your webhook reliably.
For self-hosted n8n, use Let's Encrypt + Nginx or Caddy for TLS. For local development, use a paid ngrok subdomain or Cloudflare Tunnel. Always delete any old webhook before setting a new one, and check getWebhookInfo when debugging.
If you want to skip the setup entirely and generate a working Telegram workflow in seconds, try Synta - describe the automation you want and get a production-ready n8n workflow ready to deploy.