Preferences, Templates & Sounds
Pre-requisite
To successfully integrate notifications in your app for any particular platform, you need to make sure you are using the appropriate version of the CometChat SDK that supports notifications.
- Android SDK version 4.0.9 and above
- iOS SDK version 4.0.51 and above
- Web SDK version 4.0.8 and above
- React Native SDK version 4.0.10 and above
- Ionic Cordova SDK version 4.0.8 and above
- Flutter SDK version 4.0.15 and above
Common Preferences
Set event preferences at the CometChat app-level and decide if users have the capability to override these settings. When "Override" toggle is enabled, users will have the capability to modify the default value that has been set.
Group preferences
Dashboard configuration
As the name suggests, these preferences help you to configure Notifications for events generated in group conversations.
Categories | Events | Available preferences | Can user override? |
---|---|---|---|
Conversations | New messages |
|
|
New replies |
|
| |
Message actions | Message is edited |
|
|
Message is deleted |
|
| |
Message receives a reaction |
|
| |
Group actions | A member leaves |
|
|
A new member is added |
|
| |
A new member joins |
|
| |
A member is kicked |
|
| |
A member is banned |
|
| |
A member is unbanned |
|
| |
A member's scope changes |
|
|
Client-side implementation
Fetch group preferences
CometChatNotifications.fetchPreferences()
method retrieves the notification preferences as an instance of NotificationPreferences
class. If the user has not configured any preferences, the default preferences defined by the CometChat administrator via the dashboard will be returned.
- JavaScript
- Android
- iOS
- Flutter
// This is applicable for web, React native, Ionic cordova
const preferences = await CometChatNotifications.fetchPreferences();
// Display Group preferences
const groupPreferences = preferences.getGroupPreferences();
const groupMessagesPreference = groupPreferences.getMessagesPreference();
const groupRepliesPreference = groupPreferences.getRepliesPreference();
const groupReactionsPreference = groupPreferences.getReactionsPreference();
const memberLeftPreference = groupPreferences.getMemberLeftPreference();
const memberAddedPreference = groupPreferences.getMemberAddedPreference();
const memberJoinedPreference = groupPreferences.getMemberJoinedPreference();
const memberKickedPreference = groupPreferences.getMemberKickedPreference();
const memberBannedPreference = groupPreferences.getMemberBannedPreference();
const memberUnbannedPreference = groupPreferences.getMemberUnbannedPreference();
const memberScopeChangedPreference = groupPreferences.getMemberScopeChangedPreference();
CometChatNotifications.fetchPreferences(new CometChat.CallbackListener<NotificationPreferences>() {
@Override
public void onSuccess(NotificationPreferences notificationPreferences) {
// Display group preferences
GroupPreferences groupPreferences = notificationPreferences.getGroupPreferences();
MessagesOptions groupMessagesPreference = groupPreferences.getMessagesPreference();
RepliesOptions groupRepliesPreference = groupPreferences.getRepliesPreference();
ReactionsOptions groupReactionsPreference = groupPreferences.getReactionsPreference();
MemberActionsOptions memberAddedPreference = groupPreferences.getMemberAddedPreference();
MemberActionsOptions memberLeftPreference = groupPreferences.getMemberLeftPreference();
MemberActionsOptions memberJoinedPreference = groupPreferences.getMemberJoinedPreference();
MemberActionsOptions memberKickedPreference = groupPreferences.getMemberKickedPreference();
MemberActionsOptions memberBannedPreference = groupPreferences.getMemberBannedPreference();
MemberActionsOptions memberUnbannedPreference = groupPreferences.getMemberUnbannedPreference();
MemberActionsOptions memberScopeChangedPreference = groupPreferences.getMemberScopeChangedPreference();
}
@Override
public void onError(CometChatException e) {
// Something went wrong while fetching notification preferences
}
});
CometChatNotifications.fetchPreferences { notificationPreferences in
// Display group preferences
let groupPreferences = notificationPreferences.groupPreferences;
let groupMessages = groupPreferences?.messagesPreference;
let groupReplies = groupPreferences?.repliesPreference;
let groupReactions = groupPreferences?.reactionsPreference;
let left = groupPreferences?.memberLeftPreference;
let added = groupPreferences?.memberAddedPreference;
let joined = groupPreferences?.memberJoinedPreference;
let kicked = groupPreferences?.memberKickedPreference;
let banned = groupPreferences?.memberBannedPreference;
let unbanned = groupPreferences?.memberUnbannedPreference;
let scope = groupPreferences?.memberScopeChangedPreference;
} onError: { error in
// Something went wrong while fetching notification preferences.
print("fetchPreferences: \(error.errorCode) \(error.errorDescription)");
}
CometChatNotifications.fetchPreferences(
onSuccess: (notificationPreferences) {
// Display group preferences
GroupPreferences? groupPreferences = notificationPreferences.groupPreferences;
MessagesOptions? messagesPreference = groupPreferences?.messages;
RepliesOptions? repliesPreference = groupPreferences?.replies;
ReactionsOptions? reactionsPreference = groupPreferences?.reactions;
MemberActionsOptions? memberAddedPreference = groupPreferences?.memberAdded;
MemberActionsOptions? memberJoinedPreference = groupPreferences?.memberJoined;
MemberActionsOptions? memberLeftPreference = groupPreferences?.memberLeft;
MemberActionsOptions? memberKickedPreference = groupPreferences?.memberKicked;
MemberActionsOptions? memberBannedPreference = groupPreferences?.memberBanned;
MemberActionsOptions? memberUnbannedPreference = groupPreferences?.memberUnbanned;
MemberActionsOptions? memberScopeChangedPreference = groupPreferences?.memberScopeChanged;
},
onError: (e) {
debugPrint("fetchPreferences:error ${e.toString()}");
});
Update group preferences
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.
This functionality can be beneficial for temporarily superseding certain user preferences to ensure notifications for a specific event are delivered. Nonetheless, it is advisable to use this approach temporarily to avoid confusing users with unexpected changes to their notification settings.
It is unnecessary to specify all values; only set and save the preferences that have been changed.
Since the user is performing this action, enums have values as SUBSCRIBE
or DONT_SUBSCRIBE
. It is equivalent to "Notify" and "Don't notify" respectively, from the dashboard preferences.
- JavaScript
- Android
- iOS
- Flutter
// This is applicable for web, React native, Ionic cordova
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences.
const updatedPreferences = new NotificationPreferences();
// Instantiate the preferences that you want to update.
const groupPreferences = new GroupPreferences();
// Change group preferences
groupPreferences.setMessagesPreference(MessagesOptions.DONT_SUBSCRIBE);
groupPreferences.setRepliesPreference(RepliesOptions.DONT_SUBSCRIBE);
groupPreferences.setReactionsPreference(ReactionsOptions.DONT_SUBSCRIBE);
groupPreferences.setMemberAddedPreference(MemberActionsOptions.SUBSCRIBE);
groupPreferences.setMemberKickedPreference(MemberActionsOptions.SUBSCRIBE);
groupPreferences.setMemberJoinedPreference(MemberActionsOptions.SUBSCRIBE);
groupPreferences.setMemberLeftPreference(MemberActionsOptions.SUBSCRIBE);
groupPreferences.setMemberBannedPreference(MemberActionsOptions.SUBSCRIBE);
groupPreferences.setMemberUnbannedPreference(MemberActionsOptions.SUBSCRIBE);
groupPreferences.setMemberScopeChangedPreference(MemberActionsOptions.SUBSCRIBE);
// Load the updates in the NotificationPreferences instance.
updatedPreferences.setGroupPreferences(groupPreferences);
// Update the preferences and receive the udpated copy.
const preferences = await CometChatNotifications.updatePreferences(updatedPreferences);
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences.
NotificationPreferences updatedPreferences = new NotificationPreferences();
// Instantiate the preferences that you want to update.
GroupPreferences groupPreferences = new GroupPreferences();
// Change group preferences
groupPreferences.setMessagesPreference(MessagesOptions.DONT_SUBSCRIBE);
groupPreferences.setRepliesPreference(RepliesOptions.DONT_SUBSCRIBE);
groupPreferences.setReactionsPreference(ReactionsOptions.DONT_SUBSCRIBE);
groupPreferences.setMemberAddedPreference(MemberActionsOptions.SUBSCRIBE);
groupPreferences.setMemberKickedPreference(MemberActionsOptions.SUBSCRIBE);
groupPreferences.setMemberJoinedPreference(MemberActionsOptions.SUBSCRIBE);
groupPreferences.setMemberLeftPreference(MemberActionsOptions.SUBSCRIBE);
groupPreferences.setMemberBannedPreference(MemberActionsOptions.SUBSCRIBE);
groupPreferences.setMemberUnbannedPreference(MemberActionsOptions.SUBSCRIBE);
groupPreferences.setMemberScopeChangedPreference(MemberActionsOptions.SUBSCRIBE);
// Load the updates in the NotificationPreferences instance.
updatedPreferences.setGroupPreferences(groupPreferences);
// Update the preferences.
CometChatNotifications.updatePreferences(updatedPreferences, new CometChat.CallbackListener<NotificationPreferences>() {
@Override
public void onSuccess(NotificationPreferences notificationPreferences) {
// Updated notificationPreferences
}
@Override
public void onError(CometChatException e) {
// Something went wrong
}
});
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences.
let updatedPreferences = CometChatNotifications.NotificationPreferences();
// Instantiate the preferences that you want to update.
let groupPreferences = CometChatNotifications.GroupPreferences();
// Change group preferences
groupPreferences.set(messagesPreference: .DONT_SUBSCRIBE)
groupPreferences.set(repliesPreference: .DONT_SUBSCRIBE)
groupPreferences.set(reactionsPreference: .DONT_SUBSCRIBE)
groupPreferences.set(memberAddedPreference: .SUBSCRIBE)
groupPreferences.set(memberKickedPreference: .SUBSCRIBE)
groupPreferences.set(memberJoinedPreference: .SUBSCRIBE)
groupPreferences.set(memberLeftPreference: .SUBSCRIBE)
groupPreferences.set(memberBannedPreference: .SUBSCRIBE)
groupPreferences.set(memberUnbannedPreference: .SUBSCRIBE)
groupPreferences.set(memberScopeChangedPreference: .SUBSCRIBE)
// Load the updates in the NotificationPreferences instance.
updatedPreferences.set(groupPreferences: groupPreferences)
// Update the preferences.
CometChatNotifications.updatePreferences(updatedPreferences) { updatedPreferences in
print("updatePreferences: \(updatedPreferences)")
} onError: { error in
print("updatePreferences: \(error.errorCode) \(error.errorDescription)")
}
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences
NotificationPreferences updatedPreferences = NotificationPreferences();
GroupPreferences groupPreferences = GroupPreferences(
messages: MessagesOptions.SUBSCRIBE_TO_MENTIONS,
replies: RepliesOptions.SUBSCRIBE_TO_ALL,
reactions: ReactionsOptions.SUBSCRIBE_TO_REACTIONS_ON_ALL_MESSAGES,
memberAdded: MemberActionsOptions.SUBSCRIBE,
memberJoined: MemberActionsOptions.SUBSCRIBE,
memberLeft: MemberActionsOptions.SUBSCRIBE,
memberKicked: MemberActionsOptions.SUBSCRIBE,
memberBanned: MemberActionsOptions.SUBSCRIBE,
memberUnbanned: MemberActionsOptions.SUBSCRIBE,
memberScopeChanged: MemberActionsOptions.SUBSCRIBE,
);
updatedPreferences.groupPreferences = groupPreferences;
// Update the preferences.
CometChatNotifications.updatePreferences(updatedPreferences,
onSuccess: (preferencesAfterUpdate) {
debugPrint("updatePreferences:success");
// Use the preferencesAfterUpdate
}, onError: (e) {
debugPrint("updatePreferences:error: ${e.toString()}");
});
One-on-one preferences
Dashboard configuration
As the name suggests, these preferences help you to configure Notifications for events generated in one-on-one conversations.
Categories | Events | Available preferences | Can user override? |
---|---|---|---|
Conversations | New messages |
|
|
New replies |
|
| |
Message actions | Message is edited |
|
|
Message is deleted |
|
| |
Message receives a reaction |
|
|
Client-side implementation
CometChatNotifications.fetchPreferences()
method retrieves the notification preferences saved by the user as an instance of NotificationPreferences
class. If the user has not configured any preferences, the default preferences defined by the CometChat administrator via the dashboard will be returned.
Fetch one-on-one preferences
- JavaScript
- Android
- iOS
- Flutter
// This is applicable for web, React native, Ionic cordova
const preferences = await CometChatNotifications.fetchPreferences();
// Display One-on-One preferences
const oneOnOnePreferences = preferences.getOneOnOnePreferences();
const oneOnOneMessagesPreference = oneOnOnePreferences.getMessagesPreference();
const oneOnOneRepliesPreference = oneOnOnePreferences.getRepliesPreference();
const oneOnOneReactionsPreference = oneOnOnePreferences.getReactionsPreference();
CometChatNotifications.fetchPreferences(new CometChat.CallbackListener<NotificationPreferences>() {
@Override
public void onSuccess(NotificationPreferences notificationPreferences) {
// Display one-on-one preferences
OneOnOnePreferences oneOnOnePreferences = notificationPreferences.getOneOnOnePreferences();
MessagesOptions oneOnOneMessagesPreference = oneOnOnePreferences.getMessagesPreference();
RepliesOptions oneOnOneRepliesPreference = oneOnOnePreferences.getRepliesPreference();
ReactionsOptions oneOnOneReactionsPreference = oneOnOnePreferences.getReactionsPreference();
}
@Override
public void onError(CometChatException e) {
// Something went wrong while fetching notification preferences
}
});
CometChatNotifications.fetchPreferences { notificationPreferences in
// Display one-on-one preferences
let oneOnOnePreferences = notificationPreferences.oneOnOnePreferences;
let oneMessages = oneOnOnePreferences?.messagesPreference;
let oneReplies = oneOnOnePreferences?.repliesPreference;
let oneReactions = oneOnOnePreferences?.reactionsPreference;
} onError: { error in
// Something went wrong while fetching notification preferences.
print("fetchPreferences: \(error.errorCode) \(error.errorDescription)");
}
CometChatNotifications.fetchPreferences(
onSuccess: (notificationPreferences) {
// Display one-on-one preferences
OneOnOnePreferences? oneOnOnePreferences = notificationPreferences.oneOnOnePreferences;
MessagesOptions? oneOnOneMessagesPreference = oneOnOnePreferences?.messages;
RepliesOptions? oneOnOneRepliesPreference = oneOnOnePreferences?.replies;
ReactionsOptions? oneOnOneReactionsPreference = oneOnOnePreferences?.reactions;
},
onError: (e) {
debugPrint("fetchPreferences:error ${e.toString()}");
});
Update one-on-one preferences
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.
This functionality can be beneficial for temporarily superseding certain user preferences to ensure notifications for a specific event are delivered. Nonetheless, it is advisable to use this approach temporarily to avoid confusing users with unexpected changes to their notification settings.
It is unnecessary to specify all values; only set and save the preferences that have been changed.
- JavaScript
- Android
- iOS
- Flutter
// This is applicable for web, React native, Ionic cordova
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences.
const updatedPreferences = new NotificationPreferences();
// Instantiate the preferences that you want to update.
const oneOnOnePreferences = new OneOnOnePreferences();
// Change one-on-one preferences
oneOnOnePreferences.setMessagesPreference(MessagesOptions.DONT_SUBSCRIBE);
oneOnOnePreferences.setRepliesPreference(RepliesOptions.DONT_SUBSCRIBE);
oneOnOnePreferences.setReactionsPreference(ReactionsOptions.DONT_SUBSCRIBE);
// Load the updates in the NotificationPreferences instance.
updatedPreferences.setOneOnOnePreferences(oneOnOnePreferences);
// Update the preferences and receive the udpated copy.
const preferences = await CometChatNotifications.updatePreferences(updatedPreferences);
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences.
NotificationPreferences updatedPreferences = new NotificationPreferences();
// Instantiate the preferences that you want to update.
OneOnOnePreferences oneOnOnePreferences = new OneOnOnePreferences();
// Change one-on-one preferences
oneOnOnePreferences.setMessagesPreference(MessagesOptions.DONT_SUBSCRIBE);
oneOnOnePreferences.setRepliesPreference(RepliesOptions.DONT_SUBSCRIBE);
oneOnOnePreferences.setReactionsPreference(ReactionsOptions.DONT_SUBSCRIBE);
// Load the updates in the NotificationPreferences instance.
updatedPreferences.setOneOnOnePreferences(oneOnOnePreferences);
// Update the preferences.
CometChatNotifications.updatePreferences(updatedPreferences, new CometChat.CallbackListener<NotificationPreferences>() {
@Override
public void onSuccess(NotificationPreferences notificationPreferences) {
// Updated notificationPreferences
}
@Override
public void onError(CometChatException e) {
// Something went wrong
}
});
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences.
let updatedPreferences = CometChatNotifications.NotificationPreferences();
// Instantiate the preferences that you want to update.
let oneOnOnePreferences = CometChatNotifications.OneOnOnePreferences();
// Change one-on-one preferences
oneOnOnePreferences.set(messagesPreference: .DONT_SUBSCRIBE)
oneOnOnePreferences.set(repliesPreference: .DONT_SUBSCRIBE)
oneOnOnePreferences.set(reactionsPreference: .DONT_SUBSCRIBE)
// Load the updates in the NotificationPreferences instance.
updatedPreferences.set(oneOnOnePreferences: oneOnOnePreferences)
// Update the preferences.
CometChatNotifications.updatePreferences(updatedPreferences) { updatedPreferences in
print("updatePreferences: \(updatedPreferences)")
} onError: { error in
print("updatePreferences: \(error.errorCode) \(error.errorDescription)")
}
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences
NotificationPreferences updatedPreferences = NotificationPreferences();
// Instantiate the preferences that you want to update.
OneOnOnePreferences oneOnOnePreferences = OneOnOnePreferences(
messages: MessagesOptions.SUBSCRIBE_TO_ALL,
replies: RepliesOptions.SUBSCRIBE_TO_MENTIONS,
reactions: ReactionsOptions.SUBSCRIBE_TO_REACTIONS_ON_ALL_MESSAGES);
// Load the updates in the NotificationPreferences instance.
updatedPreferences.oneOnOnePreferences = oneOnOnePreferences;
// Update the preferences.
CometChatNotifications.updatePreferences(updatedPreferences,
onSuccess: (preferencesAfterUpdate) {
debugPrint("updatePreferences:success");
// Use the preferencesAfterUpdate
}, onError: (e) {
debugPrint("updatePreferences:error: ${e.toString()}");
});
Mute preferences
Dashboard configuration
These preferences allow you to control whether the users will be able to modify mute preferences.
Mute preferences | Can user configure? |
---|---|
Mute all notifications (DND) |
|
Mute group conversations |
|
Mute one-on-one conversations |
|
Client-side implementation
Fetch mute preferences
CometChatNotifications.fetchPreferences()
method retrieves the notification preferences saved by the user as an instance of NotificationPreferences
class. If the user has not configured any preferences, the default preferences defined by the CometChat administrator via the dashboard will be utilized.
You can use the CometChatNotifications.getMutedConversations()
method to display a list of conversations that have been muted by users.
The method will return an array of MutedConversations
object.
- JavaScript
- Android
- iOS
- Flutter
// This is applicable for web, React native, Ionic cordova
// Fetch mute preferences
const preferences = await CometChatNotifications.fetchPreferences();
// Display Mute preferences
const mutePreferences = preferences.getMutePreferences();
const DNDPreference = mutePreferences.getDNDPreference();
// Fetch muted conversations
const mutedConversations = await CometChatNotifications.getMutedConversations();
// Fetch mute preferences
CometChatNotifications.fetchPreferences(new CometChat.CallbackListener<NotificationPreferences>() {
@Override
public void onSuccess(NotificationPreferences notificationPreferences) {
// Display mute preferences
MutePreferences mutePreferences = notificationPreferences.getMutePreferences();
DNDOptions dndPreference = mutePreferences.getDNDPreference();
}
@Override
public void onError(CometChatException e) {
// Something went wrong while fetching notification preferences
}
});
// Fetch muted conversations
CometChatNotifications.getMutedConversations(new CometChat.CallbackListener<List<MutedConversation>>() {
@Override
public void onSuccess(List<MutedConversation> mutedConversations) {
// List of muted conversations
}
@Override
public void onError(CometChatException e) {
// Fetching muted conversations failed.
}
});
CometChatNotifications.fetchPreferences { notificationPreferences in
// Display mute preferences
let mutePreferences = notificationPreferences.mutePreferences;
let dndPreference = mutePreferences?.DNDPreference;
} onError: { error in
// Something went wrong while fetching notification preferences.
print("fetchPreferences: \(error.errorCode) \(error.errorDescription)");
}
// Fetch muted conversations
CometChatNotifications.getMutedConversations { mutedConversations in
print("getMutedConversations: \(mutedConversations)")
} onError: { error in
print("getMutedConversations: \(error.errorCode) \(error.errorDescription)")
}
// Fetch mute preferences
CometChatNotifications.fetchPreferences(
onSuccess: (notificationPreferences) {
// Display mute preferences
MutePreferences? mutePreferences = notificationPreferences.mutePreferences;
DNDOptions? dndPreference = mutePreferences?.dnd;
},
onError: (e) {
debugPrint("fetchPreferences:error ${e.toString()}");
});
// Fetch muted conversations
CometChatNotifications.getMutedConversations(
onSuccess: (mutedConversations) {
debugPrint("getMutedConversations:success");
// use mutedConversations
}, onError: (e) {
debugPrint("getMutedConversations:error ${e.toString()}");
});
Update mute preferences
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.
This functionality can be beneficial for temporarily superseding certain user preferences to ensure notifications for a specific event are delivered. Nonetheless, it is advisable to use this approach temporarily to avoid confusing users with unexpected changes to their notification settings. It is unnecessary to specify all values; only set and save the preferences that have been changed.
To mute one or more group or one-on-one conversations, utilize the CometChatNotifications.muteConversations()
method. This method requires an array of MutedConversation
objects, each containing the following properties:
Property | Type | Description |
---|---|---|
id | String | This can either be uid or guid . |
type | String | This can either be oneOnOne or group . |
until | Number | This is a valid timestamp from the future. Eg: 1710696964705. |
To unmute one or more group or one-on-one conversations that were muted by the user, utilize the CometChatNotifications.unmuteConversations()
method. This method requires an array of UnmutedConversation
objects, each containing the following properties:
Property | Type | Description |
---|---|---|
id | String | This can either be uid or guid . |
type | String | This can either be oneOnOne or group . |
- JavaScript
- Android
- iOS
- Flutter
// This is applicable for web, React native, Ionic cordova
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences.
const updatedPreferences = new NotificationPreferences();
const mutePreferences = new MutePreferences();
// Change mute preferences
mutePreferences.setDNDPreference(DNDOptions.ENABLED);
// Load the updates in the NotificationPreferences instance.
updatedPreferences.setMutePreferences(mutePreferences);
// Update the preferences and receive the udpated copy.
const notificationPreferences = await CometChatNotifications.updatePreferences(updatedPreferences);
// Mute conversations
const until = Date.now() + 86400000; // Mute for 1 day
const muteSuperhero1 = new MutedConversation();
muteSuperhero1.setId('superhero1');
muteSuperhero1.setType(MutedConversationType.ONE_ON_ONE);
muteSuperhero1.setUntil(until);
const muteSupergroup = new MutedConversation();
muteSupergroup.setId('supergroup');
muteSupergroup.setType(MutedConversationType.GROUP);
muteSupergroup.setUntil(until);
await CometChatNotifications.muteConversations([muteSuperhero1, muteSupergroup]);
// Unmute conversations
const unmuteSuperhero1 = new UnmutedConversation();
unmuteSuperhero1.setId('superhero1');
unmuteSuperhero1.setType(MutedConversationType.ONE_ON_ONE);
const unmuteList = [unmuteSuperhero1];
await CometChatNotifications.unmuteConversations(unmuteList);
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences.
NotificationPreferences updatedPreferences = new NotificationPreferences();
// Instantiate the preferences that you want to update.
MutePreferences mutePreferences = new MutePreferences();
// Change mute preferences
mutePreferences.setDNDPreference(DNDOptions.ENABLED);
// Load the updates in the NotificationPreferences instance.
updatedPreferences.setMutePreferences(mutePreferences);
// Update the preferences.
CometChatNotifications.updatePreferences(updatedPreferences, new CometChat.CallbackListener<NotificationPreferences>() {
@Override
public void onSuccess(NotificationPreferences notificationPreferences) {
// Updated notificationPreferences
}
@Override
public void onError(CometChatException e) {
// Something went wrong
}
});
// Mute conversations
long until = System.currentTimeMillis() + 86400000; // Mute for 1 day
MutedConversation muteSuperhero1 = new MutedConversation();
muteSuperhero1.setId("superhero1");
muteSuperhero1.setType(MutedConversationType.ONE_ON_ONE);
muteSuperhero1.setUntil(until);
MutedConversation muteSupergroup = new MutedConversation();
muteSupergroup.setId("supergroup");
muteSupergroup.setType(MutedConversationType.GROUP);
muteSupergroup.setUntil(until);
List<MutedConversation> allMuted = new ArrayList<>();
allMuted.add(muteSuperhero1);
allMuted.add(muteSupergroup);
CometChatNotifications.muteConversations(allMuted, new CometChat.CallbackListener<String>() {
@Override
public void onSuccess(String s) {
// Mute success
}
@Override
public void onError(CometChatException e) {
// Mute failed
}
});
// Unmute conversations
UnmutedConversation muteSuperhero1 = new UnmutedConversation();
muteSuperhero1.setId("superhero1");
muteSuperhero1.setType(MutedConversationType.ONE_ON_ONE);
List<UnmutedConversation> unmuteList = new ArrayList<>();
unmuteList.add(muteSuperhero1);
CometChatNotifications.unmuteConversations(unmuteList, new CometChat.CallbackListener<String>() {
@Override
public void onSuccess(String s) {
// Unmute success
}
@Override
public void onError(CometChatException e) {
// Unmute failed
}
});
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences.
let updatedPreferences = CometChatNotifications.NotificationPreferences();
// Instantiate the preferences that you want to update.
let mutePreferences = CometChatNotifications.MutePreferences();
// Change mute preferences
mutePreferences.set(DNDPreference:.ENABLED)
// Load the updates in the NotificationPreferences instance.
updatedPreferences.set(mutePreferences: mutePreferences);
// Update the preferences.
CometChatNotifications.updatePreferences(updatedPreferences) { updatedPreferences in
print("updatePreferences: \(updatedPreferences)")
} onError: { error in
print("updatePreferences: \(error.errorCode) \(error.errorDescription)")
}
// Mute conversations
let untilInterval = Date().addingTimeInterval(86400) // Mute for 1 day
let until = Int(untilInterval.timeIntervalSince1970 * 1000) // Convert to milliseconds
var muteSuperhero1 = CometChatNotifications.MutedConversation()
muteSuperhero1.id = "superhero1"
muteSuperhero1.type = .ONE_ON_ONE
muteSuperhero1.until = until
var muteSupergroup = CometChatNotifications.MutedConversation()
muteSupergroup.id = "supergroup"
muteSupergroup.type = .GROUP
muteSupergroup.until = until
let allMuted = [muteSuperhero1, muteSupergroup]
CometChatNotifications.muteConversations(allMuted) { success in
print("muteConversations: \(success)")
} onError: { error in
print("muteConversations: \(error.errorCode) \(error.errorDescription)")
}
// Unmute conversations
var unmuteSuperhero1 = CometChatNotifications.UnmutedConversation()
unmuteSuperhero1.id = "superhero1"
unmuteSuperhero1.type = .ONE_ON_ONE
let unmuteList = [unmuteSuperhero1]
CometChatNotifications.unmuteConversations(unmuteList) { success in
print("unmuteConversations: \(success)")
} onError: { error in
print("unmuteConversations: \(error.errorCode) \(error.errorDescription)")
}
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences
NotificationPreferences updatedPreferences = NotificationPreferences();
MutePreferences mutePreferences = MutePreferences(dnd: DNDOptions.DISABLED);
updatedPreferences.mutePreferences = mutePreferences;
// Update the preferences.
CometChatNotifications.updatePreferences(updatedPreferences,
onSuccess: (preferencesAfterUpdate) {
debugPrint("updatePreferences:success");
// Use the preferencesAfterUpdate
}, onError: (e) {
debugPrint("updatePreferences:error: ${e.toString()}");
});
// Mute conversations
int current = DateTime.now().millisecondsSinceEpoch;
int oneDayMillis = 24 * 60 * 60 * 1000;
int until = current + oneDayMillis;
MutedConversation muteSuperhero1 = MutedConversation(
id: "superhero1", type: MutedConversationType.ONE_ON_ONE, until: until);
MutedConversation muteSupergroup = MutedConversation(
id: "supergroup", type: MutedConversationType.GROUP, until: until);
List<MutedConversation> mutedConversations = [];
mutedConversations.add(muteSuperhero1);
mutedConversations.add(muteSupergroup);
CometChatNotifications.muteConversations(
mutedConversations,
onSuccess: (response) {
debugPrint("muteConversations:success ${response.toString()}");
},
onError: (e) {
debugPrint("muteConversations:error ${e.toString()}");
},
);
// Unmute conversations
UnmutedConversation unmuteSuperhero1 = UnmutedConversation(id: "superhero1", type: MutedConversationType.ONE_ON_ONE);
List<UnmutedConversation> unmuteList = [];
unmuteList.add(unmuteSuperhero1);
CometChatNotifications.unmuteConversations(unmuteList, onSuccess: (response) {
debugPrint("unmuteConversations:success ${response.toString()}");
},onError: (e) {
debugPrint("unmuteConversations:success ${e.toString()}");
});
Notification schedule
Dashboard configuration
Notifications will be delivered based on the specified daily timetable, adhering to the user's local time zone. Select "None" to disable Notifications for that day. For instance, this can be applied to weekends, such as Saturday and Sunday.
Day | From | To | Can user override? |
---|---|---|---|
Monday |
|
|
|
Tuesday |
|
| |
Wednesday |
|
| |
Thursday |
|
| |
Friday |
|
| |
Saturday |
|
| |
Sunday |
|
|
Client-side implementation
Fetch schedule preferences
CometChatNotifications.fetchPreferences()
method retrieves the notification preferences saved by the user as an instance of NotificationPreferences
class. If the user has not configured any preferences, the default preferences defined by the CometChat administrator via the dashboard will be utilized.
- JavaScript
- Android
- iOS
- Flutter
// This is applicable for web, React native, Ionic cordova
const preferences = await CometChatNotifications.fetchPreferences();
// Display schedule preferences
const mutePreferences = preferences.getMutePreferences();
const schedulePreference = mutePreferences.getSchedulePreference();
const mondaySchedule = schedulePreference.get(DayOfWeek.MONDAY);
const tuesdaySchedule = schedulePreference.get(DayOfWeek.TUESDAY);
const wednesdaySchedule = schedulePreference.get(DayOfWeek.WEDNESDAY);
const thursdaySchedule = schedulePreference.get(DayOfWeek.THURSDAY);
const fridaySchedule = schedulePreference.get(DayOfWeek.FRIDAY);
const saturdaySchedule = schedulePreference.get(DayOfWeek.SATURDAY);
const sundaySchedule = schedulePreference.get(DayOfWeek.SUNDAY);
// This action can be performed on other days of the week.
const mondayFrom = mondaySchedule?.getFrom();
const mondayTo = mondaySchedule?.getTo();
const mondayDnd = mondaySchedule?.getDND();
CometChatNotifications.fetchPreferences(new CometChat.CallbackListener<NotificationPreferences>() {
@Override
public void onSuccess(NotificationPreferences notificationPreferences) {
// Display schedule preferences
MutePreferences mutePreferences = notificationPreferences.getMutePreferences();
Map<DayOfWeek, DaySchedule> scheduleMap = mutePreferences.getSchedulePreference();
DaySchedule monday = scheduleMap.get(DayOfWeek.MONDAY);
DaySchedule tuesday = scheduleMap.get(DayOfWeek.TUESDAY);
DaySchedule wednesday = scheduleMap.get(DayOfWeek.WEDNESDAY);
DaySchedule thrusday = scheduleMap.get(DayOfWeek.THURSDAY);
DaySchedule friday = scheduleMap.get(DayOfWeek.FRIDAY);
DaySchedule saturday = scheduleMap.get(DayOfWeek.SATURDAY);
DaySchedule sunday = scheduleMap.get(DayOfWeek.SUNDAY);
// This action can be performed on other days of the week.
int mondayFrom = monday.getFrom();
int mondayTo = monday.getTo();
boolean mondayDnd = monday.getDnd();
}
@Override
public void onError(CometChatException e) {
// Something went wrong while fetching notification preferences
}
});
CometChatNotifications.fetchPreferences { notificationPreferences in
// Display schedule preferences
let mutePreferences = notificationPreferences.mutePreferences;
let schedulePref = mutePreferences?.schedulePreference;
let mondaySchedule = schedulePref?[.MONDAY];
let tuesdaySchedule = schedulePref?[.TUESDAY];
let wednesdaySchedule = schedulePref?[.WEDNESDAY];
let thursdaySchedule = schedulePref?[.THURSDAY];
let fridaySchedule = schedulePref?[.FRIDAY];
let saturdaySchedule = schedulePref?[.SATURDAY];
let sundaySchedule = schedulePref?[.SUNDAY];
// This action can be performed on other days of the week.
let mondayFrom = mondaySchedule?.from;
let mondayTo = mondaySchedule?.to;
let mondayDND = mondaySchedule?.dnd;
} onError: { error in
// Something went wrong while fetching notification preferences.
print("fetchPreferences: \(error.errorCode) \(error.errorDescription)");
}
CometChatNotifications.fetchPreferences(
// Display schedule preferences
MutePreferences? mutePreferences = notificationPreferences.mutePreferences;
Map<DayOfWeek, DaySchedule>? scheduleMap = mutePreferences?.schedule;
DaySchedule? mondaySchedule = scheduleMap?[DayOfWeek.MONDAY];
DaySchedule? tuesdaySchedule = scheduleMap?[DayOfWeek.TUESDAY];
DaySchedule? wednesdaySchedule = scheduleMap?[DayOfWeek.WEDNESDAY];
DaySchedule? thursdaySchedule = scheduleMap?[DayOfWeek.THURSDAY];
DaySchedule? fridaySchedule = scheduleMap?[DayOfWeek.FRIDAY];
DaySchedule? saturdaySchedule = scheduleMap?[DayOfWeek.SATURDAY];
DaySchedule? sundaySchedule = scheduleMap?[DayOfWeek.SUNDAY];
// This action can be performed on other days of the week.
int? mondayFrom = mondaySchedule?.from;
int? mondayTo = mondaySchedule?.to;
bool? mondayDnd = mondaySchedule?.dnd;
},
onError: (e) {
debugPrint("fetchPreferences:error ${e.toString()}");
});
Update schedule preferences
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.
This functionality can be beneficial for temporarily superseding certain user preferences to ensure notifications for a specific event are delivered. Nonetheless, it is advisable to use this approach temporarily to avoid confusing users with unexpected changes to their notification settings.
It is unnecessary to specify all values; only set and save the preferences that have been changed.
- JavaScript
- Android
- iOS
- Flutter
// This is applicable for web, React native, Ionic cordova
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences.
const updatedPreferences = new NotificationPreferences();
// Instantiate the preferences that you want to update.
const mutePreferences = new MutePreferences();
// Change schedule preferences
const scheduleMap = new Map<DayOfWeek, DaySchedule>();
const mondaySchedule = new DaySchedule(2015, 2345, false);
scheduleMap.set(DayOfWeek.MONDAY, mondaySchedule);
mutePreferences.setSchedulePreference(scheduleMap);
// Load the updates in the NotificationPreferences instance.
updatedPreferences.setOneOnOnePreferences(oneOnOnePreferences);
updatedPreferences.setGroupPreferences(groupPreferences);
updatedPreferences.setMutePreferences(mutePreferences);
// Update the preferences and receive the udpated copy.
const preferences = await CometChatNotifications.updatePreferences(updatedPreferences);
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences.
NotificationPreferences updatedPreferences = new NotificationPreferences();
// Instantiate the preferences that you want to update.
MutePreferences mutePreferences = new MutePreferences();
// Change schedule preferences
Map scheduleMap = new ArrayMap<DayOfWeek, DaySchedule>();
DaySchedule mondaySchedule = new DaySchedule();
mondaySchedule.setFrom(2015);
mondaySchedule.setTo(2345);
mondaySchedule.setDnd(false);
scheduleMap.put(DayOfWeek.MONDAY, mondaySchedule);
mutePreferences.setSchedulePreference(scheduleMap);
// Load the updates in the NotificationPreferences instance.
updatedPreferences.setMutePreferences(mutePreferences);
// Update the preferences.
CometChatNotifications.updatePreferences(updatedPreferences, new CometChat.CallbackListener<NotificationPreferences>() {
@Override
public void onSuccess(NotificationPreferences notificationPreferences) {
// Updated notificationPreferences
}
@Override
public void onError(CometChatException e) {
// Something went wrong
}
});
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences.
let updatedPreferences = CometChatNotifications.NotificationPreferences();
// Instantiate the preferences that you want to update.
let mutePreferences = CometChatNotifications.MutePreferences();
// Change schedule preferences
var dictionary = [CometChatNotifications.DayOfWeek:CometChatNotifications.DaySchedule]();
dictionary[.MONDAY] = CometChatNotifications.DaySchedule(from: 2015, to: 2345, dnd: false)
mutePreferences.set(schedulePreference: dictionary)
// Load the updates in the NotificationPreferences instance.
updatedPreferences.set(mutePreferences: mutePreferences);
// Update the preferences.
CometChatNotifications.updatePreferences(updatedPreferences) { updatedPreferences in
print("updatePreferences: \(updatedPreferences)")
} onError: { error in
print("updatePreferences: \(error.errorCode) \(error.errorDescription)")
}
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences
NotificationPreferences updatedPreferences = NotificationPreferences();
// Instantiate the preferences that you want to update.
MutePreferences mutePreferences = MutePreferences(dnd: DNDOptions.DISABLED);
Map<DayOfWeek, DaySchedule> scheduleMap = {};
DaySchedule mondaySchedule = DaySchedule(from: 2015, to: 2345, dnd: false);
scheduleMap[DayOfWeek.MONDAY] = mondaySchedule;
mutePreferences.schedule = scheduleMap;
updatedPreferences.mutePreferences = mutePreferences;
// Update the preferences.
CometChatNotifications.updatePreferences(updatedPreferences,
onSuccess: (preferencesAfterUpdate) {
debugPrint("updatePreferences:success");
// Use the preferencesAfterUpdate
}, onError: (e) {
debugPrint("updatePreferences:error: ${e.toString()}");
});
Calls preferences
These preferences are configured on behalf of you for CometChat calls and cannot be modified. These don't apply for Email and SMS notifications. Only Push Notifications are triggered for:
- Incoming calls
- Missed calls
- Busy calls
- Ongoing calls
- Call ended
- Call rejected
Reset preferences
CometChatNotifications.resetPreferences()
method is used to reset the preferences for a user to their default state. The default state of preferences is defined by the CometChat administrator via the dashboard.
- JavaScript
- Android
- iOS
- Flutter
// This is applicable for web, React native, Ionic cordova
const defaultPreferences = await CometChatNotifications.resetPreferences();
CometChatNotifications.resetPreferences(new CometChat.CallbackListener<NotificationPreferences>() {
@Override
public void onSuccess(NotificationPreferences defaultPreferences) {
// Display the defaultPreferneces.
}
@Override
public void onError(CometChatException e) {
// Something went wrong.
}
});
CometChatNotifications.resetPreferences { defaultPreferences in
print("resetPreferences: defaultPreferences \(defaultPreferences)");
} onError: { error in
print("resetPreferences: \(error.errorCode) \(error.errorDescription)");
}
CometChatNotifications.resetPreferences(onSuccess: (defaultPreferences) {
debugPrint("resetPreferences:success");
// defaultPreferences are available after reset.
},onError: (e) {
debugPrint("resetPreferences:error ${e.toString()}");
});
Email notification preferences
Preference | Values | Description |
---|---|---|
Notify for unread messages only |
|
|
The interval between two emails (in minutes) | 120 |
|
Maximum emails per day | 20 |
|
Maximum emails per conversation per day | 2 |
|
SMS notification preferences
Preference | Values | Description |
---|---|---|
Notify for unread messages only |
|
|
The interval between two emails (in minutes) | 120 |
|
Maximum emails per day | 20 |
|
Maximum emails per conversation per day | 2 |
|
Common templates and sounds
Templates are designed to specify the content displayed in notifications on the user's device for different events.
Templates incorporate placeholders
, which reference specific pieces of information determined by properties from the event.
For example, New message event has the following structure:
{
"data": {
"id": "17",
"conversationId": "group_supergroup",
"sender": "superhero2",
"receiverType": "group",
"receiver": "supergroup",
"category": "message",
"type": "text",
"data": {
"text": "Hello! How are you?",
"entities": {
"sender": {
"entity": {
"uid": "superhero2",
"name": "Captain America",
"role": "default",
"avatar": "https://data.cometchat.com/assets/images/avatars/captainamerica.png",
"status": "available",
"lastActiveAt": 1707901272
},
"entityType": "user"
},
"receiver": {
"entity": {
"guid": "supergroup",
"icon": "https://data.cometchat.com/assets/images/avatars/supergroup.png",
"name": "Comic Heros' Hangout",
"type": "public",
"owner": "superhero1",
"createdAt": 1706014061,
"conversationId": "group_supergroup",
"onlineMembersCount": 3
},
"entityType": "group"
}
},
},
"sentAt": 1707902030,
"updatedAt": 1707902030
}
}
The sender's name is accessible via data.entities.sender.name
, so the placeholder for the sender's name will be {{message.data.entities.sender.name}}
. This placeholder
is substituted within the template with the actual name of the sender aka the substitution value
.
As an administrator, you can configure:
- Default templates - Use these templates to display previews by leveraging the information contained in the event.
- Privacy templates - Employ these templates to present generic content in the notification.
Privacy setting
Dashboard configuration
Configure which template will be used for displaying the content of the notifications displayed on user's devices. The available preferences are:
- Use default template - Enforces the use of default templates for all the users.
- Use privacy template - Enforces the use of privacy templates for all the users.
- Use default templates with user privacy override (Default) - Uses default templates by default, but allows the users to enable privacy to hide the previews.
Client-side implementation
Fetch privacy setting
The method CometChatNotifications.fetchPreferences()
retrieves the notification preferences saved by the user as an instance of NotificationPreferences
class. If the user has not configured any preferences, the default preferences defined by the CometChat administrator via the dashboard will be utilized.
- JavaScript
- Android
- iOS
- Flutter
// This is applicable for web, React native, Ionic cordova
const preferences = await CometChatNotifications.fetchPreferences();
// Display a toggle for use privacy option TODO
const usePrivacyTemplate = preferences.getUsePrivacyTemplate();
CometChatNotifications.fetchPreferences(new CometChat.CallbackListener<NotificationPreferences>() {
@Override
public void onSuccess(NotificationPreferences notificationPreferences) {
// Display a toggle for use privacy option
boolean usePrivacyTemplate = notificationPreferences.getUsePrivacyTemplate();
}
@Override
public void onError(CometChatException e) {
// Something went wrong while fetching notification preferences
}
});
CometChatNotifications.fetchPreferences { notificationPreferences in
// Display a toggle for use privacy option
let usePrivacyTemplate = notificationPreferences.usePrivacyTemplate;
} onError: { error in
// Something went wrong while fetching notification preferences.
print("fetchPreferences: \(error.errorCode) \(error.errorDescription)");
}
CometChatNotifications.fetchPreferences(
onSuccess: (notificationPreferences) {
// Display a toggle for use privacy option
bool? usePrivacyTemplate = notificationPreferences.usePrivacyTemplate;
},
onError: (e) {
debugPrint("fetchPreferences:error ${e.toString()}");
});
Update privacy setting
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.
This functionality can be beneficial for temporarily superseding certain user preferences to ensure notifications for a specific event are delivered. Nonetheless, it is advisable to use this approach temporarily to avoid confusing users with unexpected changes to their notification settings.
It is unnecessary to specify all values; only set and save the preferences that have been changed.
- JavaScript
- Android
- iOS
- Flutter
// This is applicable for web, React native, Ionic cordova
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences.
const updatedPreferences = new NotificationPreferences();
// To update the preference for privacy template
updatedPreferences.setUsePrivacyTemplate(true);
// Update the preferences and receive the udpated copy.
const notificationPreferences = await CometChatNotifications.updatePreferences(updatedPreferences);
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences.
NotificationPreferences updatedPreferences = new NotificationPreferences();
// To update the preference for privacy template
updatedPreferences.setUsePrivacyTemplate(true);
// Update the preferences.
CometChatNotifications.updatePreferences(updatedPreferences, new CometChat.CallbackListener<NotificationPreferences>() {
@Override
public void onSuccess(NotificationPreferences notificationPreferences) {
// Updated notificationPreferences
}
@Override
public void onError(CometChatException e) {
// Something went wrong
}
});
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences.
let updatedPreferences = CometChatNotifications.NotificationPreferences();
// To update the preference for privacy template
updatedPreferences.set(usePrivacyTemplate: true)
// Update the preferences.
CometChatNotifications.updatePreferences(updatedPreferences) { prefs in
print("updatePreferences: \(prefs)")
} onError: { error in
print("updatePreferences: \(error.errorCode) \(error.errorDescription)")
}
// The example demonstrates modifying all values; however, modifying only the changed values is sufficient.
// Instantiate the NotificationPreferences
NotificationPreferences updatedPreferences = NotificationPreferences();
// To update the preference for privacy template
updatedPreferences.usePrivacyTemplate = true;
// Update the preferences.
CometChatNotifications.updatePreferences(updatedPreferences,
onSuccess: (preferencesAfterUpdate) {
debugPrint("updatePreferences:success");
// Use the preferencesAfterUpdate
}, onError: (e) {
debugPrint("updatePreferences:error: ${e.toString()}");
});
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 |
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 Audio | 🎥 Has sent a video | New video message |
Body for Audio | 📄 Has sent a file | New file message |
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 |
Note: The "Body (Fallback)" value is utilized when any placeholders within the "Body" fail to resolve to an appropriate substitution value.
For example, if {{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.
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 |
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 | {{data.interactiveData.title}} | New message |
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 |
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 |
Sounds
The sound files must be included within the app's bundle. These values are set within the notification payload as values of the "sound" field.
Sound for Call Notifications: Specify the name of the sound file you wish to play for call notifications.
Sound for Chat Notifications: Specify the name of the sound file you wish to play for chat notifications.
Email notification templates
You can use a default template or a privacy template in case you consider the information to be displayed as sensitive. The data available for email's subject template is as follows:
- For one-on-one conversation
- For group conversation
{
"to": {
"name": "Iron Man",
"avatar": "https://data-us.cometchat.io/assets/images/avatars/ironman.png"
},
"messages": [
{
"sender": {
"uid": "superhero4",
"avatar": "https://data-us.cometchat.io/assets/images/avatars/wolverine.png",
"name": "Wolverine"
},
"message": "Are we meeting on this weekend?"
},
{
"sender": {
"uid": "superhero4",
"avatar": "https://data-us.cometchat.io/assets/images/avatars/wolverine.png",
"name": "Wolverine"
},
"message": "📷 Has shared an image"
}
],
"senderDetails": {
"name": "Wolverine",
"icon": "https://data-us.cometchat.io/assets/images/avatars/wolverine.png"
}
}
{
"to": {
"name": "Iron Man",
"avatar": "https://data-us.cometchat.io/assets/images/avatars/ironman.png"
},
"messages": [
{
"sender": {
"uid": "superhero4",
"avatar": "https://data-us.cometchat.io/assets/images/avatars/wolverine.png",
"name": "Wolverine"
},
"message": "Hello all! What's up?"
},
{
"sender": {
"uid": "superhero4",
"avatar": "https://data-us.cometchat.io/assets/images/avatars/wolverine.png",
"name": "Wolverine"
},
"message": "This is the place I was thinking about"
}
],
"groupDetails": {
"name": "Comic Heros' Hangout",
"icon": "https://data-us.cometchat.io/assets/images/avatars/supergroup.png"
}
}
Considering the above data, an email's subject can be formatted as follows:
Subject for | Template | Final subject |
---|---|---|
Group notification | Hello | Hello Ironman! You have 2 message(s) in Comic Heros' Hangout. |
One-on-one notification | Hello | Hello Ironman! You have 2 message(s) from Wolverine. |
SMS notification templates
You can use a default template or a privacy template in case you consider the information to be displayed as sensitive. The data available for SMS template is as follows:
- For one-on-one conversation
- For group conversation
{
"to": {
"name": "Iron Man",
"avatar": "https://data-us.cometchat.io/assets/images/avatars/ironman.png"
},
"messages": [
{
"sender": {
"uid": "superhero4",
"avatar": "https://data-us.cometchat.io/assets/images/avatars/wolverine.png",
"name": "Wolverine"
},
"message": "Are we meeting on this weekend?"
},
{
"sender": {
"uid": "superhero4",
"avatar": "https://data-us.cometchat.io/assets/images/avatars/wolverine.png",
"name": "Wolverine"
},
"message": "📷 Has shared an image"
}
],
"senderDetails": {
"name": "Wolverine",
"icon": "https://data-us.cometchat.io/assets/images/avatars/wolverine.png"
}
}
{
"to": {
"name": "Iron Man",
"avatar": "https://data-us.cometchat.io/assets/images/avatars/ironman.png"
},
"messages": [
{
"sender": {
"uid": "superhero4",
"avatar": "https://data-us.cometchat.io/assets/images/avatars/wolverine.png",
"name": "Wolverine"
},
"message": "Hello all! What's up?"
},
{
"sender": {
"uid": "superhero4",
"avatar": "https://data-us.cometchat.io/assets/images/avatars/wolverine.png",
"name": "Wolverine"
},
"message": "This is the place I was thinking about"
}
],
"groupDetails": {
"name": "Comic Heros' Hangout",
"icon": "https://data-us.cometchat.io/assets/images/avatars/supergroup.png"
}
}
Considering the above data, an SMS can be formatted as follows:
SMS for | Template | Final content |
---|---|---|
Group notification | You've received | You've received 2 message(s) in Comic Heros' Hangout! Read them at https://your-website.com. |
One-on-one notification | You've received | You've received 2 message(s) from Wolverine! Read them at https://your-website.com/chat. |
Replace https://your-website.com/chat with the URL of your actual website.