TradingView Webhook Not Working? 7 Checks Before You Rebuild Your Bot
A practical checklist for fixing TradingView webhook alerts that fire but never reach Telegram, Discord, or your relay.

If a TradingView webhook is not working, do not start by rewriting your bot. Start with the boring checks: alert log, webhook URL, response time, content type, target platform format, and delivery logs. Most failures are not mysterious. They are usually one bad URL, one slow endpoint, or one payload format the destination rejects.
The quick diagnosis
Open TradingView's alert log first. If the alert never fired, the problem is your alert condition. If TradingView says it fired, the problem is between TradingView and your relay. If your relay received it but Telegram or Discord did not, the problem is downstream delivery.
Use this order:
- TradingView alert log
- Relay incoming log
- Target platform response log
- Retry or failure archive
Skipping this order wastes time. You end up changing code that was never involved.
1. Check the webhook URL
TradingView only sends webhooks to public URLs over standard ports. Use HTTPS and avoid custom ports. A local URL, private IP, or tunnel that expired will look fine in the alert dialog but fail when the alert fires.
Bad signs:
http://localhost:3000/webhook
http://192.168.1.10:8080/webhook
https://old-ngrok-url.example/webhook
Use a stable HTTPS endpoint. In SignalTo, each route gets a dedicated endpoint, so you can change destinations without editing every TradingView alert.
2. Respond inside TradingView's timeout
TradingView expects the receiving server to answer quickly. If your endpoint waits while it sends to Discord, Telegram, a broker, or a database, it may time out even though your code eventually succeeds.
The safer pattern is:
- Accept the webhook.
- Return a 2xx response immediately.
- Process delivery asynchronously.
- Store attempts and failures in logs.
This is one reason a managed relay is simpler than a small self-hosted script. The script works on a quiet day, then starts dropping signals when the target platform slows down.
3. Confirm the payload format
TradingView can send plain text or JSON depending on the alert message. If your receiver expects JSON but the alert sends plain text, parsing fails before delivery starts.
A simple JSON payload:
{
"symbol": "{{ticker}}",
"price": "{{close}}",
"side": "buy",
"time": "{{time}}"
}
If you do not need structured routing, plain text is fine. If you want templates, multiple channels, or deduplication, JSON is easier to validate.
4. Discord needs a content field
Discord webhooks do not accept a raw TradingView message as a chat post. A direct Discord webhook expects a JSON object with a content field.
Correct shape:
{
"content": "BTCUSDT long at 65000"
}
If TradingView sends only:
BTCUSDT long at 65000
Discord will reject it unless a middleware wraps it. SignalTo handles that conversion so the TradingView message can stay trader-friendly.
5. Check target permissions
Telegram failures often come from bot permissions or wrong chat IDs. Discord failures often come from deleted webhook URLs or missing channel permissions.
Common cases:
- Telegram bot was removed from the group.
- Telegram chat ID changed after moving from a private chat to a group.
- Discord webhook was regenerated.
- Discord channel was archived or deleted.
The fastest fix is to send a test message from the relay dashboard, then check the exact response code.
6. Look for duplicate or delayed retries
If your endpoint returns a 5xx, TradingView may retry. That helps reliability, but it also means your receiver must be idempotent. A restarted self-hosted bot can process the same payload more than once.
Add a stable dedupe key when possible:
symbol + strategy + bar_time + side
SignalTo stores incoming events and delivery attempts separately, so one target can fail and retry without spamming every other target.
7. Keep a failure archive
The worst setup is send-and-forget. If the signal fails, you only discover it after a missed trade.
At minimum, keep:
- Raw payload
- Parsed payload
- Destination
- Response code
- Retry count
- Final status
That is the difference between guessing and debugging.
When to use SignalTo
Use a small script if you only send one low-risk alert to one chat. Use SignalTo when missed signals, duplicate messages, or delivery visibility matter. Start with TradingView webhook alerts with retry logs, or send alerts directly to Telegram and Discord.