- Added AI Agent conversation initialization coroutine extension
- Added
GroupChannel.awaitInitConversation(params: InitConversationParams)suspend function
- Added
- Added AI Agent Message Feedback coroutine extensions
- Added
SendbirdChat.AIAgent.awaitCreateMessageFeedback()suspend function - Added
SendbirdChat.AIAgent.awaitUpdateMessageFeedback()suspend function - Added
SendbirdChat.AIAgent.awaitDeleteMessageFeedback()suspend function
- Added
- Updated chat sdk to version 4.31.1
- Fixed a possible binary compatibility issue when using Chat SDK in multiple products.
- Added support for closing conversation manually for AI Agent in
GroupChannelGroupChannel.awaitCloseConversation()
- Added
onConnectionDelayedcallback toConnectionHandler.- A new callback method that is invoked when the server is overloaded. This callback provides information about the delay time before automatic reconnection. After the delayed time period, the SDK automatically initiates reconnection and triggers the callback sequence:
onReconnectStarted→onReconnectSucceededinterface ConnectionHandler { fun onConnected(userId: String) {} fun onDisconnected(userId: String) {} fun onReconnectStarted() {} fun onReconnectSucceeded() {} fun onReconnectFailed() {} /** * A callback for when the connection is delayed. * * @param retryAfter The time in seconds to wait before the next reconnection attempt. */ fun onConnectionDelayed(retryAfter: Long) {} } runCatching { SendbirdChat.awaitConnect(USER_ID, AUTH_TOKEN) }.onSuccess { user -> // Connection successful }.onFailure { e -> val sendbirdException = e as SendbirdException if (sendbirdException.code == SendbirdError.ERR_CONNECTION_DELAYED) { val data = sendbirdException.data // The delay time in seconds before automatic reconnection val retryAfter: Long = data["retry_after"] as? Long ?: 0 // Server-provided reason code for the delay val message = data["message"] as? String ?: "" // Detailed error message explaining the delay val reasonCode: Int = data["reason_code"] as? Int ?: 0 // The SDK will automatically retry after the specified delay time // and the result will be notified through ConnectionHandler.onReconnectSucceeded(). } }
- A new callback method that is invoked when the server is overloaded. This callback provides information about the delay time before automatic reconnection. After the delayed time period, the SDK automatically initiates reconnection and triggers the callback sequence:
- Added
SendbirdChat.Options.setTypingIndicatorInvalidateTime(invalidateTimeMillis: Long)- Sets typing indicator invalidation time. Defaults to 10000 (10 seconds)
- Added a condition in
AIAgentGroupChannelListQuery.belongsTo()to exclude non–AI Agent and non–Desk channels from the query results.
- Added new properties to
Conversation:handedOverAt: Long?— The timestamp when the conversation was handed over to a human agent.aiAgentId: String?— The ID of the AI agent associated with the conversation.
- Added new properties to
GroupChannel:helpdesk: HelpdeskInfo— The helpdesk information of this channel for accessing helpdesk-related data.
- Improved SQL safety in SDK local DB
-
Added support for managing context objects for AI Agent in
GroupChannelawaitGetContextObject(aiAgentId: String): StringawaitUpdateContextObject(aiAgentId: String, contextMap: Map<String, String>): StringawaitPatchContext(aiAgentId: String, contextMap: Map<String, String>): String
-
Added AI Agent group channel query APIs
awaitGetMyGroupChannelChangeLogsByTimestamp(ts: Long, params: AIAgentGroupChannelChangeLogsParams)awaitGetMyGroupChannelChangeLogsByToken(token: String, params: AIAgentGroupChannelChangeLogsParams)awaitGetUnreadMessageCount(params: AIAgentGroupChannelUnreadMessageCountParams)
- Updated chat sdk to version 4.27.1
- Updated chat sdk to version 4.27.0
- Added
awaitMarkAsUnread(message: BaseMessage)toGroupChannel. This new feature changes the read status of messages in the channel tounread, starting from the specified message.
suspend fun GroupChannel.awaitMarkAsUnread(message: BaseMessage)- Added AIAgent extension functions:
SendbirdChat.AIAgent.awaitRequestMessengerSettings(params: MessengerSettingsParams): String- Suspended function to request the chatbot’s settings using the provided parameters.
SendbirdChat.AIAgent.awaitGetMessageTemplateList(params: AIAgentMessageTemplateListParams): AIAgentMessageTemplatesResult- Suspended function to retrieve a list of message templates for the AI Agent.
GroupChannel.awaitSubmitCSAT(params: CSATSubmitParams): Conversation- Suspended function to submit a Customer Satisfaction (CSAT) score for conversations with the AI Agent chatbot.
GroupChannel.awaitMarkConversationAsHandoff(): Conversation- Suspended function to request handoff from the AI Agent to a human agent for the current conversation.
ConversationListQuery.awaitNext()- Suspended function to asynchronously fetch a list of conversations from a ConversationListQuery.
- Added
GroupChannel.messageDeletionTimestamprepresenting the message deletion timestamp from the message archive.
- Added
AuthTokenType - Added authTokenType parameter to
authenticate(),awaitAuthenticate()(Default Value: AuthTokenType.SESSION_TOKEN)
// using AccessToken
SendbirdChat.authenticate(userId: USER_ID, authToken: ACCESS_TOKEN, authTokenType: AuthTokenType.ACCESS_TOKEN)
SendbirdChat.awaitAuthenticate(userId: USER_ID, authToken: ACCESS_TOKEN, authTokenType: AuthTokenType.ACCESS_TOKEN)
// using SessionToken
SendbirdChat.authenticate(userId: USER_ID, authToken: SESSION_TOKEN)
SendbirdChat.authenticate(userId: USER_ID, authToken: SESSION_TOKEN, authTokenType: AuthTokenType.SESSION_TOKEN)
SendbirdChat.awaitAuthenticate(userId: USER_ID, authToken: SESSION_TOKEN)
SendbirdChat.awaitAuthenticate(userId: USER_ID, authToken: SESSION_TOKEN, authTokenType: AuthTokenType.SESSION_TOKEN)- Performed internal modularization to enhance flexibility and stability.
-
Supports for
Pollfeature is added for all message types.- Added
pollandapplyPoll(poll: Poll)method inBaseMessage. - Added
pollIdinFileMessageCreateParamsandMultipleFilesMessageCreateParams.
- Added
-
Added
sampledReactedUserInfoListinReactionto support getting reaction-related data -
Added
ReactedUserInfo -
Deprecated
sampledUserIdsinReaction
class Reaction {
val sampledReactedUserInfoList: List<ReactedUserInfo>
}- Improved sender profile update in super group channel.
- Fixed a bug where connecting fails with a user ID containing special characters.
SDK now supports Custom Report Categories configured through Sendbird Dashboard, which takes effect after restarting the app. Previous report categories will remain until app restart.
- Added
SendbirdChat.awaitGetReportCategoryInfoList() - Added
awaitReport(ReportCategoryInfo, String?) - Added
awaitReportUser(User, ReportCategoryInfo, String?) - Added
awaitReportMessage(BaseMessage, ReportCategoryInfo, String?) - Deprecated
awaitReport(ReportCategory, String?) - Deprecated
awaitReportUser(User, ReportCategory, String?) - Deprecated
awaitReportMessage(BaseMessage, ReportCategory, String?)
- Added new properties in
Reactionto support more users
class Reaction {
// A list of sampled userIds that have reacted to this Reaction.
val sampledUserIds: List<String>
// A count of the number of users who have reacted to this.
var count: Long
// A flag indicating whether the current user has reacted to this.
var hasCurrentUserReacted: Boolean
}- Added interfaces for
MessageFormto work with Sendbird dashboard andForminterfaces have been deprecated- Added
awaitSubmitMessageForm()method inBaseMessageclass - Deprecated
awaitSubmitForm(Form)method inBaseMessageclass
- Added
- Added
SendbirdChat.getUnreadItemCount(GroupChannelUnreadItemCountParams, ResultHandler<Map<UnreadItemKey, Int>>?)andSendbirdChat.awaitGetUnreadItemCount(GroupChannelUnreadItemCountParams)method to support filtering unread message count by custom types
Support pinned message in OpenChannel
- Expanded
awaitPinMessage(),awaitUnpinMessage()toBaseChannelto supportOpenChannel
-
Replaced all ktx interfaces with either an
awaitprefix or aFlowpostfix and deprecated the existing interfaces.- This is to prevent issue with auto-import within the IDE where the interface cannot be imported automatically due to the previous interfaces having the same name as the original Chat SDK interfaces.
/** * All `suspend fun` now has an `await` prefix. */ // Previous suspend fun SendbirdChat.connect(userId: String, authToken: String? = null, apiHost: String? = null, wsHost: String? = null): AuthUser // New suspend fun SendbirdChat.awaitConnect(userId: String, authToken: String? = null, apiHost: String? = null, wsHost: String? = null): AuthUser /** * All methods returning a `Flow` now has a `Flow` postfix. */ // Previous fun SendbirdChat.init(initParams: InitParams): Flow<InitResult> // New fun SendbirdChat.initFlow(initParams: InitParams): Flow<InitResult>
-
Added interface for
SendbirdPushHelperclass -
Added
SendbirdChat.awaitAuthenticate()as a replacement forSendbirdChat.authenticateFeed() -
Added
SendbirdChat.awaitGetTotalUnreadNotificationCount()
- Added
suspend funfor Chat SDK'sQueryclasses
Added MessageTemplate feature for UIKit to render messages with templates.
- Added suspend function
SendbirdChat.getMessageTemplate(String): MessageTemplateandSendbirdChat.getMessageTemplatesByToken(String?, MessageTemplateListParams): MessageTemplatesResult - Added result handler function for message templates
SendbirdChat.getMessageTemplate(String, ResultHandler<MessageTemplate>?)andfun SendbirdChat.getMessageTemplatesByToken(String?, MessageTemplateListParams, ResultHandler<MessageTemplatesResult>?).
- Removed extension function in
BaseMessagerelated to threaded message released inv4.15.2
- Added new Kotlin Extension for SendbirdChat SDK
class User { suspend fun createMetaData(metaDataMap: Map<String, String>): Map<String, String> suspend fun updateMetaData(metaDataMap: Map<String, String>): Map<String, String> suspend fun deleteMetaData(key: String) suspend fun deleteAllMetaData() } class Poll { companion object { suspend fun create(params: PollCreateParams): Poll suspend fun get(params: PollRetrievalParams): Poll } } class PollOption { companion object { suspend fun get(params: PollOptionRetrievalParams): PollOption } }
- Added extension function in
BaseMessagerelated to threaded messageclass BaseMessage { suspend fun markThreadAsRead() suspend fun setPushNotificationEnabled(enabled: Boolean) }
- Improved stability
- Introducing new Kotlin Extension for SendbirdChat SDK
- Supported for all public interfaces