Skip to main content
Version: v4

Retrieve Conversations

Conversations provide the last messages for every one-on-one and group conversation the logged-in user is a part of. This makes it easy for you to build a Recent Chat list.

Retrieve List of Conversations

In other words, as a logged-in user, how do I retrieve the latest conversations that I've been a part of?

To fetch the list of conversations, you can use the ConversationsRequest class. To use this class i.e. to create an object of the ConversationsRequest class, you need to use the ConversationsRequestBuilder class. The ConversationsRequestBuilder class allows you to set the parameters based on which the conversations are to be fetched.

The ConversationsRequestBuilder class allows you to set the below parameters:

Set Limit

This method sets the limit i.e. the number of conversations that should be fetched in a single iteration.

ConversationsRequest conversationRequest = new ConversationsRequest.ConversationsRequestBuilder()
.setLimit(100)
.build();

Set Conversation Type

This method can be used to fetch user or group conversations specifically. The conversationType variable can hold one of the below two values:

  • user - Only fetches user conversation.
  • group - Only fetches group conversations.

If none is set, the list of conversations will include both user and group conversations.

ConversationsRequest conversationsRequest = new ConversationsRequest.ConversationsRequestBuilder()
.setLimit(50)
.setConversationType(CometChatConstants.CONVERSATION_TYPE_USER)
.build();

With User and Group Tags

This method can be used to fetch the user/group tags in the Conversation Object. By default the value is false.

ConversationsRequest conversationsRequest = new ConversationsRequest.ConversationsRequestBuilder()
.setLimit(50)
.withUserAndGroupTags(true)
.build();

Set User Tags

This method fetches user conversations that have the specified tags.

List<String> tags = new ArrayList<>();
tags.add("tag_1");
conversationsRequest = new ConversationsRequest.ConversationsRequestBuilder()
.setLimit(10)
.setUserTags(tags)
.build();

Set Group Tags

List<String> tags = new ArrayList<>();
tags.add("tag_1");
conversationsRequest = new ConversationsRequest.ConversationsRequestBuilder()
.setLimit(10)
.setGroupTags(tags)
.build();

This method fetches group conversations that have the specified tags.

With Tags

This method makes sure that the tags associated with the conversations are returned along with the other details of the conversations. The default value for this parameter is false

ConversationsRequest conversationsRequest = new ConversationsRequest.ConversationsRequestBuilder()
.setLimit(50)
.withTags(true)
.build();

Set Tags

This method helps you fetch the conversations based on the specified tags.

List<String> tags = new ArrayList<>();
tags.add("archived");
ConversationsRequest conversationsRequest = new ConversationsRequest.ConversationsRequestBuilder()
.setLimit(50)
.setTags(tags)
.build();

Include Blocked Users

This method helps you fetch the conversations of users whom the logged-in user has blocked.

ConversationsRequest conversationsRequest = new ConversationsRequest.ConversationsRequestBuilder()
.setLimit(50)
.includeBlockedUsers(true)
.build();

With Blocked Info

This method helps you fetch the conversations of users whom the logged-in user has blocked.

ConversationsRequest conversationsRequest = new ConversationsRequest.ConversationsRequestBuilder()
.setLimit(50)
.withBlockedInfo(true)
.build();

Finally, once all the parameters are set to the builder class, you need to call the build() method to get the object of the ConversationsRequest class.

Once you have the object of the ConversationsRequest class, you need to call the fetchNext() method. Calling this method will return a list of Conversation objects containing X number of conversations depending on the limit set.

A Maximum of only 50 Conversations can be fetched at once.

ConversationsRequest conversationsRequest = new ConversationsRequest.ConversationsRequestBuilder().setLimit(50).build();

conversationsRequest.fetchNext(new CometChat.CallbackListener<List<Conversation>>() {
@Override
public void onSuccess(List<Conversation> conversations) {
// Hanlde list of conversations

}

@Override
public void onError(CometChatException e) {
// Hanlde failure
}
});

The Conversation object consists of the following fields:

FieldInformation
conversationIdID of the conversation
conversationTypeType of conversation (user/group)
lastMessageLast message the conversation
conversationWithUser or Group object containing the details of the user or group
unreadMessageCountUnread message count for the conversation

Tag Conversation

In other words, as a logged-in user, how do I tag a conversation?

To tag a specific conversation, you can use the tagConversation() method. The tagConversation() method accepts three parameters.

  1. conversationWith: UID/GUID of the user/group whose conversation you want to fetch.

  2. conversationType: The conversationType variable can hold one of the below two values:

    1. user - Only fetches user conversation.
    2. group - Only fetches group conversations.
  3. tags: The tags variable will be a list of tags you want to add to a conversation.

String id = "cometchat-uid-1"; //id of the user/group
String conversationType = "user";
List<String> tags = new ArrayList<>();
tags.add("archived");

CometChat.tagConversation(id, conversationWith, tags, new CometChat.CallbackListener<Conversation>() {
@Override
public void onSuccess(Conversation conversation) {
Log.d(TAG, conversation.toString());
}

@Override
public void onError(CometChatException e) {
Log.d(TAG, e.getMessage());
}
});
info

The tags for conversations are one-way. This means that if user A tags a conversation with user B, that tag will be applied to that conversation only for user A.

Retrieve Single Conversation

In other words, as a logged-in user, how do I retrieve a specific conversation?

In order to fetch a specific conversation, you can use the getConversation method. The getConversation method accepts two parameters.

  1. conversationWith: UID/GUID of the user/group whose conversation you want to fetch.
  2. conversationType: The conversationType variable can hold one of the below two values:
  • user - Only fetches user conversation.
  • group - Only fetches group conversations.
CometChat.getConversation(conversationWith, conversationType, new CometChat.CallbackListener<Conversation>() {
@Override
public void onSuccess(Conversation conversation) {
// Handle getConversation success
}

@Override
public void onError(CometChatException e) {
// Handle getConversation error
}
});

Convert Messages to Conversations

As per our Receive Messages guide, for real-time messages, you will always receive Message objects and not Conversation objects. Thus, you will need a mechanism to convert the Message object to a Conversation object. You can use the getConversationFromMessage method for this purpose.

Conversation conversation = CometChatHelper.getConversationFromMessage(message);
info

While converting a Message object to a Conversation object, the unreadMessageCount & tags will not be available in the Conversation object. The unread message count needs to be managed in your client-side code.