-
Notifications
You must be signed in to change notification settings - Fork 0
Notification Preferences
Notification Preferences are how an individual user tells Piro where to reach them personally — as opposed to Triggers (called "Integrations" in the admin panel), which are shared team-level channels attached to alert configs. Preferences are what escalation actually delivers to when a user is on-call.
| Integrations (Triggers) | Notification Preferences | |
|---|---|---|
| Scope | Shared, team-wide | Personal, per-user |
| Configured from | Configuration → Triggers | Profile → Notification Preferences |
| Used for | Alert configs dispatch to these channels directly | Escalation Policies notify the on-call user through these |
| Channels available | Email, Telegram, Twilio SMS, Opsgenie, Pushover, Ntfy | Email, Telegram, Twilio SMS, Ntfy |
Some personal channels share credentials with an Integration — e.g. a personal Telegram preference still needs a Telegram Integration configured somewhere (bot token), because that's where the platform-level credentials live. Email is the exception: it's self-sufficient from the user's own address, no Integration required.
| Field | Type | Description |
|---|---|---|
| Channel | PersonalNotificationChannel |
Email, Telegram, TwilioSms, or Ntfy
|
| IntegrationId | int? | Required for channels that need shared platform credentials (Telegram, TwilioSms, Ntfy). Not needed for Email |
| Handle | string | The personal identifier for this channel — email address, Telegram chat ID, phone number, etc. |
| Priority | int | Dispatch order; lower fires first (1 before 2) |
| VerifiedAt | datetime? | Null until the user confirms a one-time code sent to Handle. Escalation dispatch skips unverified preferences
|
| IsAccountFallback | bool | True only for the automatically created Email preference mirroring the account email — always present, reorderable, but never deletable, and its handle stays in sync automatically when the account email changes |
Source: UserNotificationPreference.cs, PersonalNotificationChannel.cs
Adding (or changing the handle of) a preference requires a one-time verification code before it becomes usable:
- Add the channel and its handle.
- Piro sends a one-time code to that handle (email inbox, Telegram chat, SMS, etc.).
- Enter the code to confirm —
VerifiedAtis set.
VerifiedAt is reset to null whenever Handle changes, so a typo'd or updated handle can never silently absorb a real page without being re-confirmed.
Preferences are tried in ascending Priority order (1 first, then 2, and so on) when a user needs to be notified. If dispatch to the top-priority channel fails, Piro moves to the next one — giving you a fallback chain rather than a single point of failure (e.g. try Telegram first, fall back to SMS, fall back to Email).
Reorder preferences via drag-and-drop from the Profile page — this simply rewrites the Priority values.
Profile → Notification Preferences
Add channels, verify them with the one-time code, and drag to reorder priority. This is a personal page — every user manages their own preferences independently of what Integrations exist at the team level.
- Always keep at least one verified preference — an on-call user with zero verified channels effectively cannot be paged, even with a correct Escalation Policy pointing at their schedule.
- Put the fastest, most reliable channel for you personally at priority 1. SMS or a push channel like Ntfy typically beat email for urgency.
- Re-verify after changing a handle (e.g. a new phone number) — the system will prompt for this automatically since
VerifiedAtresets. - The auto-created Email fallback preference can be reordered to a lower priority, but cannot be removed — treat it as your guaranteed last-resort channel.
- Triggers — shared team-level notification channels used by alert configs
- Escalation Policies — how on-call notifications are triggered, which then dispatch through these preferences
- Alerts — what ultimately drives a notification being sent