To get phone call alerts from Prometheus Alertmanager or Grafana, create an Alert webhook monitor in Edesy OnCall and add its URL as a webhook receiver (Alertmanager) or a Webhook contact point (Grafana). Each firing alert opens an incident and phones the people on your escalation policy, who press 1 to acknowledge or 2 to escalate. Resolved alerts close the incident automatically. You keep your existing rules and dashboards; OnCall only adds the call.
Why add calls to Prometheus and Grafana
Alertmanager and Grafana are good at deciding that something is wrong. Getting a human to act at 2 am is a different problem. Email and chat receivers are easy to miss, and nothing escalates when nobody responds. A call-based receiver adds three things:
- A ringing phone, spoken in English or Hindi per contact
- A response: press 1 to acknowledge, press 2 to pass it on now
- An escalation ladder when nobody responds
Step 1: Create the webhook monitor
At oncall.edesy.in, go to Monitors → New, choose Alert webhook, name it ("Prod Prometheus") and pick an escalation policy. The monitor page shows a URL like:
https://oncall.edesy.in/ingest/<token>The token works as the password, so treat the URL as a secret. Rotate it from the monitor page if it leaks. OnCall needs an Edesy phone number in your workspace as the caller ID, so connect your workspace in Setup first.
Step 2a: Alertmanager receiver
Add a receiver with webhook_configs and route critical alerts to it:
# alertmanager.yml
route:
receiver: default
routes:
- matchers:
- severity="critical"
receiver: edesy-oncall
receivers:
- name: default
# your existing email or chat receiver
- name: edesy-oncall
webhook_configs:
- url: https://oncall.edesy.in/ingest/<token>
send_resolved: trueKeep send_resolved: true, so that recoveries close the incident. Route only alerts that justify waking someone; leave warnings on your existing receivers.
Full field mapping: Alertmanager ingest doc.
Step 2b: Grafana contact point
In Grafana: Alerting → Contact points → Add contact point, integration Webhook, paste the URL, method POST. Then point a notification policy at it. Or provision it:
# provisioning/alerting/contact-points.yaml
apiVersion: 1
contactPoints:
- orgId: 1
name: Edesy OnCall
receivers:
- uid: edesy-oncall
type: webhook
settings:
url: https://oncall.edesy.in/ingest/<token>
httpMethod: POSTGrafana's unified alerting payload is a superset of Alertmanager's, so OnCall reads it the same way. Details: Grafana ingest doc.
How the payload becomes a call
OnCall detects the format automatically. A payload with alerts plus Grafana fields such as orgId is read as Grafana; one with just alerts as Alertmanager. You can force it with ?format=alertmanager or ?format=grafana on the URL.
| Payload field | Used for |
|---|---|
alerts[].status (or top-level status) |
firing opens an incident; anything else resolves it |
alerts[].fingerprint |
Dedup key; repeats update one incident |
labels.alertname + instance + job |
Dedup key when no fingerprint is sent |
annotations.summary (else alertname) |
Title, read aloud on the call |
annotations.description (else message, else instance) |
Detail, in the incident and email |
So an alert with summary: "API error rate above 5%" produces: "This is an alert from Acme. Prod Prometheus is down since 2:14 AM. Reason: API error rate above 5%: ..." followed by the press-1 prompt.
Write summary annotations that make sense when spoken: short, plain, no template noise. Titles are capped at 200 characters and messages at 300.
Grouping, dedup and flapping
A single webhook delivery can carry many alerts, and each one is processed separately. Each fingerprint maps to at most one open incident, so:
- Alertmanager's repeat notifications for the same alert don't open new incidents.
- A firing → resolved → firing alert reopens only after the earlier incident is resolved.
- Once someone presses 1, no more calls go out for that incident, even if the alert keeps firing.
The monitor counts as down while any incident from that source is open, and up when all are resolved.
Use Alertmanager's group_by, group_wait and repeat_interval as usual. OnCall doesn't need special settings.
Test it without breaking production
Post a fake alert with curl:
curl -fsS -X POST https://oncall.edesy.in/ingest/<token> \
-H 'Content-Type: application/json' \
-d '{"status":"firing","alerts":[{"status":"firing","labels":{"alertname":"TestAlert","instance":"web-1"},"annotations":{"summary":"Test alert from curl"}}]}'You get 202 with the number of alerts accepted, and your phone rings. Send the same body with "resolved" to close it. Alertmanager's own test (amtool) or Grafana's Test button on the contact point also work.
The ingest endpoint is rate-limited to 120 requests a minute per IP and accepts bodies up to 1 MB.
Escalation and night calls
The webhook monitor uses a normal escalation policy: step 1 calls the primary engineer, step 2 a backup after the wait you set, with email alongside if you like. Read escalation policies explained.
Between 21:00 and 09:00 IST, a workspace on the standard calling window gets a plain spoken alert without press 1; acknowledge by email or in the dashboard. Edesy support can enable 24x7 press-1 calls. See night mode.
What it costs
| Plan | Price | Monitors | Contacts |
|---|---|---|---|
| Free | Rs 0 | 3 | 2 |
| Starter | Rs 499/month | 20 | 5 |
| Pro | Rs 1,499/month | 100 | 25 |
One webhook monitor can carry every alert from an Alertmanager. Alert calls are billed per minute from your Edesy wallet; prices exclude 18% GST. See pricing.
More: the Prometheus and Grafana use case, the Grafana integration and Alertmanager integration pages, and the OnCall overview. Using Uptime Kuma instead? See Uptime Kuma phone call notifications.
OnCall alerts by call and email only; it doesn't post to Slack or Teams or send SMS.
FAQ
Can Alertmanager make a phone call?
Not by itself. Alertmanager sends webhooks. Point a webhook receiver at an Edesy OnCall alert webhook URL and OnCall turns each firing alert into a phone call to the people on your escalation policy.
Do resolved alerts close the incident?
Yes, if your tool sends them. Keep send_resolved: true in Alertmanager; Grafana sends resolved notifications by default. A resolved alert with the same fingerprint closes the matching incident.
Will a flapping alert call me again and again?
No. Alerts with the same fingerprint update one open incident instead of opening new ones. Once someone presses 1, escalation stops for that incident.
Do webhook monitors count towards my plan?
Yes. Each alert webhook URL is one monitor. One webhook can carry many alerts from Alertmanager or Grafana, so most teams need only one or two.
Start free with 3 monitors at oncall.edesy.in.