Use this file to discover all available pages before exploring further.
AI Integration Quick Reference
Kotlin
Java
// Send message in threadval textMessage = TextMessage("UID", "Reply text", CometChatConstants.RECEIVER_TYPE_USER)textMessage.parentMessageId = 100CometChat.sendMessage(textMessage, object : CallbackListener<TextMessage>() { override fun onSuccess(message: TextMessage) { } override fun onError(e: CometChatException) { }})// Fetch thread messagesval messagesRequest = MessagesRequest.MessagesRequestBuilder() .setParentMessageId(100) .setLimit(30) .build()messagesRequest.fetchPrevious(callback)// Exclude threads from main conversationval messagesRequest = MessagesRequest.MessagesRequestBuilder() .setUID("user_uid") .hideReplies(true) .build()
// Send message in threadTextMessage textMessage = new TextMessage("UID", "Reply text", CometChatConstants.RECEIVER_TYPE_USER);textMessage.setParentMessageId(100);CometChat.sendMessage(textMessage, new CallbackListener<TextMessage>() { @Override public void onSuccess(TextMessage message) { } @Override public void onError(CometChatException e) { }});// Fetch thread messagesMessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder() .setParentMessageId(100) .setLimit(30) .build();messagesRequest.fetchPrevious(callback);// Exclude threads from main conversationMessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder() .setUID("user_uid") .hideReplies(true) .build();
Messages that are started from a particular message are called Threaded messages or simply threads. Each Thread is attached to a message which is the Parent message for that thread.
Any message type (TextMessage, MediaMessage, or CustomMessage) can be sent in a thread. Set the parentMessageId using setParentMessageId() to indicate which thread the message belongs to.
Java
Kotlin
TextMessage textMessage = new TextMessage(UID, "Hello", CometChatConstants.RECEIVER_TYPE_USER);textMessage.setParentMessageId(100);CometChat.sendMessage(textMessage, new CometChat.CallbackListener<TextMessage>() { @Override public void onSuccess(TextMessage textMessage) { Log.d(TAG, "Text Message Sent successfully"); } @Override public void onError(CometChatException e) { Log.d(TAG, "Text Message Failed : " + e.getMessage()); }});
val textMessage = TextMessage(UID, "Hello", CometChatConstants.RECEIVER_TYPE_USER)textMessage.parentMessageId = 100CometChat.sendMessage(textMessage, object : CallbackListener<TextMessage?>() { override fun onSuccess(textMessage: TextMessage?) { Log.d(TAG, "Text Message Sent successfully") } override fun onError(e: CometChatException) { Log.d(TAG, "Text Message Failed : " + e.message) }})
Media and Custom messages can also be sent in threads using setParentMessageId().
Use MessageListener to receive real-time thread messages. Check if the received message belongs to the active thread using getParentMessageId().
Java
Kotlin
private String listenerID = "UNIQUE_LISTENER_ID";private int activeThreadId = 100;CometChat.addMessageListener(listenerID, new CometChat.MessageListener() { @Override public void onTextMessageReceived(TextMessage textMessage) { if(message.getParentMessageId() == activeThreadId) { Log.d(TAG,"Text Message Received for active thread"); } } @Override public void onMediaMessageReceived(MediaMessage mediaMessage) { if(message.getParentMessageId() == activeThreadId) { Log.d(TAG,"Media Message Received for active thread"); } } @Override public void onCustomMessageReceived(CustomMessage customMessage) { if(message.getParentMessageId() == activeThreadId) { Log.d(TAG,"Custome Message Received for active thread"); } }});
val listenerID = "UNIQUE_LISTENER_ID"val activeThreadId = 100CometChat.addMessageListener(listenerID, object : MessageListener() { override fun onTextMessageReceived(textMessage: TextMessage) { if (message!!.parentMessageId === activeThreadId) { Log.d(TAG, "Text Message Received for active thread") } } override fun onMediaMessageReceived(mediaMessage: MediaMessage) { if (message!!.parentMessageId === activeThreadId) { Log.d(TAG, "Media Message Received for active thread") } } override fun onCustomMessageReceived(customMessage: CustomMessage) { if (message!!.parentMessageId === activeThreadId) { Log.d(TAG, "Custome Message Received for active thread") } }})
Use MessagesRequestBuilder with setParentMessageId() to fetch messages belonging to a specific thread. Call fetchPrevious() to get messages (max 100 per request).
val messagesRequest: MessagesRequest = neMessagesRequest.MessagesRequestBuilder() .setLimit(30) .setUID("cometchat-uid-1") .hideReplies(true) .build()messagesRequest.fetchPrevious(object : CallbackListener<List<BaseMessage?>?>() { override fun onSuccess(messages: List<BaseMessage?>?) { Log.d(TAG, "Messages for thread fetched successfully") } override fun onError(e: CometChatException) { Log.d(TAG, "Message Fetching failed : " + e.message) }})
The above snippet will return messages between the logged in user and cometchat-uid-1 excluding all the threaded messages belonging to the same conversation.