UniFi Protect doorbell ring notifications on your phone
Get a Highest-priority push notification the moment someone presses your UniFi Protect doorbell, with a button to open the event clip.
How it works
- 01
Install the recipe
One click in Studio gives you a personal webhook URL.
- 02
Paste your URL into UniFi Protect
Add it as a webhook for Doorbell Ring.
- 03
Get a push on your phone
With the text, sound and buttons from the recipe.
How to set up the UniFi Protect doorbell ring webhook
- Click Install in Studio and sign in. The recipe is added to your account and you get a personal webhook URL.
- In UniFi Protect, go to Settings > Alarm Manager and click Add Alarm.
- Set the trigger to Doorbell Ring and select your doorbell(s).
- Under actions, add a Webhook with method POST and paste your webhook URL as the URL.
https://••••••••/•••••••• your personal URL, shown after install - Save the alarm, then press Test to send a sample event.
- Alarm Manager sends every alarm to the same webhook shape. This recipe only reacts when the alarm contains a `ring` trigger, so it stays quiet if you later point motion or smart-detection alarms at the same integration.
- The **View clip** button uses `eventLocalLink`, which only resolves on your home network (and shows a certificate warning). Away from home it won't load.
The code
// UniFi Protect → doorbell ring// Fires when someone presses the button on a UniFi Protect doorbell (G4/G5 Doorbell).//// Set this up as an Alarm Manager alarm in UniFi Protect with a "Doorbell Ring"// trigger and a Webhook action pointing at your JustPush Studio integration URL. function handleRequest(request) { const alarm = (request.body || {}).alarm // Guard: ignore anything that isn't a UniFi Protect alarm payload. if (!alarm || !Array.isArray(alarm.triggers)) { console.log("Not a UniFi Protect alarm payload — skipping") return null } // Alarm Manager sends every alarm to the same webhook, so only handle rings. const ring = alarm.triggers.find((trigger) => trigger?.key === "ring") if (!ring) { console.log(`Ignoring "${alarm.name ?? "unknown"}" alarm — no ring trigger`) return null } // UniFi timestamps are milliseconds since epoch. const rangAt = ring.timestamp ? new Date(ring.timestamp).toLocaleTimeString("en-GB", { hour: "2-digit", minute: "2-digit", }) : null // The local link only resolves on your LAN, and only when the event was recorded. const eventLink = alarm.eventLocalLink return { title: "🔔 Someone's at the door", message: rangAt ? `Your doorbell rang at ${rangAt}` : "Your doorbell rang", topic: "UniFi Protect", priority: 2, // Highest — there is a person standing at your door right now // sound: "incoming", // any of Studio's sounds, e.g. incoming, bugle, siren buttons: eventLink ? [{ cta: "View clip", url: eventLink }] : [], }}Studio calls handleRequest(request) with the incoming webhook and sends the message it returns. It's yours after install; change anything.
UniFi Protect ring webhook payload
This is what UniFi Protect sends to your URL for doorbell ring. It is a sample, trimmed to the fields recipes use.
{ "alarm": { "name": "Ring", "sources": [], "triggers": [ { "key": "ring", "device": "FAKE_MAC", "eventId": "testEventId", "timestamp": 1783505319282 } ], "eventPath": "/protect/events/event/testEventId", "conditions": [ { "condition": { "type": "is", "source": "ring" } } ], "eventLocalLink": "https://192.168.1.1/protect/events/event/testEventId" }, "timestamp": 1783505319286}UniFi Protect doorbell ring notifications: FAQ
Does this work on iPhone and Android?
Yes. Install the JustPush app from the App Store or Google Play and sign in. Every phone signed in to your account gets the notification.
Do I need to write code?
No. Install the recipe in Studio, paste your webhook URL into UniFi Protect and you are done. The code is there if you want to change the text, the sound or the buttons.
Can I change what the notification says?
Yes. After install the recipe's code is yours. Edit it in Studio and test it against the sample payload before you save.
What does it cost?
JustPush is free for 30 days. After that it's $19.99 a year, or $39.99 once. There is no extra charge for recipes.