Email notifications — what you'll receive
send-email-notification.worker.ts via emailService.sendNotificationAlert. Per-event email + owner fan-out + per-type unsubscribe link. Ad Fatigue email digest (daily/weekly).
Written By Salvatore Sinigaglia
Last updated About 5 hours ago
send-email-notification.worker.ts via emailService.sendNotificationAlert. Per-event email + owner fan-out + per-type unsubscribe link. Ad Fatigue email digest (daily/weekly).
Email notifications — what you'll receive
Wevion sends most notification emails per event (real-time, not batched). Backed by
send-email-notification.worker.tsviaemailService.sendNotificationAlert(). Direct user + owner fan-out (ifuser.owner_idexists). Per-type unsubscribe link in every email points to${frontendUrl}/settings/personal/notifications?unsubscribe=${notificationType}. Failures non-blocking. One batched exception exists: the Ad Fatigue email digest (daily + weekly), sent by a dedicated cron (creative-fatigue.service.tssendFatigueDigests(), every 24h, lock ID 100112; weekly only on Mondays UTC).
Who is this for
Anyone wondering what email notifications Wevion sends, when, from whom, and how to manage them.
Per-event delivery (with one digest exception)
Each qualifying notification triggers one email. There is no general email digest that batches all notification types — meaning:
- No batched daily / weekly email summary of general alerts
- No "10 events combined into one email"
- Every alert that passes your preferences → one email
The one exception is the Ad Fatigue email digest: a dedicated daily (and weekly, on Mondays) batched email of creative-fatigue findings, sent by its own cron (creative-fatigue.service.ts sendFatigueDigests()), separate from the per-event path.
For general batched summaries: use Telegram digest (ntf-106).
How delivery works
- Notification event triggers in backend (e.g. campaign disapproved)
- Policy engine evaluates preferences → if email enabled for this type × user → enqueue
- SQS message routed to
send-email-notification.worker.ts - Worker calls
emailService.sendNotificationAlert() - Email sent via plugin
12.email.ts(typically AWS SES / Mailgun / similar) - If
user.owner_idexists: owner also gets email (with implicit "Team: [memberName]" context)
Failure (provider error, invalid address): event recorded; worker doesn't retry indefinitely (typical SQS retry pattern with DLQ).
Email content
Each email includes:
- Subject:
[Wevion] {Notification Type}or similar - Body: notification message + severity + context
- Entity link:
entityUrl = ${frontendUrl}/backoffice/${entity_type}s/${entity_id}— click to open the relevant entity in Wevion - Unsubscribe link:
${frontendUrl}/settings/personal/notifications?unsubscribe=${notificationType}— clicking unsubscribes from this specific type (not all emails)
Branded HTML template + plain-text fallback.
Owner fan-out
If you're a team member (e.g. mediabuyer) with user.owner_id set to your team owner:
- Direct notifications go to you (your email)
- AND to your owner (their email)
This lets owners stay informed of team activity. Owner can disable in their own preferences.
If you're an owner: you receive your team members' notifications by default (per ROLE_DEFAULTS for owner role).
Unsubscribe per type
Each email's unsubscribe link is per-notification-type, not all-emails:
${frontendUrl}/settings/personal/notifications?unsubscribe=${notificationType}
Click → opens Wevion settings → toggles email channel off for that specific notification type.
To unsubscribe from ALL emails: visit /settings/personal/notifications directly → toggle email channel off across all types.
Who sends
- From address: typically
noreply@wevion.ai(varies per deployment) - Reply-to: typically not monitored (use support channels for replies)
- Email domain: workspace's configured domain (
apps/backend/src/plugins/external/12.email.ts)
Allowlist noreply@wevion.ai in your email provider's spam filter to ensure delivery.
What notification types email by default
Per ROLE_DEFAULTS matrix in apps/backend/src/lib/notification-defaults.ts:
Override via /settings → Notifications.
When email is the right channel
Email's strengths: durable, searchable, shareable. Weakness: slower than push / Telegram.
Email vs in-app
For critical alerts you may want both. For high-frequency types: maybe in-app only to avoid email overload.
Bounces + invalid addresses
If user.email is missing or invalid:
- Worker skips email send for that user
- Other channels still attempted (in_app, telegram, push)
- No bounce-retry mechanism (admin / user fixes email in profile)
Privacy
Email recipients see:
- Your
user.email(the address) - The notification content (subject + body)
- Entity link (opens Wevion — requires login)
Email does NOT include:
- Other users' notifications
- Cross-team data
- Sensitive tokens / secrets (output is sanitized server-side via similar mechanism to Wavo's
sanitizeToolOutput)
Common questions
Why am I getting so many emails?
Your role + per-type defaults trigger emails for many notification types. Disable specific types via /settings → Notifications or click unsubscribe in any email.
Why am I getting emails for someone else's actions?
Owner fan-out: you're an owner; team member actions notify you. Disable in your preferences.
Why didn't I get an email I expected?
Check: preferences (email channel enabled for this type?), spam folder, user.email correct, role default doesn't enable email for this type.
Can I get daily / weekly email digest?
Not as a general summary of all notification types — those arrive per event. The one batched email is the Ad Fatigue digest (daily, plus weekly on Mondays), covering creative-fatigue findings only. For a broader batched summary, use the Telegram digest (ntf-106).
Can I forward Wevion emails to my team?
Yes (standard email forward). But beware: forwarded emails leave Wevion's auth scope; the entityUrl link requires Wevion login.
Can I reply to a notification email?
Typically no (noreply@ address). For support: open ticket via Wevion Help Center or via Wavo (create_support_ticket tool).
Common issues
- No emails received: check
user.email, spam folder, allowlistnoreply@wevion.ai, verify preferences - Too many emails: disable specific types via
/settings → Notificationsor unsubscribe link in any email - Unsubscribe link broken: very rare; report to support; meanwhile manage via
/settings → Notificationsdirectly - Email with sensitive token / secret visible: should not happen (sanitization). If observed: report immediately as security concern
- Owner / member separate emails for same event: by design (owner fan-out); owner can disable
FAQ
Who does Wevion send notification emails from?
Wevion sends from noreply@wevion.ai (the exact address varies per deployment), using the workspace's configured email domain via the 12.email.ts plugin. The reply-to is typically unmonitored, so use support channels for replies. To ensure delivery, allowlist noreply@wevion.ai in your email provider's spam filter.
Does unsubscribing stop all Wevion emails?
No. Each email's unsubscribe link is per-notification-type — it points to /settings/personal/notifications?unsubscribe= and toggles the email channel off only for that specific type. To stop every email, visit /settings/personal/notifications directly and turn the email channel off across all notification types.
What happens if my email address is invalid?
If your user.email is missing or invalid, Wevion's send-email-notification.worker.ts skips the email send for you, while other channels (in-app, Telegram, push) are still attempted. There is no bounce-retry mechanism, so you or an admin must correct the email address in your profile to resume email delivery.
Which channel keeps a durable, searchable record of alerts?
Email. Wevion emails are near-instant and persist in your inbox until you delete them, making them ideal for archiving important events, compliance trails, and users without Telegram. In-app notifications persist in notification_inbox_item but rely on ~30s polling; for critical alerts you may want both channels enabled.