Notification Manager

Notification Manager

Purpose

Configure who gets alerted, on which channels, and how often — across every alert type (sensor out-of-tolerance, low battery, device offline, missed temperature checks, overdue checklists, weekly compliance reports).

Prerequisites

  • Email and SMS providers configured at the platform level.
  • Internal team members already added to the workspace (their email and phone come from their user profile).
  • For SMS: each recipient's phone number must be in international format (e.g. +61412345678). Numbers without a country code are skipped — the modal shows a ⚠ Invalid format badge.

Global Notification Rules

Four workspace-wide knobs at the top of the page:

Field What it does
Initial Alarm Threshold (minutes) How long an out-of-tolerance reading must persist before the first alert is sent. Per-device overrides can shorten or extend this. Floor: 1 minute (lower would alert on every reading).
Alarm Interval (minutes) Minimum minutes between repeat alarms for the same incident after the first alert has been sent. Floor: 1 minute.
Daily Report Time When the daily summary email is sent (workspace timezone).
Overdue Alerts Master switch for checklist-overdue escalations (checklists:notify-overdue command). When off, regular incident alerts still fire; only the overdue-checklist dispatcher is gated.

Subscribers (per Alert Type)

The Alert Types table shows every notification type, a Subscribers count badge (warning-coloured when zero), a Last Sent timestamp, and Send test + Manage buttons.

Manage opens a modal with two sections:

  • Internal Team — every workspace member is listed. Toggle Email/SMS per user. The currently-acting user is marked with a You badge.
  • External Contacts — vendors, third parties, on-call services. Name + email + phone + channel toggles. External email must be valid; external phone must parse as international when SMS is enabled.

Location scope (per subscriber)

Each row has a Locations checkbox list. Leave it empty to receive alerts for all locations; tick specific locations to scope the subscription. Hidden for Global Announcement (which is workspace-wide by design).

Send test

Each Alert Type has a Send test button that fires a sample of that alert type to the calling user's email and/or SMS using synthetic preview data. It always delivers (it's a deliberate self-targeted diagnostic) and is not affected by the global notifications-paused switch.

Zero-subscriber confirmation

If you save with no subscribers for an alert type that previously had some, a confirmation modal appears. This is a guardrail against accidentally muting critical alerts.

When notifications go live

  • Notifications are sent only for clients whose tablets ingest telemetry via the new API. Clients still on the legacy system continue to receive alerts from the legacy system, so there is no per-tenant "simulation" toggle to manage — going live is a function of being migrated to the new ingest.
  • Administrators have a single global Pause All Notifications switch (Admin → Settings) as an emergency stop during a provider outage or a false-positive event. When on, every send is logged as skipped_paused but no email or SMS goes out. It does not affect the per-type Send test button.

What gets sent where

Templates (subject + body) are managed by administrators in Admin → Monitoring → Notification Templates. Each notification type has separate email + SMS templates that can be overridden per type (not per tenant — the templates are shared across the platform).

Global Announcements

The Global Announcement type is hidden from this page because it is broadcast by administrators from the Admin → Communications → Global Notifications page, which targets all-tenants / specific-tenants / specific-users directly rather than consulting the per-tenant subscriber list.

Exporting subscribers

Use the 📥 Export subscribers CSV button (top right of the Alert Types card) to download every subscriber for this workspace as a CSV — handy for audits when staff/vendors change.

Workflow

  1. Set the Global Notification Rules (thresholds, interval, daily report time, overdue toggle) and click Save.
  2. For each Alert Type, click Manage and add the right Internal Team + External Contacts. Set channel toggles per recipient and location scope where applicable.
  3. Click Send test on a couple of high-priority types to verify the message reaches you.
  4. Re-audit subscribers monthly via the CSV export when staff change.

Connections

  • Per-incident dispatch fan-out runs via DispatchIncidentNotificationJob so telemetry ingest isn't blocked by SMS/email provider latency. The job uses WithoutOverlapping middleware per incident.
  • The Alert Types Last Sent column reads from incident_notification_attempts (every delivery attempt is logged with success/failure status).
  • Overdue Alerts toggle gates the daily checklists:notify-overdue command.
  • Notifications are dispatched only from the new-API ingest path; the legacy telemetry:ingest-live command tracks incident state but never dispatches. The global Pause All Notifications switch is the only master kill-switch for the per-incident dispatcher.

Common Mistakes

  • Saving with zero subscribers for a critical alert type — there's a confirmation modal but it's possible to click through.
  • Adding external contacts with unverified or non-E.164 phones — SMS will fail at send. The modal warns inline.
  • Expecting alerts before the client is migrated — notifications only go live once tablets ingest via the new API; until then the legacy system handles their alerts.
  • Treating Overdue Alerts as a global mute — it only gates checklist-overdue escalations, not other incident alerts.

Troubleshooting

  • "My alerts aren't arriving." Confirm this client's tablets are ingesting via the new API (notifications are gated to it), and check with your administrator that the global Pause All Notifications switch isn't on.
  • "SMS doesn't work for one user." Their phone number isn't in international format. Update their profile to +CCXXXXXXXXX.
  • "Last Sent says Never." Either the alert type has zero subscribers, or that type hasn't fired since the workspace was created.
  • "I want to remove a vendor everywhere." Download the CSV export, identify every alert type they're on, then open each one's Manage modal and remove their row.

Permissions

  • tenancy: view notifications — see this page.
  • tenancy: update notifications — change the Global Notification Rules.
  • tenancy: manage notification subscribers — add/remove subscribers per alert type.