Any message type (Text, Media, or Custom) can be sent in a thread. Set the parentMessageId using setParentMessageId() to indicate which thread the message belongs to.
The parentMessageId is dynamic and corresponds to the actual id of the parent message you want to reply to. In the code examples below, we use placeholder values like 100 or 1, but in practice, you’ll use the actual message ID obtained from your message list or real-time listener.
TypeScript
JavaScript
let receiverId = "UID", receiverType: string = CometChat.RECEIVER_TYPE.USER, textMessage: CometChat.TextMessage = new CometChat.TextMessage(receiverId, "Hello", receiverType), messageId: number = 100; // Replace with actual parent message IDtextMessage.setParentMessageId(messageId);CometChat.sendMessage(textMessage).then( (message: CometChat.TextMessage) => { console.log('Message sent successfully', message); }, (error: CometChat.CometChatException) => { console.log('Message sending failed', error); });
let UID = "UID";let textMessage = new CometChat.TextMessage(UID, "Hello", CometChat.RECEIVER_TYPE.USER);textMessage.setParentMessageId(100); // Replace with actual parent message IDCometChat.sendMessage(textMessage).then( message => { console.log('Message sent successfully', message); }, err => { console.log('err', err); })
The above snippet sends “Hello” in the thread with parentMessageId 100. 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().
TypeScript
JavaScript
const listenerID: string = "UNIQUE_LISTENER_ID";const activeThreadId: number = 100;CometChat.addMessageListener( listenerID, new CometChat.MessageListener({ onTextMessageReceived: (textMessage: CometChat.TextMessage) => { if (textMessage.getParentMessageId() == activeThreadId) { console.log("Text message received for active thread.", textMessage); } }, onMediaMessageReceived: (mediaMessage: CometChat.MediaMessage) => { if (mediaMessage.getParentMessageId() == activeThreadId) { console.log("Media message received for active thread.", mediaMessage); } }, onCustomMessageReceived: (customMessage: CometChat.CustomMessage) => { if (customMessage.getParentMessageId() == activeThreadId) { console.log("Custom message received for active thread.", customMessage); } } }));
const listenerID = "UNIQUE_LISTENER_ID";const activeThreadId = 100;CometChat.addMessageListener(listenerID,new CometChat.MessageListener({ onTextMessageReceived: textMessage => { if(textMessage.getParentMessageId() == activeThreadId) { console.log("Text message received for active thread.", textMessage); } }, onMediaMessageReceived: mediaMessage => { if(mediaMessage.getParentMessageId() == activeThreadId) { console.log("Media message received for active thread.", mediaMessage); } }, onCustomMessageReceived: customMessage => { if(customMessage.getParentMessageId() == activeThreadId) { console.log("Custom message received for active thread.", customMessage); } }}));
Use MessagesRequestBuilder with setParentMessageId() to fetch messages belonging to a specific thread. Call fetchPrevious() to get messages (max 100 per request).
TypeScript
JavaScript
let limit: number = 30, parentMessageId: number = 1, // Replace with actual parent message ID messagesRequest: CometChat.MessagesRequest = new CometChat.MessagesRequestBuilder() .setLimit(limit) .setParentMessageId(parentMessageId) .build();messagesRequest.fetchPrevious().then( (messages: CometChat.BaseMessage[]) => { console.log("Messages for thread fetched successfully", messages); }, (error: CometChat.CometChatException) => { console.log("Message fetching failed with error:", error); });
let limit = 30;let parentMessageId = 1; // Replace with actual parent message IDlet messagesRequest = new CometChat.MessagesRequestBuilder() .setLimit(limit) .setParentMessageId(parentMessageId) .build();messagesRequest.fetchPrevious().then( messages => { console.log("Messages for thread fetched successfully", messages); }, error => { console.log("Message fetching failed with error:", error); });
The fetchPrevious() method returns an array of BaseMessage objects representing thread replies.
The response is an array of BaseMessage objects, excluding any messages that are replies within a thread. Only top-level messages in the conversation are returned.
Always remove message listeners when they’re no longer needed (e.g., on component unmount or page navigation). Failing to remove listeners can cause memory leaks and duplicate event handling.