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. This enhances user engagement by making the chat experience more interactive and responsive to user input.
InteractiveMessage
InteractiveMessage is a chat message with embedded interactive content. It can contain various properties:
| Parameter | Description | |
|---|---|---|
receiverId | The UID or GUID of the recipient | Required |
receiverType | The type of the receiver to whom the message is to be sent. Options: CometChatConstants.RECEIVER_TYPE_USER (user) or CometChatConstants.RECEIVER_TYPE_GROUP (group) | Required |
messageType | The type of the message that needs to be sent | Required |
interactiveData | A JSONObject holding structured data for the interactive element. | Required |
allowSenderInteraction | A boolean determining whether the message sender can interact with the message. Default is set to false. | |
interactionGoal | An InteractionGoal object encapsulating the intended outcome of interacting with the InteractiveMessage. Default is set to none. |
Interaction
An Interaction represents a user action involved with anInteractiveMessage. It includes:
elementId: An identifier for a specific interactive element.interactedAt: A timestamp indicating when the interaction occurred.
Mark as Interacted
This method marks a message as interacted by identifying it with the provided Id. it also logs the interactive element associated with the interaction.- Kotlin
- Java
Goal Completion
A key feature ofInteractiveMessage is checking whether a user’s interactions with the message meet the defined InteractionGoal
You would be tracking every interaction users perform on an InteractiveMessage (captured as Interaction objects) and comparing those with the defined InteractionGoal. The completion of a goal can vary depending on the goal type:
| Goals | Description | Keys |
|---|---|---|
| Any Interaction | The goal is considered completed if there is at least one interaction. | CometChatConstants.INTERACTION_TYPE_ANY |
| Any of Specific Interactions | The goal is achieved if any of the specified interactions occurred. | CometChatConstants.INTERACTION_TYPE_ANY_OF |
| All of Specific Interactions | The goal is completed when all specified interactions occur. | CometChatConstants.INTERACTION_TYPE_ALL_OF |
| None | The goal is never completed. | CometChatConstants.INTERACTION_TYPE_NONE |
InteractionGoal
TheInteractionGoal represents the desired outcome of an interaction with an InteractiveMessage. It includes:
elementIds: A list of identifiers for the interactive elements.type: The type of interaction goal from theCometChatConstants.
Send an Interactive Message
TheInteractiveMessage can be sent using the sendInteractiveMessage method of the CometChat class. The method requires an InteractiveMessage object and a CallbackListener for handling the response.
Before sending interactive messages, ensure you have initialized the SDK and logged in a user.
Here is an example of how to use it:
- Kotlin
- Java
Real-time Events
CometChat SDK provides event listeners to handle real-time events related toInteractiveMessage. For more details on listener management, see Real-Time Listeners.
On InteractiveMessage Received The onInteractiveMessageReceived event listener is triggered when an InteractiveMessage is received.
Here is an example:
- Kotlin
- Java
On Interaction Goal Completed
TheonInteractionGoalCompleted event listener is invoked when an interaction goal is achieved.
Here is an example:
- Kotlin
- Java
InteractiveMessage Payload Structure
InteractiveMessage Object
InteractiveMessage Object
The
Sample InteractiveMessage Object:
InteractiveMessage object contains interactive content like forms and buttons:| Parameter | Type | Description |
|---|---|---|
id | long | Unique message identifier |
muid | String | Developer-defined message ID |
sender | User | User who sent the message |
receiver | AppEntity | Message receiver (User or Group) |
type | String | Message type (e.g., "form", "card") |
receiverType | String | Type of receiver. Values: "user", "group" |
category | String | Message category. Value: "interactive" |
sentAt | long | Unix timestamp when sent |
metadata | JSONObject | Custom message metadata |
conversationId | String | Associated conversation ID |
interactiveData | JSONObject | Interactive content data |
tags | Array<String> | Message tags |
interactionGoal | InteractionGoal | Goal for interactions |
interactions | Array<Interaction> | User interactions |
allowSenderInteraction | boolean | If sender can interact |
InteractionGoal Object
InteractionGoal Object
The
Sample InteractionGoal Object:
InteractionGoal object defines the desired outcome of interactions:| Parameter | Type | Description |
|---|---|---|
type | String | Goal type. Values: "none", "anyAction", "anyOf", "allOf" |
elementIds | Array<String> | Target element IDs for the goal |
Interaction Object
Interaction Object
The
Sample Interaction Object:
Interaction object represents a user action on an interactive element:| Parameter | Type | Description |
|---|---|---|
elementId | String | Identifier of the interacted element |
interactedAt | long | Unix timestamp when interaction occurred |
User Object (Interactive)
User Object (Interactive)
The nested
Sample User Object:
User object in sender contains:| Parameter | Type | Description |
|---|---|---|
uid | String | Unique identifier of the user |
name | String | Display name of the user |
avatar | String | URL to user’s profile picture |
link | String | URL to user’s profile page |
role | String | User role for access control |
metadata | JSONObject | Custom data set by developer |
status | String | User online status. Values: "online", "offline" |
statusMessage | String | Custom status message |
lastActiveAt | long | Unix timestamp of last activity |
hasBlockedMe | boolean | Whether this user has blocked the logged-in user |
blockedByMe | boolean | Whether the logged-in user has blocked this user |
tags | Array<String> | List of tags for user identification |
deactivatedAt | long | Unix timestamp when user was deactivated (0 if active) |
Next Steps
Send Messages
Learn how to send text, media, and custom messages
Mentions
Mention specific users in messages for better engagement
Receive Messages
Handle incoming messages with real-time listeners
Real-Time Listeners
Manage event listeners for real-time updates