Grafana Alerts to Telegram with a Custom Webhook Payload
push.tgGrafana's default webhook sends a big JSON document, which reads badly as a chat message. The webhook contact point's Custom Payload lets you send plain readable text instead. Checked against the Grafana webhook notifier docs and the alerting source in October 2026. The custom payload is rendered as-is, with no JSON required.
Step 1: get your endpoint (30 seconds)
Open @trafficRobot in Telegram and press Start. You get an address like k3x9q@push.tg. Your endpoint is the part before the @: https://push.tg/k3x9q. Every example below uses k3x9q, so swap in your own key.
There's no bot to create, no chat_id to look up and no token to keep safe. Add @trafficRobot to a group and the group gets its own address, so the whole team sees the alerts.
Option A: webhook with a custom payload (self-hosted Grafana 12+)
Alerts & IRM → Alerting → Contact points → + Add contact point:
- Integration: Webhook
- URL:
https://push.tg/k3x9q - Optional settings → Custom Payload → Payload Template:
{{ template "default.title" . }}
{{ template "default.message" . }}Click Test, save, then route alerts to the contact point in your notification policies.
Want something shorter? Grafana's template data is available, for example:
{{ .Status }}: {{ .CommonLabels.alertname }}{{ range .Alerts }}
- {{ .Annotations.summary }}{{ end }}Grafana's docs say Custom Payload isn't generally available in Grafana Cloud yet. If you don't see it, use option B.
Option B: email contact point
If your Grafana has SMTP configured, add an Email contact point with k3x9q@push.tg as the address. Long emails are shortened in the chat. The full copy sits behind a secret link for up to 12 hours, then it's destroyed.
Tips
- One address per environment (prod and staging) keeps noisy staging alerts apart.
- "Disable resolved message" in the contact point stops the ✅ resolved follow-ups if you only want the problems.
Check that the message really arrived. push.tg answers HTTP 200 even when the key is wrong. The body says {"error":"no such user"} instead of {"ok":...}. So a green "test sent" in your tool doesn't prove delivery. Look at Telegram.
More copy-paste guides
- Claude Code, Codex and Cursor: Get a Telegram Message When Your AI Agent Finishes
- Claude Code Telegram Notification Hook
- Uptime Kuma Telegram Alerts Without a Bot Token
- Healthchecks.io Alerts to Telegram
- Proxmox Notifications to Telegram with a Webhook Target
- Home Assistant Telegram Notification Without a Bot
- n8n Error Workflow: Telegram Alert When a Workflow Fails
- Cron Job Failure Alert to Telegram (cron and systemd)
- GitHub Actions and GitLab CI Telegram Notification in One Line
- Synology NAS Email Alerts to Telegram
- Nagios Alerts to Telegram with curl
- Python: Get a Telegram Notification When Training Finishes
- How to Receive Email in Telegram Without Giving Out Your Real Address
- Send Server Alerts to Telegram with One curl Command
Get your endpoint: t.me/trafficRobot?start=tg-grafana. It takes 30 seconds, it has no ads, and it has been running since 2016.