Grafana Alerts to Telegram with a Custom Webhook Payload

Grafana Alerts to Telegram with a Custom Webhook Payload

push.tg

Grafana'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

Get your endpoint: t.me/trafficRobot?start=tg-grafana. It takes 30 seconds, it has no ads, and it has been running since 2016.

Report Page