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.
Copy
PNG
PDF
⋯
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
◀ Preference, Consent and Override Policy
All views
Event to Delivered Email ▶