# Grafana

> Get phone calls for Grafana alerts with Edesy OnCall. Add a webhook contact point (UI or provisioning YAML), route your notification policy to it, and see how Grafana alerts become incidents.

Source: https://edesy.in/docs/oncall/ingest/grafana

Grafana's unified alerting can send alerts to Edesy OnCall through a **webhook contact point**. Firing alerts open an incident that calls your team; resolved alerts close it.

## 1. Create an alert webhook monitor

In OnCall, go to **Monitors → New**, choose **Alert webhook** and pick an escalation policy. Copy the URL from the monitor page:

```
https://oncall.edesy.in/ingest/<token>
```

## 2. Add the contact point

In Grafana: **Alerting → Contact points → Add contact point**. Set **Integration** to **Webhook**, paste the URL and keep the method **POST**. Save, then route your **notification policy** (or a nested policy for critical alerts) to this contact point.

Or provision it:

```yaml
# Grafana 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: POST
```

Use the contact point's **Test** button to check delivery.

## How alerts are mapped

OnCall recognises Grafana's payload automatically (an `alerts` array together with `orgId`, `dashboardURL` or `panelURL`). Grafana's format extends Alertmanager's, so the mapping is the same:

| OnCall field | Taken from |
|---|---|
| Firing or resolved | Each alert's `status` |
| Dedup key | `fingerprint`, or else the `alertname`, `instance` and `job` labels |
| Title (read on the call) | `annotations.summary`, else the `alertname` label |
| Message | `annotations.description`, else `annotations.message`, else the `instance` label |

Add a **Summary** to each alert rule. It is what the on-call person hears on the phone, so keep it short: "Payments DB disk above 90%".

## Responses and limits

A good delivery returns `202` with `{"data":{"accepted":N}}`. A body that isn't JSON or has no alerts returns `400 invalid_payload`, and an unknown URL returns `404`. Bodies up to 1 MB and 120 requests a minute per IP are accepted. Add `?format=grafana` to force the parser.

## FAQ

**Does Grafana's test notification call my team?**
A test notification is a firing alert, so it opens an incident and runs the policy. Point the test at a policy with just yourself in it the first time.

**Can I send only critical alerts to OnCall?**
Yes. Use a nested notification policy that matches a label such as `severity=critical` and sends to the Edesy OnCall contact point.

**Do resolved alerts close the incident?**
Yes. Grafana sends resolved notifications by default; keep them on.

See also: [Prometheus Alertmanager](https://edesy.in/docs/oncall/ingest/alertmanager), [Escalation Policies](https://edesy.in/docs/oncall/alerts/escalation-policies) and the [Grafana phone call alerts](https://edesy.in/uptime-monitoring-phone-call-alerts/integrations/grafana-phone-call-alerts) page.
