Message threading
Message threading is a feature that allows users to ask questions, give feedback or add context to a specific message without disrupting the conversation flow. A message thread refers to a collection of messages grouped together, consisting of a parent message and its replies. It can have the following elements:
- A message can have a thread of replies.
- A message that has a thread of replies is a parent message.
- A parent message and its threaded replies are collectively called a message thread.
- Every message within a thread, whether it's parent or reply, is a threaded message.
- A message that doesn't have any replies is an unthreaded message.
Benefits
Message threading can be widely used to help conversations flow smoothly while keeping users engaged. Message replies in a thread are common among popular messaging platforms, such as Slack and iMessage.
-
Conversation flow: Without message threading, it's hard to specify which message a channel member is responding to. Users would have to explain the context of their response, potentially confusing other channel members and distracting them from reading new messages. Message threads can help everyone stay engaged and carry on their conversation without any interferences.
-
In-depth discussions: By allowing users to reply to each other's messages in a thread, they can have more in-depth conversations on one topic. They're able to ask follow-up questions or provide more detailed explanations to a specific message without interrupting others in the channel. Message threads can encourage users to start topic-specific discussions separate from the main channel conversation.
Limitations
Refer to the following limitations before using the message threading feature:
- Message threading doesn't integrate with SyncManager.
- SDK only supports 1-depth threads, meaning you can only add reply messages to non-reply messages. You can't add a reply to a reply message.
- Message threading is limited to text and file messages. You can't send admin messages as replies or add replies to admin messages.
List messages along with their replies
You can retrieve messages and their replies.
Load channel messages
The loadPreviousMessagesWithLimit:reverse:completionHandler:
method of a SBDPreviousMessageListQuery
instance returns a list of SBDBaseMessage
objects. With this method, you can retrieve previous messages in a specific channel.
SBDPreviousMessageListQuery
The following table lists the properties of this class.
Property name | Type | Description |
---|---|---|
includeThreadInfo | bool | Determines whether to include the thread information of the messages in the results when the results contain parent messages. |
replyType | enum | Specifies the type of message to include in the results. |
includeParentMessageInfo | bool | Determines whether to include the information of the parent messages in the result. (Default: false) |
| bool | (Deprecated) Determines whether replies are included in the results. |
| bool | (Deprecated) Determines whether to include the parent message text in the results when the retrieved messages are replies in a thread. If the type of the parent message is |
loadPreviousMessagesWithLimit:reverse:completionHandler:
The following table lists the parameters that this method supports.
Parameter name | Description |
---|---|
LIMIT | Type: NSInteger |
REVERSE | Type: BOOL |
Load messages by timestamp or message ID
The getMessagesByTimestamp:params:completionHandler:
and getMessagesByMessageId:params:completionHandler:
methods of a SBDBaseChannel
instance return a list of SBDBaseMessage
objects. By using these methods, you can retrieve messages in a specific channel according to a SBDMessageListParams
object.
SBDMessageListParams
The following table lists the properties of this class.
Property name | Description |
---|---|
previousResultSize | Type: NSInteger |
nextResultSize | Type: NSInteger |
isInclusive | Type: BOOL |
reverse | Type: BOOL |
includeThreadInfo | Type: BOOL |
replyType | Type: ENUM |
includeParentMessageInfo | Type: BOOL |
| (Deprecated) Type: BOOL |
| (Deprecated) Type: BOOL |
By timestamp
By using the getMessagesByTimestamp:params:completionHandler:
method, you can retrieve a set number of messages of previous and next messages on both sides of a specific timestamp in a channel.
List of arguments
Argument | Type | Description |
---|---|---|
| long | Specifies the timestamp to be the reference point for messages to retrieve, in Unix milliseconds format. Messages sent before or after the timestamp can be retrieved. |
By message ID
By using the getMessagesByMessageId:params:completionHandler:
method, you can retrieve a set number of previous and next messages on both sides of a specific message ID in a channel.
List of arguments
Argument | Type | Description |
---|---|---|
| long long | Specifies the message ID to be the reference point for messages to retrieve. Messages sent before or after the message with the matching message ID can be retrieved. |
List replies of a parent message
You can retrieve replies of a parent message if you can specify the parent message like the following. First, create an SBDThreadedMessageListParams
object and set properties related to the thread where the target replies belong to.
SBDThreadedMessageListParams
Property | Description |
---|---|
previousResultSize | Type: NSInteger |
nextResultSize | Type: NSInteger |
isInclusive | Type: BOOL |
reverse | Type: BOOL |
includeParentMessageInfo | Type: BOOL |
| (Deprecated) Type: BOOL |
With the timestamp of the parent message, you can retrieve its replies by passing an SBDThreadedMessageListParams
object as an argument to the parameter in the getThreadedMessagesByTimestamp:params:completionHandler:
method.
List of arguments
Argument | Type | Description |
---|---|---|
| long long | Specifies the timestamp to be the reference point of the retrieval, in Unix milliseconds format. |
View a single message
You can retrieve a specific message by creating and passing the SBDMessageRetrievalParams
object as a parameter to the getMessageWithParams:completionHandler:
method.
SBDMessageRetrievalParams
Property | Description |
---|---|
messageID | Type: long long |
channelType | Type: SBDChannelType |
channelURL | Type: NSString |
Reply to a message
You can reply to a specific message in a channel through the sendUserMessageWithParams:completionHandler:
or sendFileMessageWithParams:completionHandler:
method. To do so, you should create a SBDUserMessageParams
or a SBDFileMessageParams
object and then specify the parentMessageId
property of the object. Sending reply messages works the same way as sending regular messages to a channel except replies have an additional parentMessageId
property.
Reply with a text message
When replying to a message through the sendUserMessageWithParams:completionHandler:
method, you should specify and pass a SBDUserMessageParams
object to the method as a parameter.
SBDUserMessageParams
Property | Type | Description |
---|---|---|
parentMessageId | long long | Specifies the unique ID of a parent message which has a thread of replies. If the message sent through the |
Reply with a file message
When replying with a file message through the sendFileMessageWithParams:completionHandler:
method, you should specify and pass a SBDFileMessageParams
object to the method as a parameter.
SBDFileMessageParams
Property | Type | Description |
---|---|---|
parentMessageId | long long | Specifies the unique ID of a parent message which has a thread of replies. If the message sent through the |
List changelogs
You can retrieve message changelogs.
Load message changelogs
Each message changelog has distinct properties such as a timestamp that indicates when a message was updated and a unique ID of a deleted message. Based on these two properties, you can retrieve message changelogs in two different ways: either by timestamp or by token. Both getMessageChangeLogsSinceToken:params:completionHandler:
and getMessageChangeLogsSinceTimestamp:params:completionHandler:
methods require a parameter SBDMessageChangeLogsParams
object to determine what messages to return.
SBDMessageChangeLogsParams
The following table lists the properties of this class.
Property name | Type | Description |
---|---|---|
includeThreadInfo | bool | Determines whether to include the thread information of the messages in the results when the results contain parent messages. |
replyType | enum | Specifies the type of message to include in the results. |
includeParentMessageInfo | bool | Determines whether to include the information of the parent messages in the result. (Default: false) |
| bool | (Deprecated) Determines whether replies are included in the results. |
| bool | (Deprecated) Determines whether to include the parent message text in the results when the retrieved messages are replies in a thread. If the type of the parent message is |
By timestamp
You can retrieve message changelogs by specifying a timestamp. The results will include changelogs that were created after the specified timestamp.
List of arguments
Argument | Type | Description |
---|---|---|
| long long | Specifies the timestamp to be the reference point for changelogs to retrieve, in Unix milliseconds format. |
By token
You can also retrieve message changelogs by specifying a token. The token is an opaque string that marks the starting point of the next page in the result set and it is included in the callback of the previous call. Based on the token, the next page will start with changelogs that were created after the specified token.
Event delegate
Once a reply is created or deleted from a thread, the channel:didUpdateThreadInfo:
event delegate method is invoked. The method returns a SBDThreadInfoUpdateEvent
object that has the latest information about the thread. This object needs to be applied to the parent message object.
Note: Like other messages, when a reply is created in a channel, the
onMessageReceived()
method of the channel event handler in client apps will be called.
List of parameters
Parameter name | Description |
---|---|
channel | Type: SBDBaseChannel |
threadInfoUpdateEvent | Type: SBDThreadInfoUpdateEvent |