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