Quick flow
- Pick privacy mode (default, privacy, or default with user override).
- Edit templates for each event type (titles/bodies for default and privacy).
- Save sounds (chat/call).
How templates work
- Templates define the push title/body per event type.
- Placeholders map to event payload fields and are resolved before delivery.
- Configure in Dashboard → Notifications → Templates and Sounds; privacy toggle is under Preferences.
message.data.entities.sender.entity.name, so use {{message.data.entities.sender.entity.name}} in templates.
Templates
1. Text message templates
| Template for | Default template values | Privacy template values |
|---|---|---|
| Title (One-on-one) | {{message.data.entities.sender.entity.name}} | {{message.data.entities.sender.entity.name}} |
| Title (Group) | {{message.data.entities.sender.entity.name}} @ {{message.data.entities.receiver.entity.name}} | {{message.data.entities.sender.entity.name}} @ {{message.data.entities.receiver.entity.name}} |
| Body | {{message.data.text}} | New message |
2. Media message templates
| Template for | Default template values | Privacy template values |
|---|---|---|
| Title (One-on-one) | {{message.data.entities.sender.entity.name}} | {{message.data.entities.sender.entity.name}} |
| Title (Group) | {{message.data.entities.sender.entity.name}} @ {{message.data.entities.receiver.entity.name}} | {{message.data.entities.sender.entity.name}} @ {{message.data.entities.receiver.entity.name}} |
| Body for Image | 📷 Has sent an image | New image message |
| Body for Audio | 🔈 Has sent an audio | New audio message |
| Body for Video | 🎥 Has sent a video | New video message |
| Body for File | 📄 Has sent a file | New file message |
3. Custom message templates
| Template for | Default template values | Privacy template values |
|---|---|---|
| Title (One-on-one) | {{message.data.entities.sender.entity.name}} | {{message.data.entities.sender.entity.name}} |
| Title (Group) | {{message.data.entities.sender.entity.name}} @ {{message.data.entities.receiver.entity.name}} | {{message.data.entities.sender.entity.name}} @ {{message.data.entities.receiver.entity.name}} |
| Body | {{message.data.text}} | {{message.data.text}} |
| Body (Fallback) | New message | New message |
{{message.data.text}} in the aforementioned scenario evaluates to null or undefined, the “Body (Fallback)” value will be utilized.
Ideally, the “Body (Fallback)” value should not contain any placeholders to prevent additional resolution failures.
4. Interactive form templates
| Template for | Default template values | Privacy template values |
|---|---|---|
| Title (One-on-one) | {{message.data.entities.sender.entity.name}} | {{message.data.entities.sender.entity.name}} |
| Title (Group) | {{message.data.entities.sender.entity.name}} @ {{message.data.entities.receiver.entity.name}} | {{message.data.entities.sender.entity.name}} @ {{message.data.entities.receiver.entity.name}} |
| Body | {{data.interactiveData.title}} | New message |
5. Interactive card templates
| Template for | Default template values | Privacy template values |
|---|---|---|
| Title (One-on-one) | {{message.data.entities.sender.entity.name}} | {{message.data.entities.sender.entity.name}} |
| Title (Group) | {{message.data.entities.sender.entity.name}} @ {{message.data.entities.receiver.entity.name}} | {{message.data.entities.sender.entity.name}} @ {{message.data.entities.receiver.entity.name}} |
| Body | {{message.data.interactiveData.text}} | New message |
6. Interactive scheduler templates
| Template for | Default template values | Privacy template values |
|---|---|---|
| Title (One-on-one) | {{message.data.entities.sender.entity.name}} | {{message.data.entities.sender.entity.name}} |
| Title (Group) | {{message.data.entities.sender.entity.name}} @ {{message.data.entities.receiver.entity.name}} | {{message.data.entities.sender.entity.name}} @ {{message.data.entities.receiver.entity.name}} |
| Body | New invite | New invite |
7. Custom Interactive message templates
| Template for | Default template values | Privacy template values |
|---|---|---|
| Title (One-on-one) | {{message.data.entities.sender.entity.name}} | {{message.data.entities.sender.entity.name}} |
| Title (Group) | {{message.data.entities.sender.entity.name}} @ {{message.data.entities.receiver.entity.name}} | {{message.data.entities.sender.entity.name}} @ {{message.data.entities.receiver.entity.name}} |
| Body | New message | New message |
Dashboard configuration
Choose how templates apply to users: default, privacy, or default with user override (Privacy Setting dropdown in the dashboard).Client-side implementation
1. Fetch privacy setting Fetch/update the privacy toggle so users can opt in when allowed.- JavaScript
- Android
- iOS
- Flutter
CometChatNotifications.updatePreferences() method is used to update a user’s notification preferences. The “override” toggle defined in the dashboard is crucial when updating preferences. If any preference is non-overridable, the method doesn’t generate an error; it instead returns the NotificationPreferences object with the updated values where overrides are allowed.
Use this sparingly to avoid surprising users. Set only the preferences that changed.
- JavaScript
- Android
- iOS
- Flutter
Template tips
- Keep privacy variants generic to avoid leaking message content.
- Use
sender@groupstyle for group titles to disambiguate conversations. - Avoid placeholders in fallback text to prevent unresolved values.
Sounds
Include sound files in your app bundle and set thesound field in the push payload to the filename (omit extension if your platform expects that).
| Field | Default |
|---|---|
| Calls | default |
| Sound | default |