AI Integration Quick Reference
AI Integration Quick Reference
| Field | Value |
|---|---|
| Subscribe hook | useCometChatEvents((event) => { ... }) |
| Publish hook | const publish = usePublishEvent() |
| Provider | CometChatEventsProvider (mounted automatically by CometChatProvider after login) |
| Event prefix | SDK events: message/, receipt/, user/, group/, call/, connection/ |
| UI event prefix | ui:message/, ui:compose/, ui:group/, ui:call/, ui:thread/, ui:conversation/ |
Overview
The v7 event system merges CometChat SDK listener events (from the network) with local UI events (from component actions) into a single pub/sub bus. Components subscribe to events they care about and publish events when they perform actions that other components need to know about. This replaces v6’s RxJS-basedCometChatMessageEvents, CometChatGroupEvents, etc. with a single unified system.
How It Works
- SDK listeners are attached when
CometChatEventsProvidermounts (after login) - When the SDK fires a listener callback, it’s converted to a typed event and emitted to all subscribers
- Components can also publish UI events for local cross-component communication
- All subscribers receive all events — filter by
event.typein your handler
Subscribing to Events
Use theuseCometChatEvents hook to subscribe:
Publishing UI Events
Use theusePublishEvent hook to publish events that other components can react to:
ui: prefixed events can be published by components. SDK events are emitted internally by the provider.
SDK Events
These events originate from the CometChat SDK (network). They fire when other users perform actions.Message Events
| Event Type | Payload | When |
|---|---|---|
message/text-received | { message: TextMessage } | Text message received |
message/media-received | { message: MediaMessage } | Media message received |
message/custom-received | { message: CustomMessage } | Custom message received |
message/interactive-received | { message: InteractiveMessage } | Interactive message received |
message/edited | { message: BaseMessage } | Message was edited |
message/deleted | { message: BaseMessage } | Message was deleted |
message/moderated | { message: BaseMessage } | Message was moderated |
Receipt Events
| Event Type | Payload | When |
|---|---|---|
receipt/delivered | { receipt: MessageReceipt } | Message delivered to recipient |
receipt/read | { receipt: MessageReceipt } | Message read by recipient |
receipt/delivered-to-all | { receipt: MessageReceipt } | Message delivered to all (group) |
receipt/read-by-all | { receipt: MessageReceipt } | Message read by all (group) |
Reaction Events
| Event Type | Payload | When |
|---|---|---|
reaction/added | { event: ReactionEvent } | Reaction added to a message |
reaction/removed | { event: ReactionEvent } | Reaction removed from a message |
Typing Events
| Event Type | Payload | When |
|---|---|---|
typing/started | { indicator: TypingIndicator } | User started typing |
typing/ended | { indicator: TypingIndicator } | User stopped typing |
User Events
| Event Type | Payload | When |
|---|---|---|
user/online | { user: User } | User came online |
user/offline | { user: User } | User went offline |
Group Events
| Event Type | Payload | When |
|---|---|---|
group/member-joined | { action, joinedUser, joinedGroup } | Member joined a group |
group/member-left | { action, leftUser, leftGroup } | Member left a group |
group/member-kicked | { action, kickedUser, kickedBy, kickedFrom } | Member was kicked |
group/member-banned | { action, bannedUser, bannedBy, bannedFrom } | Member was banned |
group/member-unbanned | { action, unbannedUser, unbannedBy, unbannedFrom } | Member was unbanned |
group/member-added | { action, addedBy, addedUser, addedTo } | Member was added |
group/member-scope-changed | { action, changedUser, newScope, oldScope, changedGroup } | Member scope changed |
Call Events
| Event Type | Payload | When |
|---|---|---|
call/incoming | { call: Call } | Incoming call received |
call/accepted | { call: Call } | Outgoing call was accepted |
call/rejected | { call: Call } | Outgoing call was rejected |
call/cancelled | { call: Call } | Incoming call was cancelled |
call/ended | { call: Call } | Call ended |
Connection Events
| Event Type | Payload | When |
|---|---|---|
connection/connected | — | WebSocket connected |
connection/disconnected | — | WebSocket disconnected |
UI Events
These events are published by UI Kit components for local cross-component communication within the same tab.Message Lifecycle
| Event Type | Payload | Published by |
|---|---|---|
ui:message/sent | { message, status } | MessageComposer |
ui:message/deleted | { message } | MessageList (after delete) |
ui:message/read | { message } | MessageList (mark as read) |
Composer Commands
| Event Type | Payload | Published by |
|---|---|---|
ui:compose/edit | { message, status, parentMessageId? } | MessageList (edit option) |
ui:compose/reply | { message, status, parentMessageId? } | MessageList (reply option) |
ui:compose/text | { text } | Smart replies, conversation starters |
ui:compose/recording-started | { composerInstanceId } | MessageComposer (voice recording) |
Conversation State
| Event Type | Payload | Published by |
|---|---|---|
ui:conversation/read | { conversationId } | MessageList |
ui:conversation/updated | { conversation } | MessageList |
ui:conversation/deleted | { conversation } | Conversations (delete action) |
ui:active-chat/changed | { user?, group?, message?, unreadMessageCount? } | MessageList (on load) |
User & Group Actions
| Event Type | Payload | Published by |
|---|---|---|
ui:user/blocked | { user } | MessageHeader |
ui:user/unblocked | { user } | MessageHeader |
ui:group/created | { group } | Groups |
ui:group/left | { group } | GroupMembers |
ui:group/deleted | { group } | Groups |
ui:group/member-kicked | { message, user, group } | GroupMembers |
ui:group/member-banned | { message, user, group } | GroupMembers |
ui:group/member-unbanned | { message?, user, group } | GroupMembers |
ui:group/member-scope-changed | { message, user, group, newScope } | GroupMembers |
ui:group/ownership-changed | { group, newOwner } | GroupMembers |
Thread
| Event Type | Payload | Published by |
|---|---|---|
ui:thread/opened | { parentMessage } | MessageList (thread option) |
ui:thread/closed | — | ThreadHeader |
Call Actions
| Event Type | Payload | Published by |
|---|---|---|
ui:call/outgoing | { call } | MessageHeader (call buttons) |
ui:call/rejected | { call } | IncomingCall |
ui:call/ended | { call? } | OngoingCall |
ui:call/accepted | { call } | IncomingCall |
ui:call/join | { sessionId, message } | CallLogs |
Navigation
| Event Type | Payload | Published by |
|---|---|---|
ui:open-chat | { user?, group? } | MessageList (message privately option) |
Panels
| Event Type | Payload | Published by |
|---|---|---|
ui:panel/show | { position, panel } | AI features |
ui:panel/hide | { position } | AI features |
Differences from v6
| v6 | v7 |
|---|---|
Multiple RxJS Subject classes (CometChatMessageEvents, CometChatGroupEvents, etc.) | Single unified event bus |
CometChatMessageEvents.ccMessageSent.next(...) | publish({ type: 'ui:message/sent', ... }) |
CometChatMessageEvents.ccMessageSent.subscribe(...) | useCometChatEvents((e) => { if (e.type === 'ui:message/sent') ... }) |
| Manual listener management | Automatic — provider handles all SDK listeners |
| RxJS dependency | No external dependencies |