Documentation

Delivery health

How Payghaam turns raw provider failures into actionable, deduplicated issues in the notification manager.

The problem

Every channel fails differently — APNs returns reasons like InvalidProviderToken, FCM returns messaging/registration-token-not-registered, SMTP and SMS gateways return their own codes. Raw, those are noise. Payghaam normalizes them so you see problems with fixes, not a log of opaque strings.

Normalized categories

Every failure is classified into one category and a scope:

CategoryMeansRetried?
CONFIGCredentials/setup wrong — the whole channel is down (e.g. bad APNs key).No
TOKENOne device's token or address is invalid/expired.No
RATEThe provider throttled us.Yes
PROVIDER_DOWN5xx / timeout / connection — transient, provider-side.Yes
PAYLOADMessage too large or malformed.No
CONSENTOpted out / capped — a skip, not an error.No

Terminal failures (bad token, bad config, bad payload) are not retried — there's no point burning attempts on a dead end. The category and machine code are stored on each MessageDelivery alongside the raw provider reason.

Issues, not a firehose

Identical failures roll up into a single issue, deduplicated on (project, channel, code), with an occurrence count. Five thousand InvalidProviderToken failures become one critical issue showing ×5000 — not five thousand notifications.

  • Critical — a channel-wide config error; the channel is effectively down.
  • Warning — provider outages, throttling, or a spike in dead device tokens.
  • Info — a few dead tokens or consent skips (normal background noise).

Auto-resolution

Issues clean themselves up. A circuit breaker tripping opens a provider-down issue; its recovery resolves it. A successful send clears channel-wide config issues (you fixed the key). Device-level issues clear as tokens refresh. You can also snooze or resolve any issue manually.

Not just push

The same pipeline covers event ingestion (a backed-up buffer) and journeys (a step erroring), so one surface shows every operational problem across push, email, SMS, events, and automations.

The notification manager

Open issues appear in the top-bar bell (with a live count), a persistent banner for critical problems, and the full Notifications page — each with a plain-language hint and a deep link to the fix (e.g. straight to channel settings).

info

Note

Alerts are in-app today. The notifier is pluggable — email and Slack/webhook delivery can be added without changing how issues are detected or rolled up.