Skip to main content

Documentation Index

Fetch the complete documentation index at: https://cometchat-22654f5b-docs-android-v6-beta2.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

Message class hierarchy:
BaseMessage (extends AppEntity)
├── TextMessage      → category: message, type: text
├── MediaMessage     → category: message, type: image/video/audio/file
├── CustomMessage    → category: custom, type: developer-defined
├── InteractiveMessage → category: interactive, type: form/card/scheduler/customInteractive
├── Action           → category: action, type: groupMember/message
├── Call             → category: call, type: audio/video
└── AIAssistantMessage → category: agentic, type: assistant
Message categories and types:
  • messagetext, image, video, audio, file
  • custom → Developer-defined types (e.g., location, poll)
  • interactiveform, card, scheduler, customInteractive
  • actiongroupMember (joined/left/kicked/banned), message (edited/deleted)
  • callaudio, video
  • agenticassistant, tool-result, tool-arguments
// Common BaseMessage Properties
message.id;              // int - Unique message ID
message.sender;          // User? - Message sender
message.receiverUid;     // String - Receiver UID or GUID
message.receiverType;    // String - "user" or "group"
message.category;        // String - message/custom/action/interactive/call/agentic
message.type;            // String - text/image/video/audio/file/custom
message.sentAt;          // DateTime? - When message was sent
message.deliveredAt;     // DateTime? - When message was delivered
message.readAt;          // DateTime? - When message was read
message.metadata;        // Map<String, dynamic>? - Custom data

// Type-specific Properties
textMessage.text;                    // String - Text content
mediaMessage.attachment;             // Attachment? - File details
customMessage.customData;            // Map<String, dynamic>? - Custom payload
interactiveMessage.interactiveData;  // Map<String, dynamic> - Interactive element data
Every message in CometChat belongs to a category (message, custom, interactive, action, call) and has a specific type within that category. On the SDK side, all messages extend BaseMessage, with subclasses like TextMessage, MediaMessage, CustomMessage, InteractiveMessage, Action, and Call. Understanding this hierarchy helps you handle different message types correctly.

Message Hierarchy

The below diagram helps you better understand the various message categories and types that a CometChat message can belong to.
The calling feature is not currently supported by the CometChat Flutter SDK.

Categories Overview

CategoryTypesSDK ClassDescription
messagetext, image, video, audio, fileTextMessage, MediaMessageStandard user messages
customDeveloper-definedCustomMessageCustom data (location, polls, etc.)
interactiveform, card, scheduler, customInteractiveInteractiveMessageMessages with actionable UI elements
actiongroupMember, messageActionSystem-generated events
callaudio, videoCallCall-related messages

BaseMessage Properties

All message types extend BaseMessage, which provides these common properties:
PropertyTypeDescription
idintUnique message identifier
muidStringMessage unique identifier (client-side)
senderUser?The user who sent the message
receiverAppEntity?The receiver (User or Group)
receiverUidStringUID of the receiver (user UID or group GUID)
typeStringMessage type (e.g., text, image, custom)
receiverTypeString"user" or "group"
categoryStringMessage category (message, custom, action, interactive, call)
sentAtDateTime?Timestamp when the message was sent
deliveredAtDateTime?Timestamp when the message was delivered
readAtDateTime?Timestamp when the message was read
metadataMap<String, dynamic>?Custom key-value data attached to the message
readByMeAtDateTime?Timestamp when the current user read the message
deliveredToMeAtDateTime?Timestamp when the message was delivered to the current user
deletedAtDateTime?Timestamp when the message was deleted
editedAtDateTime?Timestamp when the message was last edited
deletedByString?UID of the user who deleted the message
editedByString?UID of the user who edited the message
updatedAtDateTime?Timestamp of the last update
conversationIdString?ID of the conversation this message belongs to
parentMessageIdintID of the parent message (for threaded messages)
replyCountintNumber of replies to this message
unreadRepliesCountintNumber of unread replies
mentionedUsersList<User>Users mentioned in this message
hasMentionedMebool?Whether the current user is mentioned
reactionsList<ReactionCount>Reactions on this message
quotedMessageBaseMessage?The message being quoted/replied to
quotedMessageIdint?ID of the quoted message

Message

A message belonging to the category message can be classified into either 1 of the below types:
  1. text - A plain text message
  2. image- An image message
  3. video- A video message
  4. audio- An audio message
  5. file- A file message

TextMessage Properties

