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.

MethodDescription
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

PropertyTypeDescription
receiverUidStringUID or GUID of recipient
receiverTypeReceiverType.user or .group
typeStringform, card, scheduler, or custom
interactiveData[String: Any]JSON structure for content
allowSenderInteractionBoolCan sender interact (default: false)
interactionGoalInteractionGoalCompletion criteria
messageCategoryMessageCategory.interactive

Interaction Goal Types

TypeDescriptionValue
Any ActionGoal completed if any interaction occurs.anyAction
Any OfGoal achieved if any specified interaction occurs.anyOf
All OfGoal completed when all specified interactions occur.allOf
NoneGoal is never completed.none

Form Element Types

Element TypeDescription
textInputSingle or multi-line text input
dropdownDropdown select with options
checkboxMultiple selection checkboxes
radioSingle selection radio buttons
singleSelectSingle selection list
buttonAction button (submit, navigate)

Button Action Types

Action TypeDescription
urlNavigationOpens a URL in browser
apiActionMakes an API call with specified parameters
customActionCustom action handled by app

Send Form Interactive Message

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: {...})

Send Form to Group

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

PropertyTypeDescription
elementIdStringID of interacted element
interactedAtDoubleTimestamp of interaction

InteractionGoal Object Properties

PropertyTypeDescription
elementIds[String]IDs of target elements
interactionTypeInteractionGoalType.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