intermediatenotification Featured
Multi-Channel Notification Router
Route alerts and notifications through the right channel (email, Teams, SMS, push) based on urgency, recipient preferences, and business hours. Always reach the right person at the right time.
Views35
BPMN 2.0On this page
Visual Flow
Rendering diagram…
When to Use This Pattern
Use multi-channel notification when:
- Important alerts are missed because they're buried in email
- Different situations require different urgency levels (a system outage should not arrive the same way as a weekly report)
- Recipients have different communication preferences (some prefer email, others Teams or SMS)
- Your workflows notify people outside of business hours and need to reach them through appropriate channels
How It Works
| Urgency | Channel | When | Example |
|---|---|---|---|
| 🔴 Critical | SMS + Phone call + Teams | Immediately, 24/7 | System down, security breach |
| 🟠 High | Teams message + Email | Immediately, business hours | Approval overdue, SLA warning |
| 🟡 Medium | Within 1 hour | New task assigned, status update | |
| 🟢 Low | Digest email | Daily/weekly summary | FYI updates, reports ready |
Implementation Guide
Step 1: Define the Channel Priority Matrix
Create a configuration table:
| Urgency | Primary Channel | Fallback Channel | Escalation Channel | Max Delay |
|---|---|---|---|---|
| Critical | SMS | Phone call | Manager SMS | 0 minutes |
| High | Teams | SMS (after 30 min no ack) | 5 minutes | |
| Medium | Teams (if opted in) | — | 60 minutes | |
| Low | Digest queue | — | — | End of day |
Step 2: Collect Recipient Preferences
Let users set their notification preferences:
| Preference | Options |
|---|---|
| Primary channel | Email / Teams / SMS / Push |
| Quiet hours | e.g., 10 PM – 7 AM |
| Quiet hours override | Critical alerts bypass quiet hours |
| Digest preference | Daily at 8 AM / Weekly on Monday |
| Phone number | For SMS and phone call channels |
| Teams handle | For direct Teams messages |
Step 3: Build the Notification Engine
FUNCTION send_notification(recipient, message, urgency):
prefs = get_preferences(recipient)
channels = get_channels_for_urgency(urgency)
// Check quiet hours
IF is_quiet_hours(recipient) AND urgency != "critical":
queue_for_delivery(recipient, message, prefs.quiet_hours_end)
RETURN
// Send via primary channel
primary = prefs.primary_channel OR channels.primary
send(primary, recipient, message)
// For high+ urgency: set up escalation
IF urgency IN ["critical", "high"]:
schedule_escalation(
delay: channels.escalation_delay,
action: send(channels.fallback, recipient, message)
)
Step 4: Implement Each Channel
| Channel | Implementation |
|---|---|
| Standard send email action. Include full details. | |
| Teams | Post adaptive card to user's chat or team channel. Include action buttons (Acknowledge, View Details). |
| SMS | Twilio, Azure Communication Services, or carrier API. Keep under 160 characters with a link. |
| Phone call | Twilio voice API or escalation to on-call rotation. For true emergencies only. |
| Push notification | Mobile app push via Firebase or Azure Notification Hub. |
| Digest queue | Accumulate messages in a queue, batch-send per schedule. |
Step 5: Track Delivery and Acknowledgement
| Event | Action |
|---|---|
| Sent | Log delivery timestamp and channel |
| Delivered | Confirm delivery (read receipt, webhook confirmation) |
| Acknowledged | Recipient clicked "Acknowledge" or replied |
| Not acknowledged | After timeout, escalate to fallback channel |
| Bounced/failed | Try fallback channel immediately |
Example: Production Incident Alert
- Monitoring system detects API response time > 5 seconds
- Urgency classified as Critical
- On-call engineer receives: SMS (immediate) + Teams DM (immediate)
- After 5 minutes with no acknowledgement: Phone call to on-call
- After 10 more minutes: SMS to backup on-call + Teams post to #incidents channel
- Once acknowledged: Email with full details sent to broader team
Tips & Best Practices
Warning
Notification fatigue is real. If you send critical alerts too often, people start ignoring them. Reserve the most aggressive channels (SMS, phone) for truly critical events that happen rarely.
- Respect quiet hours. Waking someone up at 3 AM for a medium-priority notification will make them disable notifications entirely. Only break quiet hours for critical alerts.
- Include actionable content. Every notification should answer: What happened? What do I need to do? How do I do it? Include a direct link to take action.
- Deduplicate. If the same event triggers multiple times in 5 minutes, send one notification with a count, not five separate messages.
- Measure and tune. Track open rates and acknowledgement times per channel. If Teams messages get acknowledged 3x faster than email, encourage users to make Teams their primary.