PropertyTypeDescription
textStringThe text content of the message
tagsList<String>?Tags associated with the message
moderationStatusModerationStatusEnum?Content moderation status
Inherits all BaseMessage properties.

MediaMessage Properties

PropertyTypeDescription
captionString?Caption for the media file
attachmentAttachment?Primary file attachment details
fileString?Local file path
filesList<String>?Multiple local file paths
attachmentsList<Attachment>?Multiple file attachments
tagsList<String>?Tags associated with the message
moderationStatusModerationStatusEnum?Content moderation status
Inherits all BaseMessage properties.

Attachment Properties

PropertyTypeDescription
fileUrlStringURL of the uploaded file
fileNameStringName of the file
fileExtensionStringFile extension (e.g., jpg, mp4)
fileMimeTypeStringMIME type (e.g., image/jpeg)
fileSizeint?File size in bytes

Custom

In the case of messages that belong to the custom category, there are no predefined types. Custom messages can be used by developers to send messages that do not fit in the default category and types provided by CometChat. For messages with the category custom, the developers can set their own type to uniquely identify the custom message. A very good example of a custom message would be the sharing of location co-ordinates. In this case, the developer can decide to use the custom message with type set to location.

CustomMessage Properties

PropertyTypeDescription
subTypeString?Sub-type for further classification
customDataMap<String, dynamic>?Custom key-value payload
tagsList<String>?Tags associated with the message
conversationTextString?Text shown in conversation list
updateConversationbool?Whether to update the conversation list
sendNotificationbool?Whether to send a push notification
Inherits all BaseMessage properties.

Interactive

An InteractiveMessage is a specialized object that encapsulates an interactive unit within a chat message, such as an embedded form that users can fill out directly within the chat interface. Messages belonging to the interactive category can further be classified into one of the below types:
  1. form- for interactive form
  2. card- for interactive card
  3. scheduler- for scheduler message
  4. customInteractive- for custom interaction messages
To know about Interactive messages please click here.

InteractiveMessage Properties

PropertyTypeDescription
interactiveDataMap<String, dynamic>Data defining the interactive element (form fields, card content, etc.)
interactionsList<Interaction>?List of user interactions with this message
interactionGoalInteractionGoal?Goal criteria for the interactive element
tagsList<String>?Tags associated with the message
allowSenderInteractionboolWhether the sender can interact with the element
Inherits all BaseMessage properties.

Action

Action messages are system-generated messages. Messages belonging to the action category can further be classified into one of the below types:
  1. groupMember - action performed on a group member.
  2. message - action performed on a message.

Action Properties

PropertyTypeDescription
messageString?Human-readable action description
rawDataString?Raw action data
actionString?The action performed (e.g., joined, kicked, edited)
oldScopeString?Previous member scope (for scope changes)
newScopeString?New member scope (for scope changes)
actionByAppEntity?Entity that performed the action
actionForAppEntity?Entity the action was performed for
actionOnAppEntity?Entity the action was performed on
Inherits all BaseMessage properties. Action messages hold another property called action which actually determine the action that has been performed For the type groupMember the action can be either one of the below:
  1. joined - when a group member joins a group
  2. left - when a group member leaves a group
  3. kicked - when a group member is kicked from the group
  4. banned - when a group member is banned from the group
  5. unbanned - when a group member is unbanned from the group
  6. added - when a user is added to the group
  7. scopeChanged - When the scope of a group member is changed.
For the type message, the action can be either one of the below:
  1. edited - when a message is edited.
  2. deleted - when a message is deleted.

Call

Messages with the category call are Calling related messages. These can belong to either one of the 2 types
  1. audio
  2. video

Call Properties

PropertyTypeDescription
sessionIdString?Unique call session identifier
callStatusString?Current status of the call
actionString?Call action type
rawDataString?Raw call data
initiatedAtDateTime?When the call was initiated
joinedAtDateTime?When the receiver joined the call
callInitiatorAppEntity?The user who initiated the call
callReceiverAppEntity?The user/group receiving the call
Inherits all BaseMessage properties. The call messages have a property called status that helps you figure out the status of the call. The status can be either one of the below values:
StatusDescription
initiatedCall started to a user/group
ongoingReceiver accepted the call
cancelledInitiator canceled the call
rejectedReceiver rejected the call
unansweredCall was not answered
busyReceiver was on another call
endedCall completed successfully

Next Steps

Send Messages

Learn how to send text, media, and custom messages

Receive Messages

Handle incoming messages with real-time listeners

Interactive Messages

Create forms, cards, and interactive elements

Edit & Delete Messages

Modify or remove sent messages