Skip to main content
How it works Product For on-call teams Integrations Blog

Webhook → phone call alerting

A ringing phone wakes someone. A chat message at 3am does not.

CallPing turns any webhook into a real phone call to the person who’s actually on call. No AI voice reading your alert text, no recorded announcement — the call itself is the alert. Setup is one webhook URL; after that, your monitoring stack does the paging.

Trigger an alert
curl -X POST \
  https://api.callping.app/api/wh/YOUR_ENDPOINT_UUID \
  -H "Content-Type: application/json" \
  -d '{"severity": "critical",
       "message": "Checkout endpoint returning 5xx"}'
# → HTTP 202 · a phone starts ringing

The 3am problem

Chat is silent at night. That’s not a bug — it’s how you configured it.

It’s 03:14. Something broke. Your monitoring tool fired a webhook, your paging channel pinged Slack, and Slack put a badge on an icon nobody is looking at. That’s not a failure of the tooling — it’s the tooling working exactly as designed. You turned notification sounds off on purpose, because if every warning-level ping buzzed your phone at night, you’d have muted the whole channel within a week.

The problem is that “quiet enough to sleep through the noise” and “loud enough to wake you for the real thing” are the same setting. You can’t tune chat notifications to solve both. Something has to be the exception — a channel that’s allowed to interrupt.

A phone call is built for exactly that. It’s the one notification type telecom infrastructure has always treated as urgent by default: it rings, it can ring through Do Not Disturb on many phones when the caller is an allowed contact, and it doesn’t get triaged into an unread badge. CallPing’s whole job is being the bridge between “my monitoring tool knows something’s wrong” and “a phone starts ringing.”

How it works

Three steps. No agent to install.

01

Your monitoring tool POSTs to a URL we give you.

Datadog, Grafana, Prometheus Alertmanager, Sentry, UptimeRobot, Cloudflare, Stripe, a curl in a cron job — anything that can make an HTTP request. We accept any method; JSON bodies are parsed into fields, and anything else — form-encoded, plain text, whatever your tool sends — is captured as the alert message. No software development kit (SDK), no agent running on your infrastructure.

02

Routing rules decide who.

A scenario matches the alert against your rules and picks an action. Match on severity, or on any other field your payload sends — environment, service name, region. Twelve operators (in, contains, starts_with, gt, exists, and more) cover most conditions. First matching rule wins; if nothing matches, the scenario’s own fallback decides — ring the on-call schedule, ring everyone, or ring the primary phone, your call.

03

The phone rings.

We queue it, dial out over SIP through our Asterisk fleet, and the phone rings. No recorded voice, no interactive voice response (IVR) menu. Answer to confirm you’ve got it, or let it go to the next step in your escalation chain if you don’t pick up.

See the full mechanic

Feature overview

Built for the on-call rotation you actually run, not a generic ticket queue.

Escalation chains

Nobody answers? It doesn’t just stop. Chain up to 10 steps: if the first call goes unanswered, wait N seconds and try the next target — a specific person, the whole on-call schedule, everyone, or a project team. The chain stops the moment someone answers or actively declines — that’s treated as acknowledged, not passed along to the next person.

On-call schedules

Weekly templates, plus real-world exceptions. Set recurring weekly hours per phone, then override individual dates for holidays, swaps, or on-call handoffs. Shifts can run to end-of-day at 24:00 for true round-the-clock coverage. Import or export a whole rotation as CSV, or manage it visually on a monthly calendar.

Content-based routing

Route on more than just severity. Match on any field your webhook sends — environment, service, region, a custom tag — using twelve operators. Database alerts go to the database rule, checkout alerts go to a different one, without rewriting your monitoring tool’s payload.

Projects and member routing

Route a specific alert to a specific team, or a specific person. Group team members into Projects — “Database on-call,” “Payments team” — and route rules to just that group, or target one named person directly. A named person always gets a fallback to the primary phone if they’re unreachable; a Project or on-call schedule with nobody actually on shift rings nobody instead — and flags the gap loudly rather than paging someone off rotation.

Answering-machine detection In progress + multi-ring handling

We’re building CallPing to catch voicemail before it quietly swallows your alert — detecting when a call has been picked up by a machine instead of a person, so it won’t get mistakenly logged as “answered.” Until that ships, a voicemail pickup counts the same as a real answer. What is live today: first-ack-wins logic on multi-target rings — whoever picks up first claims the alert and cancels the others.

Round-robin dial strategy

Fair rotation, not the same person every time. When a rule can reach more than one on-call phone, CallPing rotates who gets called first instead of always ringing the same number — useful for teams sharing incident load evenly across a shift pattern.

