Loading patterns…
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.
Rendering diagram…
Use multi-channel notification when:
| 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 |
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 |
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 |
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)
)
| 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. |
| 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 |
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.