Events
Why is Idempotency Important?
Idempotency ensures that your system processes webhook events reliably, even in cases duplicate events due to retries. Webhooks are inherently asynchronous, and network issues or endpoint failures can lead to retries. Without idempotency, the same event could be processed multiple times, causing unintended side effects such as duplicate records, inconsistent states, or incorrect business logic execution.
By implementing idempotency, you can:
Prevent Duplicate Processing: Ensure that the same event is not processed more than once, even if it is retried. Maintain Data Integrity: Avoid creating duplicate records or inconsistent states in your database. Improve System Reliability: Handle retries gracefully and ensure your system behaves predictably under all circumstances. Enhance Debugging and Monitoring: Easily identify and resolve issues related to duplicate or failed events.
Messaging events
message_sent
The hook triggers after the message is sent.
Idempotency Details
- Key:
webhook
,trigger
,data.message.id
- Purpose: Ensures the message is processed only once.
{
"trigger": "message_sent",
"data": {
"message": {
"id": "1",
"conversationId": "cometchat-uid-1_user_cometchat-uid-2",
"sender": "cometchat-uid-1",
"receiverType": "user",
"receiver": "cometchat-uid-2",
"category": "message",
"type": "text",
"data": {
"text": "hi",
"entities": {
"sender": {
"entity": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696934440
},
"entityType": "user"
},
"receiver": {
"entity": {
"uid": "cometchat-uid-2",
"name": "George Alan",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696934491,
"conversationId": "cometchat-uid-1_user_cometchat-uid-2"
},
"entityType": "user"
}
}
},
"sentAt": 1696934912,
"updatedAt": 1696934912
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
message_edited
The hook triggers after the message is edited.
Idempotency Details
- Key:
webhook
,trigger
,data.message.id
&data.message.editedAt
- Purpose: Tracks edits to ensure the same edit is not processed multiple times.
{
"trigger": "message_edited",
"data": {
"message": {
"id": "2",
"conversationId": "cometchat-uid-1_user_cometchat-uid-2",
"sender": "cometchat-uid-1",
"receiverType": "user",
"receiver": "cometchat-uid-2",
"category": "action",
"type": "message",
"data": {
"action": "edited",
"entities": {
"by": {
"entity": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696934440
},
"entityType": "user"
},
"for": {
"entity": {
"uid": "cometchat-uid-2",
"name": "George Alan",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696934491,
"conversationId": "cometchat-uid-1_user_cometchat-uid-2"
},
"entityType": "user"
},
"on": {
"entity": {
"id": "1",
"conversationId": "cometchat-uid-1_user_cometchat-uid-2",
"sender": "cometchat-uid-1",
"receiverType": "user",
"receiver": "cometchat-uid-2",
"category": "message",
"type": "text",
"data": {
"text": "hello",
"entities": {
"sender": {
"entity": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"role": "default",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "available",
"lastActiveAt": 1696934440
},
"entityType": "user"
},
"receiver": {
"entity": {
"uid": "cometchat-uid-2",
"name": "George Alan",
"role": "default",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "available",
"lastActiveAt": 1696934491,
"conversationId": "cometchat-uid-1_user_cometchat-uid-2"
},
"entityType": "user"
}
}
},
"sentAt": 1696934912,
"editedAt": 1696934985,
"editedBy": "cometchat-uid-1",
"deliveredAt": 1696934912,
"readAt": 1696934950,
"updatedAt": 1696934985
},
"entityType": "message"
}
},
},
"sentAt": 1696934985,
"updatedAt": 1696934985
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
message_deleted
The hook triggers after the message is deleted.
Idempotency Details
- Key:
webhook
,trigger
&data.message.id
- Purpose: Tracks deletions to prevent duplicate processing.
{
"trigger": "message_deleted",
"data": {
"message": {
"id": "3",
"conversationId": "cometchat-uid-1_user_cometchat-uid-2",
"sender": "cometchat-uid-1",
"receiverType": "user",
"receiver": "cometchat-uid-2",
"category": "action",
"type": "message",
"data": {
"action": "deleted",
"entities": {
"by": {
"entity": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696934440
},
"entityType": "user"
},
"for": {
"entity": {
"uid": "cometchat-uid-2",
"name": "George Alan",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696934491,
"conversationId": "cometchat-uid-1_user_cometchat-uid-2"
},
"entityType": "user"
},
"on": {
"entity": {
"id": "2",
"conversationId": "cometchat-uid-1_user_cometchat-uid-2",
"sender": "cometchat-uid-1",
"receiverType": "user",
"receiver": "cometchat-uid-2",
"category": "message",
"type": "text",
"data": {
"entities": {
"sender": {
"entity": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"role": "default",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "available",
"lastActiveAt": 1696934440
},
"entityType": "user"
},
"receiver": {
"entity": {
"uid": "cometchat-uid-2",
"name": "George Alan",
"role": "default",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "available",
"lastActiveAt": 1696934491,
"conversationId": "cometchat-uid-1_user_cometchat-uid-2"
},
"entityType": "user"
}
}
},
"sentAt": 1696934912,
"deliveredAt": 1696934912,
"readAt": 1696934950,
"deletedAt": 1696935005,
"updatedAt": 1696935005,
"deletedBy": "cometchat-uid-1"
},
"entityType": "message"
}
},
},
"sentAt": 1696935005,
"updatedAt": 1696935005
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
message_delivery_receipt
The hook triggers when the client chat application confirms with Cometchat servers that a message was delivered.
Idempotency Details
- Key:
webhook
,trigger
,data.body.messageId
,data.body.timestamp
&data.sender
- Purpose: Tracks delivery receipts to ensure they are processed only once.
{
"trigger": "message_delivery_receipt",
"data": {
"receiver": "cometchat-uid-1",
"receiverType": "user",
"type": "receipts",
"sender": "cometchat-uid-2",
"messageSender": "cometchat-uid-1",
"body": {
"action": "delivered",
"messageId": "57",
"user": {
"hasBlockedMe": false,
"blockedByMe": false,
"deactivatedAt": 0,
"uid": "cometchat-uid-2",
"name": "George Alan",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"lastActiveAt": 1696934489,
"role": "default",
"status": "online"
},
"timestamp": 1696934912
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
message_read_receipt
The hook triggers when the client chat application confirms with Cometchat servers that a message was read.
Idempotency Details
- Key:
webhook
,trigger
,data.body.messageId
,data.body.timestamp
&data.sender
- Purpose: Tracks read receipts to ensure they are processed only once.
{
"trigger": "message_read_receipt",
"data": {
"receiver": "cometchat-uid-1",
"receiverType": "user",
"type": "receipts",
"sender": "cometchat-uid-2",
"messageSender": "cometchat-uid-1",
"body": {
"action": "read",
"messageId": "57",
"user": {
"hasBlockedMe": false,
"blockedByMe": false,
"deactivatedAt": 0,
"uid": "cometchat-uid-2",
"name": "George Alan",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"lastActiveAt": 1696934489,
"role": "default",
"status": "online"
},
"timestamp": 1696934950
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
message_reaction_added
The hook triggers after a user reacts to a message.
Idempotency Details
- Key:
webhook
,trigger
,data.reaction.id
&data.reaction.uid
- Purpose: Tracks reactions to ensure they are processed only once.
{
"trigger": "message_reaction_added",
"data": {
"reaction": {
"id": "<reactionId>",
"messageId": "<messageId>",
"reaction": "🏒",
"uid": "cometchat-uid-1",
"reactedAt": 1700655536,
"reactedBy": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "offline",
"role": "default",
"lastActiveAt": 1700652818
}
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
message_reaction_removed
The hook triggers after a user un-reacts to a message.
Idempotency Details
- Key:
webhook
,trigger
,data.reaction.id
&data.reaction.uid
- Purpose: Tracks reaction removals to ensure they are processed only once.
{
"trigger": "message_reaction_removed",
"data": {
"reaction": {
"id": "<reactionId>",
"messageId": "<messageId>",
"reaction": "🏒",
"uid": "cometchat-uid-1",
"reactedAt": 1700231289,
"reactedBy": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "offline",
"role": "default",
"lastActiveAt": 1700652818
}
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
user_mentioned
The hook triggers after a user is mentioned in the message.
Idempotency Details
- Key:
webhook
,trigger
,data.message.id
&data.message.mentions.uid
- Purpose: Tracks mentions to ensure they are processed only once.
{
"trigger": "user_mentioned",
"data": {
"message": {
"id": "4",
"conversationId": "cometchat-uid-1_user_cometchat-uid-2",
"sender": "cometchat-uid-1",
"receiverType": "user",
"receiver": "cometchat-uid-2",
"category": "message",
"type": "text",
"data": {
"text": "Hi <@uid:cometchat-uid-2>",
"entities": {
"sender": {
"entity": {
"uid": "cometchat-uid-1",
"name": "George Alan",
"status": "offline",
"role": "default",
"createdAt": 1702025699
},
"entityType": "user"
},
"receiver": {
"entity": {
"uid": "cometchat-uid-2",
"name": "cometchat-uid-1",
"status": "available",
"role": "default",
"lastActiveAt": 1702028122,
"createdAt": 1701931840,
"conversationId": "cometchat-uid-1_user_cometchat-uid-2"
},
"entityType": "user"
}
},
"mentions": {
"cometchat-uid-2": {
"uid": "cometchat-uid-2",
"name": "cometchat-uid-1",
"status": "available",
"role": "default",
"lastActiveAt": 1702028122,
"createdAt": 1701931840,
"conversationId": "cometchat-uid-1_user_cometchat-uid-2"
}
}
},
"sentAt": 1702028666,
"updatedAt": 1702028666
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
message_delivered_to_all
The hook triggers when the client chat application confirms with Cometchat servers that a message was delivered to all the participants of the group.
Idempotency Details
- Key:
webhook
,trigger
,data.body.messageId
&data.body.timestamp
- Purpose: Tracks group delivery to ensure it is processed only once.
{
"trigger": "message_delivered_to_all",
"data": {
"receiver": "group__1720436412627",
"receiverType": "group",
"type": "receipts",
"sender": "app_system",
"messageSender": "superhero2",
"body": {
"messageId": "385",
"timestamp": 1722245922,
"action": "deliveredToAll",
"user": {
"uid": "app_system",
"name": "System",
"avatar": "",
"role": "default",
"status": "offline"
}
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
message_read_by_all
The hook triggers when the client chat application confirms with Cometchat servers that a message was read by all the participants of a group.
Idempotency Details
- Key:
webhook
,trigger
,data.body.messageId
&data.body.timestamp
- Purpose: Tracks group read receipts to ensure they are processed only once.
{
"trigger": "message_read_by_all",
"data": {
"receiver": "group__1720436412627",
"receiverType": "group",
"type": "receipts",
"sender": "app_system",
"messageSender": "superhero2",
"body": {
"messageId": "385",
"timestamp": 1722245922,
"action": "readByAll",
"user": {
"uid": "app_system",
"name": "System",
"avatar": "",
"role": "default",
"status": "offline"
}
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
The following events will be available only if the Enhanced Messaging Status feature is enabled for your app.
message_delivered_to_all
,message_read_by_all
User-related events
user_blocked
The hook triggers when a user blocks another user.
Idempotency Details
- Key:
webhook
+trigger
+data.users.uid
- Purpose: Tracks user block events to ensure they are processed only once.
{
"trigger": "user_blocked",
"data": {
"users": {
"cometchat-uid-2": {
"uid": "cometchat-uid-2",
"name": "George Alan",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696934491,
"conversationId": "cometchat-uid-1_user_cometchat-uid-2"
}
},
"by": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696935105
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
user_unblocked
The hook triggers when a user unblocks another user.
Idempotency Details
- Key:
webhook
+trigger
+data.users.uid
- Purpose: Tracks user unblock events to ensure they are processed only once.
{
"trigger": "user_unblocked",
"data": {
"users": {
"cometchat-uid-2": {
"uid": "cometchat-uid-2",
"name": "George Alan",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696934491,
"conversationId": "cometchat-uid-1_user_cometchat-uid-2"
}
},
"by": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696935105
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
user_connection_status_changed
The hook triggers after a user connects/disconnects from the websocket server.
Idempotency Details
- Key:
webhook
+trigger
+data.user.uid
+data.user.status
+data.timestamp
- Purpose: Tracks user connection status changes to ensure they are processed only once.
{
"trigger": "user_connection_status_changed",
"data": {
"timestamp": 1696935103114,
"user": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "offline",
"role": "default",
"lastActiveAt": 1693916686
},
"status": "offline",
"currentConnection": {
"action": "disconnected",
"appInfo": {
"version": "3.0.12",
"apiVersion": "v3.0",
"origin": "http://localhost:5173",
"uts": 1696934440846,
"clientIp": "3.128.113.92"
},
"platform": "javascript",
"userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
"connectedAt": 1696934440982
},
"userPresenceChanged": true
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
Group events
group_member_banned
This hooks triggers after members are banned from a group.
Idempotency Details
- Key:
webhook
+trigger
+data.group.guid
+data.members.uid
+data.group.updatedAt
- Purpose: Tracks group member bans to ensure they are processed only once.
{
"trigger": "group_member_banned",
"data": {
"group": {
"guid": "cometchat-guid-1",
"name": "Hiking Group",
"type": "public",
"membersCount": 1,
"conversationId": "group_group__1696932914913",
"createdAt": 1696932915,
"owner": "cometchat-uid-1",
"updatedAt": 1696933533,
"onlineMembersCount": 1
},
"members": {
"cometchat-uid-2": {
"uid": "cometchat-uid-2",
"name": "George Alan",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "offline",
"role": "default",
"lastActiveAt": 1695751453,
"conversationId": "cometchat-uid-1_user_cometchat-uid-2"
}
},
"by": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696932834
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
group_member_unbanned
The hook triggers after members are unbanned from a group.
Idempotency Details
- Key:
webhook
+trigger
+data.group.guid
+data.members.uid
+data.group.updatedAt
- Purpose: Tracks group member unbans to ensure they are processed only once.
{
"trigger": "group_member_unbanned",
"data": {
"members": {
"cometchat-uid-2": {
"uid": "cometchat-uid-2",
"name": "George Alan",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "offline",
"role": "default",
"lastActiveAt": 1695751453,
"conversationId": "cometchat-uid-1_user_cometchat-uid-2"
}
},
"group": {
"guid": "cometchat-guid-1",
"name": "Hiking Group",
"type": "public",
"membersCount": 1,
"conversationId": "group_cometchat-guid-1",
"createdAt": 1696932915,
"owner": "cometchat-uid-1",
"updatedAt": 1696933533,
"onlineMembersCount": 1
},
"by": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696932834
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
group_member_scope_changed
The hook triggers if the scope of a member changes in a group.
Idempotency Details
- Key:
webhook
+trigger
+data.group.guid
+data.members.uid
+data.group.updatedAt
- Purpose: Tracks group member scope changes to ensure they are processed only once.
{
"trigger": "group_member_scope_changed",
"data": {
"members": {
"cometchat-uid-2": {
"uid": "cometchat-uid-2",
"name": "George Alan",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696933928,
"conversationId": "cometchat-uid-1_user_cometchat-uid-2",
"scope": "admin",
"oldScope": "participant"
}
},
"group": {
"guid": "cometchat-guid-1",
"name": "Hiking Group",
"type": "public",
"membersCount": 2,
"conversationId": "group_cometchat-guid-1",
"createdAt": 1695722891,
"owner": "cometchat-uid-1",
"updatedAt": 1696933925,
"onlineMembersCount": 2
},
"by": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696933934
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
group_created
The hook triggers after the group is created.
Idempotency Details
- Key:
webhook
+trigger
+data.group.guid
+data.group.createdAt
- Purpose: Tracks group creation to ensure it is processed only once.
{
"trigger":"group_created",
"data":{
"group":{
"guid":"cometchat-guid-1",
"name":"Hiking Group",
"type":"public",
"scope":"admin",
"membersCount":1,
"joinedAt":1696932915,
"conversationId":"group_cometchat-guid-1",
"hasJoined":true,
"createdAt":1696932915,
"owner":"cometchat-uid-1"
},
"members":{
"cometchat-uid-1":{
"uid":"cometchat-uid-1",
"name":"Andrew Joseph",
"status":"available",
"role":"default",
"lastActiveAt":1696932834
}
}
},
"appId":"<appId>",
"region":"<region>",
"webhook":"<webhookID>"
}
group_updated
The hook triggers after the group is updated.
Idempotency Details
- Key:
webhook
+trigger
+data.group.guid
+data.group.updatedAt
- Purpose: Tracks group updates to ensure they are processed only once.
{
"trigger": "group_updated",
"data": {
"group": {
"guid": "cometchat-guid-1",
"name": "Hiking Group",
"type": "public",
"membersCount": 2,
"conversationId": "group_cometchat-guid-1",
"createdAt": 1695728507,
"owner": "cometchat-uid-2",
"updatedAt": 1696934048,
"updatedBy": "cometchat-uid-1",
"onlineMembersCount": 2
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
group_deleted
The hook triggers after the group is deleted.
Idempotency Details
- Key:
webhook
+trigger
+data.group.guid
+data.group.createdAt
- Purpose: Tracks group deletions to ensure they are processed only once.
{
"trigger": "group_deleted",
"data": {
"group": {
"guid": "cometchat-guid-1",
"name": "1234",
"type": "public",
"membersCount": 1,
"conversationId": "group_cometchat-guid-1",
"createdAt": 1695722912,
"owner": "cometchat-uid-1",
"updatedAt": 1695817083,
"updatedBy": "cometchat-uid-1",
"onlineMembersCount": 1
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
group_member_joined
The hook triggers after a user joins a group.
Idempotency Details
- Key:
webhook
+trigger
+data.group.guid
+data.members.uid
+data.group.updatedAt
- Purpose: Tracks group member joins to ensure they are processed only once.
{
"trigger": "group_member_joined",
"data": {
"members": {
"cometchat-uid-2": {
"uid": "cometchat-uid-2",
"name": "George Alan",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696933689
}
},
"group": {
"guid": "cometchat-guid-1",
"name": "Hiking Group",
"type": "public",
"membersCount": 2,
"conversationId": "group_cometchat-guid-1",
"createdAt": 1695728507,
"owner": "cometchat-uid-1",
"updatedAt": 1696933691,
"onlineMembersCount": 1
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
group_member_left
The hook triggers after a user leaves the group.
Idempotency Details
- Key:
webhook
+trigger
+data.group.guid
+data.members.uid
+data.group.updatedAt
- Purpose: Tracks group member departures to ensure they are processed only once.
{
"trigger": "group_member_left",
"data": {
"members": {
"cometchat-uid-2": {
"uid": "cometchat-uid-2",
"name": "George Alan",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696933689
}
},
"group": {
"guid": "cometchat-guid-1",
"name": "Hiking Group",
"type": "public",
"membersCount": 1,
"conversationId": "group_cometchat-guid-1",
"createdAt": 1695722891,
"owner": "cometchat-uid-1",
"updatedAt": 1696933827,
"onlineMembersCount": 1
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
group_member_added
The hook triggers after members are added to a group.
Idempotency Details
- Key:
webhook
+trigger
+data.group.guid
+data.members.uid
+data.group.updatedAt
- Purpose: Tracks group member additions to ensure they are processed only once.
{
"trigger": "group_member_added",
"data": {
"group": {
"guid": "cometchat-guid-1",
"name": "Hiking Group",
"type": "public",
"membersCount": 2,
"conversationId": "group_cometchat-guid-1",
"createdAt": 1696932915,
"owner": "cometchat-uid-1",
"onlineMembersCount": 1
},
"members": {
"cometchat-uid-2": {
"uid": "cometchat-uid-2",
"name": "George Alan",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "offline",
"role": "default",
"lastActiveAt": 1695751453,
"conversationId": "cometchat-uid-1_user_cometchat-uid-2"
}
},
"by": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696932834
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
group_member_kicked
This hook triggers after members are kicked from a group.
Idempotency Details
- Key:
webhook
+trigger
+data.group.guid
+data.members.uid
+data.group.updatedAt
- Purpose: Tracks group member removals to ensure they are processed only once.
{
"trigger": "group_member_kicked",
"data": {
"members": {
"cometchat-uid-2": {
"uid": "cometchat-uid-2",
"name": "George Alan",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696933689,
"conversationId": "cometchat-uid-1_user_cometchat-uid-2"
}
},
"group": {
"guid": "cometchat-guid-1",
"name": "Hiking Group",
"type": "public",
"membersCount": 1,
"conversationId": "group_cometchat-guid-1",
"createdAt": 1695722891,
"owner": "cometchat-uid-1",
"updatedAt": 1696933889,
"onlineMembersCount": 8
},
"by": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696933881
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
group_owner_transferred
The hook triggers if the owner of the group is changed.
Idempotency Details
- Key:
webhook
+trigger
+data.group.guid
+data.group.updatedAt
- Purpose: Tracks group ownership transfers to ensure they are processed only once.
{
"trigger": "group_owner_transferred",
"data": {
"group": {
"guid": "cometchat-guid-1",
"name": "Hiking Group",
"type": "public",
"membersCount": 2,
"conversationId": "group_cometchat-guid-1",
"createdAt": 1695728507,
"owner": "cometchat-uid-2",
"updatedAt": 1696933737,
"updatedBy": "cometchat-uid-1",
"onlineMembersCount": 2,
"oldOwner": "cometchat-uid-1"
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
Call & Meeting events
call_initiated
The hook triggers when the call is initiated.
Idempotency Details
- Key:
webhook
+trigger
+data.call.id
+data.call.sentAt
- Purpose: Tracks call initiation to ensure it is processed only once.
{
"trigger": "call_initiated",
"data": {
"call": {
"id": "52",
"conversationId": "cometchat-uid-1_user_cometchat-uid-5",
"sender": "cometchat-uid-1",
"receiverType": "user",
"receiver": "cometchat-uid-5",
"category": "call",
"type": "audio",
"data": {
"action": "initiated",
"entities": {
"by": {
"entity": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696933934
},
"entityType": "user"
},
"for": {
"entity": {
"uid": "cometchat-uid-5",
"name": "John Paul",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-5.webp",
"status": "offline",
"role": "default",
"conversationId": "cometchat-uid-1_user_cometchat-uid-5"
},
"entityType": "user"
},
"on": {
"entity": {
"sessionid": "<sessionId>",
"conversationId": "cometchat-uid-1_user_cometchat-uid-5",
"sender": "cometchat-uid-1",
"receiverType": "user",
"receiver": "cometchat-uid-5",
"status": "initiated",
"type": "audio",
"data": {
"entities": {
"sender": {
"entity": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1696933934
},
"entityType": "user"
},
"receiver": {
"entity": {
"uid": "cometchat-uid-5",
"name": "John Paul",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-5.webp",,
"status": "offline",
"role": "default",
"conversationId": "cometchat-uid-1_user_cometchat-uid-5"
},
"entityType": "user"
}
}
},
"initiatedAt": 1696934199,
"joinedAt": 1696934199
},
"entityType": "call"
}
},
"resource": "WEB-3_0_12-acfa8397-42f0-4f19-bc28-bc7db316ecaf-1696933879599"
},
"sentAt": 1696934199,
"updatedAt": 1696934199
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
call_started
The hook triggers when the call is started.
Idempotency Details
- Key:
webhook
+trigger
+data.sessionId
+data.created_at
- Purpose: Tracks call start events to ensure they are processed only once.
{
"trigger": "call_started",
"data": {
"created_at": 1696934572,
"sessionId": "<sessionId>"
},
"type": "call",
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
call_participant_joined
The hook triggers when a participant joins the call.
Idempotency Details
- Key:
webhook
+trigger
+data.sessionId
+data.occupant.joined_at
- Purpose: Tracks participant joins to ensure they are processed only once.
{
"trigger": "call_participant_joined",
"data": {
"occupant": {
"joined_at": 1696934573,
"audio_call": "true",
"name": "Andrew Joseph"
},
"initial_config": {
"is_video_muted": "false",
"start_recording_on_call_start": "false",
"call_version": "2.3.0",
"is_audio_muted": "false",
"sdk": "react",
"mode": "DEFAULT",
"platform": "web",
"is_audio_only": "true"
},
"sessionId": "<sessionId>"
},
"type": "call",
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
call_participant_left
The hook triggers when a participant leaves the call.
Idempotency Details
- Key:
webhook
+trigger
+data.sessionId
+data.occupant.left_at
- Purpose: Tracks participant departures to ensure they are processed only once.
{
"trigger": "call_participant_left",
"data": {
"occupant": {
"joined_at": 1696934501,
"audio_call": "true",
"left_at": 1696934553,
"name": "George Alan"
},
"sessionId": "<sessionId>"
},
"type": "call",
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
call_ended
The hook triggers when the call is ended.
Idempotency Details
- Key:
webhook
+trigger
+data.sessionId
+data.destroyed_at
- Purpose: Tracks call end events to ensure they are processed only once.
{
"trigger": "call_ended",
"data": {
"all_occupants": [
{
"joined_at": 1696934501,
"audio_call": "true",
"left_at": 1696934553,
"name": "George Alan"
},
{
"joined_at": 1696934501,
"audio_call": "true",
"left_at": 1696934551,
"name": "Andrew Joseph"
}
],
"destroyed_at": 1696934553,
"created_at": 1696934501,
"sessionId": "<sessionId>"
},
"type": "call",
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
call_busy
This hook is triggered when a 1-on-1 call cannot be connected because the recipient is already on another call (i.e., their line is busy). Note: This event is exclusive to 1-on-1 calls. In group calls, all participants can join at any time, so a "busy" state does not apply.
Idempotency Details
- Key:
webhook
+trigger
+data.call.id
+data.call.sentAt
- Purpose: Tracks call busy events to ensure they are processed only once.
{
"trigger": "call_busy",
"data": {
"call": {
"id": "43414",
"conversationId": "superhero1_user_superhero3",
"sender": "superhero3",
"receiverType": "user",
"receiver": "superhero1",
"category": "call",
"type": "audio",
"data": {
"action": "busy",
"entities": {
"by": {
"entity": {
"uid": "superhero3",
"name": "Spiderman",
"status": "available",
"role": "default",
"lastActiveAt": 1744959907
},
"entityType": "user"
},
"for": {
"entity": {
"uid": "superhero1",
"name": "Iron Man New 2",
"metadata": {
"metadata": "updated_653"
},
"status": "available",
"lastActiveAt": 1744960245,
"conversationId": "superhero1_user_superhero3"
},
"entityType": "user"
},
"on": {
"entity": {
"sessionid": "v1.us.258520c054f20343.1744960250fba0641a3d6f635262e35c07dca5acfb6fa94127",
"conversationId": "superhero1_user_superhero3",
"sender": "superhero1",
"receiverType": "user",
"receiver": "superhero3",
"status": "busy",
"type": "audio",
"data": {
"entities": {
"receiver": {
"entity": {
"conversationId": "superhero1_user_superhero3",
"lastActiveAt": 1744959907,
"name": "Spiderman",
"role": "default",
"status": "available",
"uid": "superhero3"
},
"entityType": "user"
},
"sender": {
"entity": {
"lastActiveAt": 1744960245,
"metadata": {
"metadata": "updated_653"
},
"name": "Iron Man New 2",
"status": "available",
"uid": "superhero1"
},
"entityType": "user"
}
}
},
"initiatedAt": 1744960250
},
"entityType": "call"
}
},
"resource": "WEB-4_0_10-942b534c-b606-4d44-90c3-878c60eb3a63-1744959889623"
},
"sentAt": 1744960250,
"updatedAt": 1744960250
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookId>"
}
call_cancelled
The hook triggers when the call is cancelled.
Idempotency Details
- Key:
webhook
+trigger
+data.call.id
+data.call.sentAt
- Purpose: Tracks call cancelled events to ensure they are processed only once.
{
"trigger": "call_cancelled",
"data": {
"call": {
"id": "43408",
"conversationId": "superhero3_user_superhero4",
"sender": "superhero4",
"receiverType": "user",
"receiver": "superhero3",
"category": "call",
"type": "audio",
"data": {
"action": "cancelled",
"entities": {
"by": {
"entity": {
"uid": "superhero4",
"name": "Wolverine",
"status": "available",
"role": "default",
"lastActiveAt": 1744959814
},
"entityType": "user"
},
"for": {
"entity": {
"uid": "superhero3",
"name": "Spiderman",
"status": "available",
"role": "default",
"lastActiveAt": 1744959907,
"conversationId": "superhero3_user_superhero4"
},
"entityType": "user"
},
"on": {
"entity": {
"sessionid": "v1.us.258520c054f20343.1744960108582f85230d0552516bdac185a6bd862eeac55f78",
"conversationId": "superhero3_user_superhero4",
"sender": "superhero4",
"receiverType": "user",
"receiver": "superhero3",
"status": "cancelled",
"type": "audio",
"data": {
"entities": {
"receiver": {
"entity": {
"conversationId": "superhero3_user_superhero4",
"lastActiveAt": 1744959907,
"name": "Spiderman",
"role": "default",
"status": "available",
"uid": "superhero3"
},
"entityType": "user"
},
"sender": {
"entity": {
"lastActiveAt": 1744959814,
"name": "Wolverine",
"role": "default",
"status": "available",
"uid": "superhero4"
},
"entityType": "user"
}
}
},
"initiatedAt": 1744960108
},
"entityType": "call"
}
},
"resource": "WEB-4_0_10-837115e3-f277-4105-8f1f-4e19a1a7f2be-1744959734040"
},
"sentAt": 1744960111,
"updatedAt": 1744960111
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookId>"
}
call_rejected
This hook is triggered when a 1-on-1 call is explicitly rejected by the recipient. In group calls, this event is not triggered—since the call remains active as long as at least one member joins, even if others reject it.
Idempotency Details
- Key:
webhook
+trigger
+data.call.id
+data.call.sentAt
- Purpose: Tracks call rejected events to ensure they are processed only once.
{
"trigger": "call_rejected",
"data": {
"call": {
"id": "43406",
"conversationId": "superhero3_user_superhero4",
"sender": "superhero3",
"receiverType": "user",
"receiver": "superhero4",
"category": "call",
"type": "audio",
"data": {
"action": "rejected",
"entities": {
"by": {
"entity": {
"uid": "superhero3",
"name": "Spiderman",
"status": "available",
"role": "default",
"lastActiveAt": 1744959907
},
"entityType": "user"
},
"for": {
"entity": {
"uid": "superhero4",
"name": "Wolverine",
"status": "available",
"role": "default",
"lastActiveAt": 1744959814,
"conversationId": "superhero3_user_superhero4"
},
"entityType": "user"
},
"on": {
"entity": {
"sessionid": "v1.us.258520c054f20343.1744960087681ed39d02b69199ee4e0cf9d9173dc6c643461e",
"conversationId": "superhero3_user_superhero4",
"sender": "superhero4",
"receiverType": "user",
"receiver": "superhero3",
"status": "rejected",
"type": "audio",
"data": {
"entities": {
"receiver": {
"entity": {
"conversationId": "superhero3_user_superhero4",
"lastActiveAt": 1744959907,
"name": "Spiderman",
"role": "default",
"status": "available",
"uid": "superhero3"
},
"entityType": "user"
},
"sender": {
"entity": {
"lastActiveAt": 1744959814,
"name": "Wolverine",
"role": "default",
"status": "available",
"uid": "superhero4"
},
"entityType": "user"
}
}
},
"initiatedAt": 1744960087
},
"entityType": "call"
}
},
"resource": "WEB-4_0_10-942b534c-b606-4d44-90c3-878c60eb3a63-1744959889623"
},
"sentAt": 1744960092,
"updatedAt": 1744960092
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookId>"
}
call_unanswered
This hook is triggered when a call goes unanswered. For group calls, the call is considered unanswered only if none of the members join.
Idempotency Details
- Key:
webhook
+trigger
+data.call.id
+data.call.sentAt
- Purpose: Tracks call unanswered events to ensure they are processed only once.
{
"trigger": "call_unanswered",
"data": {
"call": {
"id": "43410",
"conversationId": "superhero3_user_superhero4",
"sender": "superhero4",
"receiverType": "user",
"receiver": "superhero3",
"category": "call",
"type": "audio",
"data": {
"action": "unanswered",
"entities": {
"by": {
"entity": {
"uid": "superhero4",
"name": "Wolverine",
"status": "available",
"role": "default",
"lastActiveAt": 1744959814
},
"entityType": "user"
},
"for": {
"entity": {
"uid": "superhero3",
"name": "Spiderman",
"status": "available",
"role": "default",
"lastActiveAt": 1744959907,
"conversationId": "superhero3_user_superhero4"
},
"entityType": "user"
},
"on": {
"entity": {
"sessionid": "v1.us.258520c054f20343.17449601247f75e0a5c7b9601b32e9fb26645c34975bc6c93d",
"conversationId": "superhero3_user_superhero4",
"sender": "superhero4",
"receiverType": "user",
"receiver": "superhero3",
"status": "unanswered",
"type": "audio",
"data": {
"entities": {
"receiver": {
"entity": {
"conversationId": "superhero3_user_superhero4",
"lastActiveAt": 1744959907,
"name": "Spiderman",
"role": "default",
"status": "available",
"uid": "superhero3"
},
"entityType": "user"
},
"sender": {
"entity": {
"lastActiveAt": 1744959814,
"name": "Wolverine",
"role": "default",
"status": "available",
"uid": "superhero4"
},
"entityType": "user"
}
}
},
"initiatedAt": 1744960124
},
"entityType": "call"
}
},
"resource": "WEB-4_0_10-837115e3-f277-4105-8f1f-4e19a1a7f2be-1744959734040"
},
"sentAt": 1744960170,
"updatedAt": 1744960170
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookId>"
}
meeting_started
The hook triggers when a meeting is started.
Idempotency Details
- Key:
webhook
+trigger
+data.sessionId
+data.created_at
- Purpose: Tracks meeting start events to ensure they are processed only once.
{
"trigger": "meeting_started",
"data": {
"created_at": 1696934692,
"sessionId": "<sessionId>"
},
"type": "meet",
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
recording_generated
The hook triggers when the recording is generated.
Idempotency Details
- Key:
webhook
+trigger
+data.sessionId
+data.startTime
- Purpose: Tracks recording generation to ensure it is processed only once.
{
"trigger": "recording_generated",
"data": {
"recordingDate": "2023-10-10",
"duration": "21.433000",
"startTime": "1696937627",
"sessionId": "<sessionId>",
"recording_url": "<recording_url>"
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
meeting_participant_joined
The hook triggers when a participant joins the meeting.
Idempotency Details
- Key:
webhook
+trigger
+data.sessionId
+data.occupant.joined_at
- Purpose: Tracks participant joins in meetings to ensure they are processed only once.
{
"trigger": "meeting_participant_joined",
"data": {
"occupant": {
"joined_at": 1696934692,
"audio_call": "false",
"name": "Andrew Joseph"
},
"initial_config": {
"is_video_muted": "false",
"start_recording_on_call_start": "false",
"call_version": "2.3.0",
"is_audio_muted": "false",
"sdk": "react",
"mode": "DEFAULT",
"platform": "web",
"is_audio_only": "false"
},
"sessionId": "<sessionId>"
},
"type": "meet",
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
meeting_participant_left
The hook triggers when a participant leaves the meeting.
Idempotency Details
- Key:
webhook
+trigger
+data.sessionId
+data.occupant.left_at
- Purpose: Tracks participant departures in meetings to ensure they are processed only once.
{
"trigger": "meeting_participant_left",
"data": {
"occupant": {
"joined_at": 1696934692,
"audio_call": "false",
"left_at": 1696934730,
"name": "Andrew Joseph"
},
"sessionId": "<sessionId>"
},
"type": "meet",
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
meeting_ended
The hook triggers when the meeting is ended.
Idempotency Details
- Key:
webhook
+trigger
+data.sessionId
+data.destroyed_at
- Purpose: Tracks meeting end events to ensure they are processed only once.
{
"trigger": "meeting_ended",
"data": {
"all_occupants": [
{
"joined_at": 1696934692,
"audio_call": "false",
"left_at": 1696934730,
"name": "Andrew Joseph"
}
],
"destroyed_at": 1696934730,
"created_at": 1696934692,
"sessionId": "<sessionId>"
},
"type": "meet",
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
Moderation Events
moderation_engine_approved
The hook triggers when a message is marked as approved by the moderation engine.
Idempotency Details
- Key:
webhook
+trigger
+data.message.id
+data.message.sentAt
- Purpose: Tracks moderation approvals to ensure they are processed only once.
{
"trigger": "moderation_engine_approved",
"data": {
"message": {
"id": "38437",
"muid": "_4b6na3agb",
"conversationId": "cometchat-uid-1_user_cometchat-uid-2",
"sender": "cometchat-uid-2",
"receiverType": "user",
"receiver": "cometchat-uid-1",
"category": "message",
"type": "text",
"data": {
"text": "hello",
"resource": "WEB-4_0_10-a10f2a72-8d27-4fbc-aceb-05a2258e98f4-1738586366602",
"entities": {
"sender": {
"entity": {
"uid": "cometchat-uid-2",
"name": "George Alan",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1738589887
},
"entityType": "user"
},
"receiver": {
"entity": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1738589887,
"conversationId": "cometchat-uid-1_user_cometchat-uid-2"
},
"entityType": "user"
}
}
},
"sentAt": 1738591120,
"updatedAt": 1738591120
}
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
Filter Failure and Message Approval
When a moderation rule is configured to block messages based on conditions and filters, the conditions may be met, but the filters may not. In such cases, the message is approved, and the system will provide details on the filter that caused the rule to fail. This ensures transparency and helps administrators understand why a message was not blocked despite matching the primary rule condition.
For example, a rule might specify that the message containing badWord
should only be blocked if it is sent by a specific user (e.g., user-1
).
Scenario:
- Rule Condition: Block messages containing
badWord
. - Filter Condition: The sender's UID must be
user-1
.
Example
- User Action:
user-2
sends a message containingbadWord
. - Rule Evaluation:
- The message contains
badWord
, satisfying the rule condition. - However, the sender's UID is
user-2
, which does not match the filter condition (user-1
).
- The message contains
- Outcome:
- Since the filter condition is not met, the message is approved and not blocked.
{
"trigger": "moderation_engine_approved",
"data": {
"message": {
"id": "38446",
"muid": "_4j800i3f9",
"conversationId": "cometchat-uid-1_user_cometchat-uid-2",
"sender": "cometchat-uid-2",
"receiverType": "user",
"receiver": "cometchat-uid-1",
"category": "message",
"type": "text",
"data": {
"text": "duffer",
"resource": "WEB-4_0_10-a10f2a72-8d27-4fbc-aceb-05a2258e98f4-1738586366602",
"entities": {
"sender": {
"entity": {
"uid": "cometchat-uid-2",
"name": "George Alan",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1738596587
},
"entityType": "user"
},
"receiver": {
"entity": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1738589887,
"conversationId": "cometchat-uid-1_user_cometchat-uid-2"
},
"entityType": "user"
}
}
},
"sentAt": 1738601210,
"updatedAt": 1738601210
},
"moderation": [
{
"filter": {
"entity": "user",
"operand": "uid",
"operator": "equals",
"value": "cometchat-uid-1",
"type": "sender",
"_id": "67a0f23442ec6ee218670893"
},
"rule": {
"id": "moderation",
"name": "moderation",
"revisionId": "253614a48756a6a0_moderation_2",
"action": [
"blockMessage"
],
"blockedAt": 1738601211
}
}
]
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
moderation_engine_blocked
The hook triggers when a message is marked as disapproved by the moderation engine.
Idempotency Details
- Key:
webhook
+trigger
+data.message.id
+data.message.updatedAt
- Purpose: Tracks moderation blocks to ensure they are processed only once.
{
"trigger": "moderation_engine_blocked",
"data": {
"message": {
"id": "38439",
"muid": "_zhovsxqdo",
"conversationId": "cometchat-uid-1_user_cometchat-uid-2",
"sender": "cometchat-uid-2",
"receiverType": "user",
"receiver": "cometchat-uid-1",
"category": "message",
"type": "text",
"data": {
"text": "andrew@gmail.com",
"resource": "WEB-4_0_10-a10f2a72-8d27-4fbc-aceb-05a2258e98f4-1738586366602",
"entities": {
"sender": {
"entity": {
"uid": "cometchat-uid-2",
"name": "George Alan",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1738589887
},
"entityType": "user"
},
"receiver": {
"entity": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1738589887,
"conversationId": "cometchat-uid-1_user_cometchat-uid-2"
},
"entityType": "user"
}
}
},
"sentAt": 1738591286,
"updatedAt": 1738591286
},
"moderation": [
{
"condition": {
"entity": "message",
"operand": "text",
"category": "pattern",
"operator": "contains",
"value": [
"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"
],
"message": "Text message contains a pattern matching an email address"
},
"rule": {
"id": "email_filter",
"name": "Email filter",
"revisionId": "2531882e5e289115_contact_email_filter_7",
"action": [
"blockMessage"
],
"blockedAt": 1738591286
}
}
]
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}
moderation_manual_approved
The hook triggers when a blocked message is manually marked as approved.
Idempotency Details
- Key:
webhook
+trigger
+data.message.id
+data.message.updatedAt
- Purpose: Tracks manual moderation approvals to ensure they are processed only once.
{
"trigger": "moderation_manual_approved",
"data": {
"message": {
"id": "38439",
"muid": "_zhovsxqdo",
"conversationId": "cometchat-uid-1_user_cometchat-uid-2",
"sender": "cometchat-uid-2",
"receiverType": "user",
"receiver": "cometchat-uid-1",
"category": "message",
"type": "text",
"data": {
"text": "andrew@gmail.com",
"resource": "WEB-4_0_10-a10f2a72-8d27-4fbc-aceb-05a2258e98f4-1738586366602",
"entities": {
"sender": {
"entity": {
"uid": "cometchat-uid-2",
"name": "George Alan",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1738589887
},
"entityType": "user"
},
"receiver": {
"entity": {
"uid": "cometchat-uid-1",
"name": "Andrew Joseph",
"avatar": "https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-1.webp",
"status": "available",
"role": "default",
"lastActiveAt": 1738589887,
"conversationId": "cometchat-uid-1_user_cometchat-uid-2"
},
"entityType": "user"
}
}
},
"sentAt": 1738591286,
"updatedAt": 1738591286
},
"moderation": [
{
"condition": {
"entity": "message",
"operand": "text",
"category": "pattern",
"operator": "contains",
"value": [
"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"
],
"message": "Text message contains a pattern matching an email address"
},
"rule": {
"id": "email_filter",
"name": "Email filter",
"revisionId": "2531882e5e289115_contact_email_filter_7",
"action": [
"blockMessage"
],
"blockedAt": 1738591286
}
}
]
},
"appId": "<appId>",
"region": "<region>",
"webhook": "<webhookID>"
}