Documentation Index
Fetch the complete documentation index at: https://www.cometchat.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
AI Integration Quick Reference
| Method | Description |
|---|
sendInteractiveMessage(message:) | Send an interactive message |
InteractiveMessage() | Create an interactive message object |
InteractionGoal() | Define completion criteria |
let interMessage = InteractiveMessage()
interMessage.messageCategory = .interactive
interMessage.type = "form"
interMessage.receiverType = .user
interMessage.receiverUid = "cometchat-uid-2"
interMessage.interactiveData = ["title": "Contact Form", "formFields": [...]]
CometChat.sendInteractiveMessage(message: interMessage, onSuccess: { msg in }, onError: { err in })
// Listen for interactive events (CometChatMessageDelegate)
func onInteractiveMessageReceived(_ message: InteractiveMessage) { }
func onInteractionGoalCompleted(_ message: InteractiveMessage) { }
InteractiveMessage Properties
| Property | Type | Description |
|---|
| receiverUid | String | UID or GUID of recipient |
| receiverType | ReceiverType | .user or .group |
| type | String | form, card, scheduler, or custom |
| interactiveData | [String: Any] | JSON structure for content |
| allowSenderInteraction | Bool | Can sender interact (default: false) |
| interactionGoal | InteractionGoal | Completion criteria |
| messageCategory | MessageCategory | .interactive |
Interaction Goal Types
| Type | Description | Value |
|---|
| Any Action | Goal completed if any interaction occurs | .anyAction |
| Any Of | Goal achieved if any specified interaction occurs | .anyOf |
| All Of | Goal completed when all specified interactions occur | .allOf |
| None | Goal is never completed | .none |
| Element Type | Description |
|---|
| textInput | Single or multi-line text input |
| dropdown | Dropdown select with options |
| checkbox | Multiple selection checkboxes |
| radio | Single selection radio buttons |
| singleSelect | Single selection list |
| button | Action button (submit, navigate) |
| Action Type | Description |
|---|
| urlNavigation | Opens a URL in browser |
| apiAction | Makes an API call with specified parameters |
| customAction | Custom action handled by app |
let interMessage = InteractiveMessage()
interMessage.messageCategory = .interactive
interMessage.type = "form"
interMessage.receiverType = .user
interMessage.receiverUid = "cometchat-uid-2"
interMessage.allowSenderInteraction = true
interMessage.interactiveData = [
"title": "Contact Form",
"formFields": [
[
"elementId": "name_field",
"elementType": "textInput",
"label": "Name",
"optional": false
],
[
"elementId": "country_dropdown",
"elementType": "dropdown",
"label": "Country",
"options": [
["label": "USA", "value": "usa"],
["label": "UK", "value": "uk"],
["label": "India", "value": "india"]
]
]
],
"submitElement": [
"elementId": "submit_btn",
"elementType": "button",
"buttonText": "Submit",
"disableAfterInteracted": true
],
"goalCompletionText": "Thank you for submitting!"
]
let goal = InteractionGoal()
goal.elementIds = ["submit_btn"]
goal.interactionType = .anyOf
interMessage.interactionGoal = goal
CometChat.sendInteractiveMessage(message: interMessage, onSuccess: { message in
print("Interactive message sent: \(message)")
}, onError: { error in
print("Error: \(error?.errorDescription ?? "")")
})
Send Card Interactive Message
let interMessage = InteractiveMessage()
interMessage.messageCategory = .interactive
interMessage.type = "card"
interMessage.receiverType = .user
interMessage.receiverUid = "cometchat-uid-2"
interMessage.allowSenderInteraction = true
interMessage.interactiveData = [
"title": "Product Card",
"subtitle": "Special Offer",
"text": "Check out this amazing product with 20% discount!",
"imageUrl": "https://example.com/product.png",
"cardActions": [
[
"elementId": "buy_btn",
"elementType": "button",
"buttonText": "Buy Now",
"action": [
"actionType": "urlNavigation",
"url": "https://example.com/buy"
]
],
[
"elementId": "details_btn",
"elementType": "button",
"buttonText": "View Details",
"action": [
"actionType": "urlNavigation",
"url": "https://example.com/details"
]
]
]
]
let goal = InteractionGoal()
goal.elementIds = ["buy_btn", "details_btn"]
goal.interactionType = .anyOf
interMessage.interactionGoal = goal
CometChat.sendInteractiveMessage(message: interMessage, onSuccess: {...}, onError: {...})
Send Scheduler Interactive Message
let interMessage = InteractiveMessage()
interMessage.messageCategory = .interactive
interMessage.type = "scheduler"
interMessage.receiverType = .user
interMessage.receiverUid = "cometchat-uid-2"
interMessage.allowSenderInteraction = true
interMessage.interactiveData = [
"title": "Schedule a Meeting",
"duration": 30,
"bufferTime": 5,
"availability": [
"monday": ["09:00-12:00", "14:00-17:00"],
"tuesday": ["09:00-12:00", "14:00-17:00"],
"wednesday": ["09:00-12:00", "14:00-17:00"]
],
"scheduleElement": [
"elementId": "schedule_btn",
"elementType": "button",
"buttonText": "Schedule",
"disableAfterInteracted": true
],
"goalCompletionText": "Meeting scheduled successfully!"
]
CometChat.sendInteractiveMessage(message: interMessage, onSuccess: {...}, onError: {...})
let interMessage = InteractiveMessage()
interMessage.messageCategory = .interactive
interMessage.type = "form"
interMessage.receiverType = .group
interMessage.receiverUid = "cometchat-guid-1"
interMessage.allowSenderInteraction = true
interMessage.interactiveData = [
"title": "Group Poll",
"formFields": [
[
"elementId": "poll_radio",
"elementType": "radio",
"label": "What's your favorite?",
"optional": false,
"options": [
["label": "Option A", "value": "a"],
["label": "Option B", "value": "b"],
["label": "Option C", "value": "c"]
]
]
],
"submitElement": [
"elementId": "vote_btn",
"elementType": "button",
"buttonText": "Vote",
"disableAfterInteracted": true
]
]
CometChat.sendInteractiveMessage(message: interMessage, onSuccess: {...}, onError: {...})
Interaction Object Properties
| Property | Type | Description |
|---|
| elementId | String | ID of interacted element |
| interactedAt | Double | Timestamp of interaction |
InteractionGoal Object Properties
| Property | Type | Description |
|---|
| elementIds | [String] | IDs of target elements |
| interactionType | InteractionGoalType | .anyAction, .anyOf, .allOf, .none |
Real-time Interactive Message Events
To receive interactive message events, implement CometChatMessageDelegate:
class YourClass: CometChatMessageDelegate {
init() {
CometChat.addMessageListener("listener-id", self)
}
func onInteractiveMessageReceived(_ message: InteractiveMessage) {
print("Interactive message received")
print("Type: \(message.type ?? "")")
print("Interactive Data: \(message.interactiveData ?? [:])")
}
func onInteractionGoalCompleted(_ message: InteractiveMessage) {
print("Interaction goal completed")
print("Message ID: \(message.id)")
}
}
Next Steps
Send Messages
Send text, media, and custom messages
Receive Messages
Listen for incoming messages in real time
Reactions
Add emoji reactions to messages
Mentions
Mention specific users in messages