UptimeMonitoring.com
Menu
Reliability guide · Pushover + Cloudflare Workers

Wake up when production breaks: Pushover via Cloudflare Workers

Browser push and email both get silently dropped by Do Not Disturb during sleep — exactly when an outage matters most. Pushover emergency priority bypasses DND on iOS and Android, retries every 30s for 30 min, and requires acknowledgement. Wire it to Monitive webhooks via a 50-line Cloudflare Worker. Setup: 5 minutes.

Runtime: Cloudflare Workers More runtimes coming soon

Quick start

Three steps from zero to a phone notification on every outage.

  1. 1

    Sign up with Pushover

    $5 one-time per platform (iOS or Android). You'll also need the Pushover app on your phone and a free Cloudflare account (full prerequisites in the markdown version of this guide).

    Pushover sign-up →
  2. 2

    Deploy the bridge to Cloudflare Workers

    Set PROVIDER and your provider credentials (PUSHOVER_TOKEN, PUSHOVER_USER) as Wrangler secrets — see the Deploy commands below — then run npx wrangler deploy.

    Deploy to Cloudflare Workers →
  3. 3

    Connect Monitive and set the signing secret

    Open a monitor → Webhooks → set the URL to your bridge URL. Monitive issues a signing secret — copy it and set it on the bridge as MONITOR_WEBHOOK_SECRETS (it applies live, no redeploy).

    Open Monitive →

Deploy commands

Terminal View source
git clone https://github.com/uptimemonitoring/alerts-bridge
cd alerts-bridge && npm install

# 1. Set provider secrets, then deploy
npx wrangler secret put PROVIDER                 # enter: pushover
npx wrangler secret put PUSHOVER_TOKEN           # from pushover.net/apps
npx wrangler secret put PUSHOVER_USER            # from pushover.net dashboard
npx wrangler deploy

# 2. Register the printed Worker URL in Monitive (monitor → Webhooks),
#    then set the signing secret it issues (applies live, no redeploy):
npx wrangler secret put MONITOR_WEBHOOK_SECRETS

After wrangler deploy, copy the worker URL and set it as the webhook destination in Monitive. Monitive then shows a signing secret — set it on the bridge with wrangler secret put MONITOR_WEBHOOK_SECRETS (applies live, no redeploy).

Pushover details

Emergency alerts that bypass Do Not Disturb

How emergency priority works

When a monitor goes down, the bridge sends Monitive's webhook payload to Pushover with priority=2 (emergency). This causes the Pushover app to:

  • Bypass Do Not Disturb on iOS and Android
  • Repeat the alert every 30 seconds for up to 30 minutes
  • Require you to open the app and acknowledge before retries stop

When the monitor recovers (monitor.up), the bridge sends a normal priority=0 notification — no retries, no DND override.

Pricing

Pushover charges $5 once per platform (iOS or Android). That's a one-time payment — no subscription, no per-alert cost. The bridge itself runs on Cloudflare Workers' free tier (100k requests/day). Total recurring cost: $0.

Verify DND bypass before an incident

After setup, enable DND on your phone, then trigger a test webhook from Monitive. The Pushover app should ring and vibrate through it. If it doesn't, go to Pushover → Settings → Override Do Not Disturb and confirm the toggle is on. On iOS, also add Pushover under System Settings → Focus → Allowed Apps.

More information

Pushover API documentation →

Troubleshooting

Common failure modes and how to fix them.

Webhook never fires
Cause: Monitive cannot reach the bridge URL, or the monitor has no webhook configured.
Fix: Open the monitor in Monitive and check its webhook delivery log. Confirm the bridge URL is reachable from the public internet.
Bridge returns 401 Unauthorized
Cause: MONITOR_WEBHOOK_SECRETS on the bridge does not match the signing secret Monitive issued for this monitor.
Fix: Copy the signing secret from the monitor → Webhooks section in Monitive, then re-run npx wrangler secret put MONITOR_WEBHOOK_SECRETS with that exact value (no trailing whitespace).
Bridge returns 500
Cause: Provider credentials are missing or malformed.
Fix: Check Cloudflare Workers logs in the dashboard. Confirm all required secrets are set: PROVIDER=pushover, PUSHOVER_TOKEN, PUSHOVER_USER, MONITOR_WEBHOOK_SECRETS.
Phone rings but Do Not Disturb is not bypassed
Cause: Pushover app DND override is not enabled, or iOS Focus allowlist is missing.
Fix: Open the Pushover app → Settings → Override Do Not Disturb. On iOS, also add Pushover to your Focus allowlist under System Settings → Focus.

Why we built this

Monitive's own admin alerts — account suspensions, capacity events, kill-switch flips — run through the same bridge you're about to deploy. Same template, same provider, same code. The "we use this ourselves" line isn't a marketing claim; it's the literal setup.

We open-sourced it because a 50-line bridge shouldn't be behind a paywall or buried in a vendor integration. Audit the code before you trust it with your alerts. MIT license. No telemetry, no vendor lock-in.