Channels
A channel is a delivery method for a notification. A campaign picks one or more channels; the SDK call site never references them. Each channel has its own configuration and its own template — but the same orchestrator output drives all channels of a single campaign.TL;DR
- Notification Center — in-app widget, real-time via real-time stream. Available today.
- Email — transactional + marketing email, written into the codebase, scheduled to ship next.
- Channel choice is per campaign, not per call. Adding email to an existing campaign is a dashboard change.
Notification Center (in-app)
The Notification Center is the in-app widget channel — a bell icon with an unread badge and a dropdown list of notifications. It’s available through three SDKs that wrap the same widget:React
NotifizzInbox component.Angular
<notifizz-bell> standalone component.Vanilla JS
createNotifizz() API.What it provides
- Default UI — bell + dropdown out of the box, zero styling required.
- Custom bell — replace the default with your own component while Notifizz manages data and state.
- Headless mode — skip the bell entirely, build a fully bespoke notification UI from the SDK’s state stream.
- Real-time delivery — new messages appear the moment they’re written.
Real-time delivery for the widget uses the real-time stream listener — the widget subscribes to the user’s notification document, the backend delivers new messages to the inbox. The dashboard activity log uses SSE for a different concern — don’t confuse the two.
State model
All NC SDKs expose the sameNotifizzState object:
| Property | Type | Description |
|---|---|---|
isReady | boolean | Widget loaded and authenticated. |
isOpen | boolean | Dropdown is open. |
unreadCount | number | Current unread count. |
lastUpdated | number | Timestamp (ms) of the last state change. |
hasError | boolean? | true if an auth or network error occurred. |
errorCode | string? | Error identifier when hasError is true. |
notificationConfig (a stored email template), the orchestrator builds the recipient list, the email channel processor renders the template and dispatches.
Customer-facing setup
- Sender identity — verify a sending domain (DKIM / SPF / DMARC); configure the From address in the dashboard.
- Template editor — the same dashboard editor that powers NC templates, with email-specific blocks (subject, preheader, …).
- Tracking — open / click events report back via Postmark inbound webhooks and feed the campaign’s stats funnel.
Email is wired in the codebase but the queue dispatch path is not flipped on yet. The docs describe the customer-facing surface as it will ship. Track the docs gap audit for status.
One campaign, multiple channels
A single campaign can pick more than onenotificationConfig step — for example, an in-app NC message and an email. The orchestrator resolves recipients once; each channel processor renders its own template against the same recipient list. There is no duplicate orchestration, no double counting in stats.
Future channels
Push notifications and SMS are on the roadmap. The shape stays the same: a campaign step picks anotificationConfig whose channelType determines the dispatcher. Adding a new channel to an existing campaign will be a dashboard change.
FAQ
Can I send the same campaign to NC and email at the same time?
Can I send the same campaign to NC and email at the same time?
Yes — once email ships. Add an email step to the campaign alongside the NC step. The orchestrator resolves recipients once; both channels deliver to that list with their own templates.
My email template renders fine in preview but never lands in inboxes.
My email template renders fine in preview but never lands in inboxes.
Most likely the email queue dispatch hasn’t shipped yet (see the Note above). Until then, treat email-channel campaigns as Editing. Once dispatch flips on, deliverability problems usually trace to the sending domain not having DKIM/SPF set up — verify in the dashboard.
Can I bring my own email provider (SendGrid, Postmark, …)?
Can I bring my own email provider (SendGrid, Postmark, …)?
Not at launch. The built-in dispatcher uses Notifizz’s provider so deliverability is handled for you. BYO-provider is on the longer-term roadmap.
Where do open / click events show up?
Where do open / click events show up?
On each delivery’s stats funnel and on the campaign’s aggregated metrics. The widget reports NC
read / opened / clicked directly via POST /v1/notification/event/register; email reports the same shape via inbound webhooks. See delivery history & stats.Why isn't `client.send(...)` an option anymore?
Why isn't `client.send(...)` an option anymore?
client.send() and the direct NC track route were removed — they let the call site bypass the orchestrator entirely, which contradicts the event-driven model. Channels are a campaign decision now, not a call-site one.What's the latency from `track()` to the bell badge updating?
What's the latency from `track()` to the bell badge updating?
Acceptance is millisecond-fast. End-to-end depends on orchestrator complexity. Simple campaigns (no enricher) deliver in under a second; campaigns with cold enrichers can take a few seconds. The widget receives the inbox write the moment it commits.
See also
Notification Center overview
Lifecycle, state model, custom bell, headless mode.
How Notifizz works
The event-driven pipeline, end to end.
Frontend quickstart
Render the NC widget in five minutes.
Authentication
How users authenticate to the widget.