demo · v140
Missed Call Flow
When the user doesn't pick up, the ring notification times out and the SW posts a missed-call follow-up — different scenario, different actions. Step through the timeline; each marker fires the corresponding notification API call so you can watch the state machine.
+0s
incoming call notification fires — scenario: incoming-call
+15s
still ringing — vibrate pattern repeats
+30s
no accept — close ring notification, fire missed-call notification (scenario: default), badge unread
+later
user taps notification — open call history, prepare callback action
// 30s timer — fired if no accept came in.
self.registration.getNotifications({ tag: "call-" + id })
.then(ns => ns.forEach(n => n.close()));
self.registration.showNotification("Missed call from Lawrence", {
tag: "missed-" + id,
scenario: "default",
body: "Tap to call back",
badge: "/icons/missed.png",
actions: [
{ action: "callback", title: "Call back" },
{ action: "text", title: "Text" },
],
});
why split the scenarios
A missed-call follow-up shouldn't ring — it's an FYI. Filing it under the same scenario as the original ringer would make it disrespectful of do-not-disturb and re-trigger the ring loop. Splitting the lifecycle into "ring" and "missed" keeps each notification's behaviour appropriate to the moment.
see also
- Incoming Call Notifications — feature index