Messages
A message is a push notification sent to a group of users. The Messages section is where you create campaigns: one-time and scheduled broadcasts with flexible audience and content settings.
Message statuses
Each message goes through several statuses. Understanding statuses helps you track what stage a broadcast is at.
Message is saved but not sent. Saved as a historical artifact in some scenarios.
Message is waiting for the specified time. Automatically transitions to sending when the worker polls the queue (every 15 seconds).
Worker is actively dispatching notifications. Audience is split into batches of 500 subscribers.
All batches have been processed. Delivery is complete — analytics are available.
Message was manually cancelled before or during sending.
Creating a message
Click "Create message" in the toolbar. The form consists of three blocks.
Block 1: Audience
Determines who will receive the notification.
All active subscribers of the app will receive the notification (all browsers with permission). Use for important general announcements.
Select one or more Include segments (who receives) and, if necessary, Exclude segments (who to exclude). Audience = union of Include minus intersection with Exclude.
Block 2: Notification content
Choose the content source: manually or from a template.
TitleYesNotification title. Recommended up to 60 characters — long titles are truncated by the browser.BodyYesNotification body. Up to 120–200 characters depending on the platform.URLNoThe page that opens when the notification is clicked. If not specified — the app homepage opens.ImageNoURL of the image displayed in the notification (large photo). Supported in Chrome and Edge on desktop. Recommended size: 1080×565.TagNoSlug string for grouping notifications in the browser. A notification with the same tag replaces the previous one.From template
Switch the source to "From template" and select the desired template from the list. The Title, Body, URL, Image, and Tag fields will be filled automatically from the template and will not be editable. To change content — create a new template or edit the existing one.
Template variables
Any text field in a message supports dynamic variables that are substituted by the worker at send time. This allows URLs, titles, and notification tags to be unique for each campaign.
{{ title }}Message titleURL, image, tag{{ sendDate }}Send date in YYYY-MM-DD formatURL, tag{{ messageId }}Unique message IDURL, tag{{ tag.KEY }}Value of user tag KEY — unique for each recipientURL, tag// URL — UTM tags with campaign name and date:
https://example.com/promo?utm_campaign={{ title }}&utm_content={{ messageId }}&date={{ sendDate }}
// Tag — unique for each broadcast (notifications don't replace each other):
{{ messageId }}
// Tag — fixed (repeat broadcast replaces previous unread):
promo{{ messageId }} as a tag gives each broadcast a unique tag — notifications from different campaigns will not replace each other in the user's browser. Conversely, a fixed tag (e.g. promo) means a repeat broadcast will replace the previous unread notification.Personal variables from user tags
In addition to campaign variables, URLs and other fields can use individual user tags — values stored in each specific subscriber's profile. Syntax:
{{ tag.KEY }}— substitutes the value of tag KEY for each recipient individuallyAt send time, the worker replaces the variable with the tag value for that specific user. Each recipient sees their own personalized link.
Example: abandoned product view
When a user views a product, your site records a tag. You can see it in Users → user profile → Tags block:
// Tag is set automatically by your site
// when the user views a product page.
//
// In Users → user profile → Tags you will see:
//
// Key Value
// dropped_view_product_url /products/iphone-15-pro
// last_category electronicsIn the "Click URL" field of the template, specify the variable:
// "Click URL" field in the message template:
https://example.com{{ tag.dropped_view_product_url }}The worker substitutes the tag value for each user:
// User user-42 (tag = "/products/iphone-15-pro"):
→ https://example.com/products/iphone-15-pro
// User user-99 (tag = "/products/samsung-s24"):
→ https://example.com/products/samsung-s24
// User user-01 (tag not set):
→ https://example.com ← empty string instead of variableWhere user tags are configured
Tags are stored in each user's profile and managed from the Users section:
- Add tag — "+" button in the block header → enter key and value.
- Edit — "⋮" button next to the tag → "Edit" → change key or value → Save.
- Delete — "⋮" button → "Delete".
Block 3: Send mode
The message is immediately queued and begins delivering to active subscribers. Status instantly becomes sending.
Specify a future date and time. The message gets scheduled status and will be sent automatically at the specified moment. A scheduled message can be cancelled before it transitions to sending.
Preview
The creation form shows a live preview of the notification — how it will look on the user's device (with title, body, and URL). Check it before sending.
Message analytics
On the detail page of each sent message, the delivery funnel is available:
Number of subscribers for whom delivery was attempted.
Notification was successfully received by the browser (push server returned 200/201).
User clicked on the notification.
Delivery failed (expired endpoint, network error).
Clicked ÷ Delivered × 100%. Audience engagement metric.
Cancelling a scheduled message
Open the detail page of a message in scheduled status and click "Cancel". Once it transitions to sending status, cancellation is not possible — delivery has already begun.
Related sections
Create segments in advance to use them in the "By segments" field.
Create message templates for reusable campaign content.
If UTM parameters are enabled, they are automatically added to the URL of all notifications sent from this app.