Notification categories explained

Current UI categories, notification types, channels, severity levels, and ROLE_DEFAULTS per role.

Written By Salvatore Sinigaglia

Last updated About 5 hours ago

Current UI categories, notification types, channels, severity levels, and ROLE_DEFAULTS per role.

Notification categories explained

Wevion notification types, UI categories, and channel defaults are defined in apps/backend/src/lib/notification-defaults.ts. Each notification can flow through in_app, email, push, telegram, and policy-driven Slack delivery. Per-role defaults (ROLE_DEFAULTS) map each type Γ— channel Γ— role to enabled/disabled. Users can override per-type via /settings β†’ Notifications.

Who is this for

Anyone setting notification preferences or wondering why a specific alert arrived (or didn't). Reference page for the full notification taxonomy.

The categories

UI groups types into categories for easier preference management. Mapping from TYPE_CATEGORIES in notification-defaults.ts (visual grouping only β€” no backend logic depends on it):

CategoryTypes it covers
campaignsCAMPAIGN_DISAPPROVED, ADSET_DISAPPROVED, DELIVERY_ERROR
budgetSPEND_CAP_WARNING, BUDGET_DEPLETED, PAYMENT_ISSUE, SUBSCRIPTION_CHANGE
accountACCOUNT_STATUS_CHANGE, ACCOUNT_VERIFICATION_BLOCK, TOKEN_EXPIRING
kpiKPI_THRESHOLD_ALERT
syncSYNC_COMPLETED, SYNC_FAILED, REPORT_READY, EXPORT_READY
operationsBULK_LAUNCH_COMPLETED, RULE_EXECUTED, RULE_ACTION_FAILED, CREATIVE_JOB
creativeCREATIVE_FATIGUE
teamUSER_ADDED, TEAM_MEMBER_REMOVED
systemSYSTEM
strategySTRATEGIC_PLAN_STEP

Setting preferences at category-level toggles all types within. Per-type granularity also available.

Notification types

Verified set from notification-defaults.ts:

Account + auth

  • ACCOUNT_STATUS_CHANGE β€” ad account status changed (disabled, restricted, recovered)
  • ACCOUNT_VERIFICATION_BLOCK β€” account blocked pending verification
  • TOKEN_EXPIRING β€” OAuth token about to expire; re-authorize needed
  • PAYMENT_ISSUE β€” Stripe payment failed or attention required
  • SUBSCRIPTION_CHANGE β€” plan changed (upgrade, downgrade, trial expiring)

Budget + spend

  • SPEND_CAP_WARNING β€” daily spend cap approaching threshold
  • BUDGET_DEPLETED β€” campaign / adset budget exhausted
  • KPI_THRESHOLD_ALERT β€” custom metric crossed configured threshold

Campaigns + delivery

  • CAMPAIGN_DISAPPROVED β€” campaign rejected by platform
  • ADSET_DISAPPROVED β€” ad set rejected
  • DELIVERY_ERROR β€” ad serving error reported by platform

Sync + operations

  • SYNC_COMPLETED β€” periodic sync finished successfully
  • SYNC_FAILED β€” sync errored
  • REPORT_READY β€” scheduled report generated
  • EXPORT_READY β€” bulk export ready for download
  • BULK_LAUNCH_COMPLETED β€” bulk campaign launch finished

Creative + automation

  • CREATIVE_JOB β€” Creative Hub AI generation completed
  • CREATIVE_FATIGUE β€” creative fatigue detected (frequency / CTR decay)
  • RULE_EXECUTED β€” automation rule fired
  • RULE_ACTION_FAILED β€” rule tried to act but failed

Team + system

  • USER_ADDED β€” new user added to team
  • TEAM_MEMBER_REMOVED β€” user removed from team
  • SYSTEM β€” generic system notification

Strategy

  • STRATEGIC_PLAN_STEP β€” a step in a strategic plan is ready / due

Channels

The NOTIFICATION_CHANNELS enum in notification-defaults.ts has 4 channels: in_app, email, push, telegram. Slack delivery is not part of this enum or of ROLE_DEFAULTS β€” it is handled separately by a policy-gated allowlist (see Slack subset below).

ChannelWhere it showsSetup
in_appNotification center in Wevion UIAlways on
emailInbox via noreply@wevion.aiAlways on if user.email set
pushWeb push (PWA) via VAPIDBrowser permission grant required
telegramTelegram bot DMBot link required (see ntf-104)
Slack (policy-gated)Slack channelOAuth install required (admin); fires only for the allowlisted failure event set below

No mobile push β€” web push only (VAPID, in-browser / PWA).

The 5 severity levels

SeverityVisualUse
criticalπŸ”΄Account disabled, payment failed, action urgent
highπŸ”΄Errors that affect delivery
medium🟑Warnings, threshold approaches
low🟒Routine successes, info
infoℹ️Notices, completions

Role-Based Defaults

ROLE_DEFAULTS matrix in notification-defaults.ts: for each role Γ— notification type Γ— channel = default enabled/disabled.

Example for super_admin + ACCOUNT_STATUS_CHANGE:

ChannelDefault
in_appβœ… on
emailβœ… on
push❌ off
telegramβœ… on

Example for manager (more conservative):

ChannelDefault
in_appβœ… on
email❌ off (for most types)
push❌ off
telegram❌ off

User can override defaults via preferences (see team-116 customize notifications).

Preferences precedence

For each notification β†’ channel decision:

  1. Notification policy engine evaluates event
  2. Apply team-scoped override (admin can disable team-wide)
  3. Apply user-scoped override (per-user toggle)
  4. Otherwise: ROLE_DEFAULTS for user's role
  5. Otherwise: notification-type's catalog default

First match wins.

If decision is IGNORE (user opted out): notification dropped, not enqueued.

Slack subset

Slack only fires for a conservative default event set (no success noise):

  • account.disconnected
  • account.token_expiring
  • campaign.publish_failed
  • rule.action_failed
  • sync.failed
  • billing.payment_failed
  • billing.subscription_expired

Other notification types do NOT route to Slack by default. Workspace can customize via notification_policy overrides.

Common questions

Why didn't I get a notification?

  • Check preference for that type Γ— channel at /settings β†’ Notifications
  • Check role default (admin defaults narrower than owner)
  • Check team-wide override (admin may have disabled)
  • For Telegram: verify bot link active (see ntf-104)
  • For email: check spam, verify user.email set

Why am I getting notifications for someone else's actions?

Owner fan-out: if you're the team owner, you receive notifications for team members' triggering actions (e.g. their published campaigns). Owner can disable via preferences.

Can I add custom notification types?

No. Notification types are platform-defined. Custom thresholds (e.g. KPI alerts) are configured via the Rules Engine β€” see rul-102.

Can I get notifications in real-time?

In-app: live polling (~30s).Push: instant via VAPID.Telegram: instant (SQS worker).Email: near-instant.Slack: instant.Digest (Telegram only): batched at user's preferred hour.

Common mistakes

  • Disabling all email expecting only in_app: some types only deliver via email by default
  • Expecting mobile push: not implemented; only web push (VAPID)
  • Expecting a general daily email digest: general alerts are per-event email; the only batched email is the Ad Fatigue digest (daily/weekly). Use Telegram digest for broader summaries

FAQ

What notification channels does Wevion support?

Wevion delivers notifications through five channels: in-app (the notification center, always on), email via noreply@wevion.ai, web push over VAPID (needs a browser permission grant), Telegram bot DM (needs a bot link), and Slack (needs an admin OAuth install). Each notification type can flow through any of these, governed by role defaults and your per-type preferences.

Does Wevion send mobile push notifications?

No. Wevion supports web push only, delivered over VAPID in the browser or PWA β€” there is no native mobile push app. For instant mobile-friendly alerts, connect the Telegram channel instead, which delivers notifications straight to your phone. Expecting mobile push is a common mistake noted in the notification settings.

How are notification defaults decided per role?

Wevion uses a ROLE_DEFAULTS matrix in notification-defaults.ts that maps each role Γ— notification type Γ— channel to enabled or disabled β€” manager defaults are more conservative than owner, for example. When deciding a channel, Wevion applies team overrides, then user overrides, then these role defaults, then the type's catalog default; first match wins.

Which events trigger Slack notifications?

By default Wevion routes only a conservative, failure-focused set to Slack: account disconnected, token expiring, campaign publish failed, rule action failed, sync failed, payment failed, and subscription expired. Success notifications don't create Slack noise. A workspace can customize this behavior through notification_policy overrides if it needs additional event types in Slack.