Event-Driven Notification Platform  ·  View 14 of 26  ·  4 · Runtime

Notification Orchestration

The seven questions asked of every event, in order, and what happens when the answer is no.

Editable source SVG draw.io All views
Should we notify?
Should we notify?
Validated event
evt.valid.p1
Validated event...
Rule match
CEL over event plus context
Rule match...
Suppression list
incident mute · tenant pause
Suppression list...
Who?
Who?
Recipient resolution
subject_ref to recipients
Recipient resolution...
Fan-out
1 event to N notifications
Fan-out...
What and where?
What and where?
Preference check
category · consent
Preference check...
Channel selection
ordered · fallback chain
Channel selection...
Template bind
code · locale · version pinned
Template bind...
When?
When?
Timing router
now · delay · cron · digest
Timing router...
Quiet-hours defer
recipient timezone
Quiet-hours defer...
Guardrails
Guardrails
Deduplication
dedup_key · 24 h window
Deduplication...
Frequency cap
per category per window
Frequency cap...
Rate limit
tenant · user · provider
Rate limit...
Suppressed
no rule · opted out · capped
Suppressed...
Dispatch
Dispatch
Notification record
CREATED to QUEUED
Notification record...
Channel topic
deliver.channel.tier
Channel topic...
duplicate
duplicate
over cap
over cap
next allowed window
next allowed window
Notification Orchestration — From Event to Dispatch Decision
Notification Orchestration — From Event to Dispatch Decision
Queue / topic
Queue / topic
Decision point
Decision point
Application we own
Application we own
Risk / gap
Risk / gap
Data store
Data store
failure / alternate
failure / alternate
event / async
event / async
Every suppression increments a labelled counter and writes a reason on the notification record. A notification that was never sent is still a notification with an answer, which is what makes the support question answerable.
Every suppression increments a labelled counter and writes a reason on the notification record. A notification that was never sent is still a notification with an answer, which is what makes the support question answerable.
v 1.0 · owner Data & AI Global Practice · date 2026-08
v 1.0 · owner Data & AI Global Practice · date 2026-08
Text is not SVG - cannot display

Decisions

  • Should notify, who, what, which channel, when, guardrails, dispatch — evaluated in that order because each stage narrows the next
  • Preference is checked before rendering, so an opted-out recipient never costs a render
  • Deduplication sits after the timing decision so that a delayed and an immediate copy of the same intent collapse

Suppression is not silence

  • Every suppression increments a labelled counter and writes a reason on the notification record
  • A notification that was never sent is still a notification with an answer — this is what makes the support question answerable
  • Suppression reasons: no rule, opted out, duplicate, over cap, quiet hours, tenant paused

Assumption

  • Rules are declarative CEL, not arbitrary code, so a tenant rule is sandboxed and its cost is bounded
  • If rules genuinely need arbitrary logic, that is a webhook callout and a different design; confirm before build