Multi-org and multi-owner teams

Belong to more than one team. Share ownership of one. One login can hold membership in any number of organizations, with a switcher to move between them. Any org can have more than one Owner — no single point of failure if the person who set it up is on vacation.

On-call analytics In progress

See who’s actually carrying the load. A dashboard view of answer rates and per-member call volume, so you can spot an uneven rotation before it burns someone out.

Reliability

Delivery is the product, so we didn’t put all the calls through one door.

CallPing runs on 5 registered PBX servers across 4 cloud providers, but only 3 of them currently carry a live SIP trunk and can place a call — the other 2 are held in reserve as standby. Those 3 span 2 providers and 5 SIP trunks between them, so a trunk having a bad day usually has somewhere else to go. If a trunk fails to connect a call, the next attempt automatically routes through a different server and a different trunk — a health-aware system picks a working path rather than retrying the same broken one. Calls are also routed by destination country, so we’re not forcing an international number through a carrier that doesn’t reasonably serve it.

View live status

Who actually runs this

We run our own on-call through CallPing.

CallPing started as our own paging problem, not a product idea. We built it for our support operation and ran it against our own on-call rotation in production before anyone outside our own company ever touched it. That hasn’t changed: our own 3am pages — the calls that wake one of us up — go through the exact same system you’ll be using once sign-ups open. It’s been carrying real production call traffic since March 2026 — thousands of our own on-call calls and counting. We didn’t build a demo and work backward into a pitch; we built the pager we needed ourselves, and when sign-ups open, you’ll be able to use it too.

There’s no separate “enterprise-grade” version of this. What answers our 3am is what will answer yours.

Scope, honestly

What CallPing doesn’t do.

No AI voice. No recorded messages. The call itself is the alert — there’s no text-to-speech reading your incident description, no “press 1 to acknowledge” menu. If you need the details, that’s what your monitoring tool’s dashboard is for; we just get the phone ringing.

We’re not an incident-management platform. No war rooms, no postmortem tooling, no AIOps correlation. We do one thing: turn a webhook into a phone call, reliably. If you need the rest of that surface, you already know which platforms provide it.

Do not use CallPing as the only alerting channel for life-critical or safety-critical systems. We depend on third-party SIP trunks and downstream telephone carriers, any of which can fail independently of us. Always keep a redundant alerting path sized to how much a missed alert would actually cost you.

FAQ

Common questions

What actually rings — a recorded message or a real call?
A real phone call from a CallPing caller ID. No AI voice, no recorded announcement, no IVR menu. The call itself is the alert — pick up to confirm you got it, or check your monitoring tool for the details.
Will it ring through if my phone is on Do Not Disturb?
Depends on your phone, not on us. CallPing can’t override your device’s Do Not Disturb (DND) setting directly, but many phones let you allow calls from specific contacts through DND. CallPing users save the caller-ID numbers as a contact and enable “allow calls from this contact” — a one-time step during setup.
Which monitoring tools work with CallPing?
Anything that can POST a webhook. That covers Datadog, Grafana, Prometheus Alertmanager, Sentry, UptimeRobot, Better Stack, Healthchecks.io, Stripe, GitHub Actions, a custom script running curl — if it can make an HTTP request, it works.
What stops a misbehaving alert from calling me constantly?
Two brakes, both automatic. A 60-second cooldown per phone number — the same number won’t be called twice inside 60 seconds no matter how many rules resolve to it. And a 200-calls-per-organization-per-day hard cap, so a runaway alert source can’t ring you all day. Neither needs to be configured — they’re on by default.
Is CallPing safe to use for life-critical or safety-critical systems?
No — don’t use it as your only channel for those. CallPing is operator paging: it depends on third-party SIP trunks and telephone carriers, any of which can fail independently of us. Keep a redundant alerting path appropriate to how much a missed call would actually cost.
What happens if the first person doesn’t answer?
If the rule has an escalation chain configured, CallPing waits the step’s delay and tries the next target — another person, the on-call schedule, everyone, or a project team, up to 10 steps deep. If there’s no chain configured, the call is simply logged as unanswered.
Do I need to install anything on my servers?
No. There’s no agent, no SDK, no client library. You get a webhook URL; your monitoring tool sends requests to it. Setup is copying a URL into a config field.

One webhook URL. The phone does the waking up.

Setup is a webhook URL in your monitoring tool’s alert config and one test alert to confirm the phone rings. We’re gathering interest before opening sign-ups — the button below gets you on the list.

See how it works