Threads enable users to create a separate conversation from a specific message within a chat group to keep the main chat uncluttered.
This page shows how to use the Agora Chat SDK to send, receive, recall, and retrieve thread messages in your app.
The Agora Chat SDK provides the ChatManager
, ChatMessage
, and ChatMessageThread
classes for thread messages, which allows you to implement the following features:
The following figure shows the workflow of how clients send and receive peer-to-peer messages.
As shown in the figure, the workflow of peer-to-peer messaging is as follows:
Before proceeding, ensure that you meet the following requirements:
This section describes how to call the APIs provided by the Agora Chat SDK to implement thread features.
Sending a thread message is similar to sending a message in a chat group. The difference lies in the isChatThread
field, as shown in the following code sample:
// Sets `targetId` to the ID of the chat group that receives the message.
// Sets `content` to the message content.
// Sets `chatType` to a group chat as a thread that belongs to a chat group.
// Sets `isChatThread` to `true` to mark this message as a thread message.
ChatMessage message = ChatMessage.createTextMessage(targetId, content, chatType, {isChatThread});
// Implements `ChatMessageCallback` to listen for the message sending event.
const callback = new ChatMessageCallback();
// Sends the message.
ChatClient.getInstance()
.chatManager.sendMessage(message, callback)
.then(() => {
// Prints the log here if the method call succeeds.
console.log("send message operation success.");
})
.catch((reason) => {
// Prints the log here if the method call fails.
console.log("send message operation fail.", reason);
});
For more information about sending a message, see Send Messages.
Once a thread has a new message, all chat group members receive the ChatMessageEventListener#onChatMessageThreadUpdated
callback. Thread members can also listen for the ChatMessageEventListener#onMessagesReceived
callback to receive thread messages, as shown in the following code sample:
// Inherits and implements `ChatMessageEventListener`.
class ChatMessageEvent implements ChatMessageEventListener {
// Occurs when a message is received.
onMessagesReceived(messages: ChatMessage[]): void {
console.log(`onMessagesReceived: `, messages);
}
// Occurs when the thread has a new message.
onChatMessageThreadUpdated(msgThread: ChatMessageThreadEvent): void {
console.log(`onChatMessageThreadUpdated: `, msgThread);
}
}
// Adds the message listener.
const listener = new ChatMessageEvent();
ChatClient.getInstance().chatManager.addMessageListener(listener);
// Removes the message listener.
ChatClient.getInstance().chatManager.removeMessageListener(listener);
// Removes all the message listeners.
ChatClient.getInstance().chatManager.removeAllMessageListener();
For more information about receiving a message, see Receive Messages.
For details about how to recall a message, refer to Recall Messages.
Once a message is recalled in a thread, all chat group members receive the ChatMessageEventListener#onChatMessageThreadUpdated
callback. Thread members can also listen for the ChatMessageEventListener#onMessagesRecalled
callback, as shown in the following code sample:
// Inherits and implements `ChatMessageEventListener`.
class ChatMessageEvent implements ChatMessageEventListener {
// Occurs when a message is recalled.
onMessagesRecalled(messages: ChatMessage[]): void {
console.log(`onMessagesRecalled: `, messages);
}
// Occurs when a thread message is recalled.
onChatMessageThreadUpdated(msgThread: ChatMessageThreadEvent): void {
console.log(`onChatMessageThreadUpdated: `, msgThread);
}
}
For details about how to retrieve messages from the server, see Retrieve Conversations and Messages from Server.