domain and extensions
no.kindly.chatsdk.chat.domain
MessageChat
data class
data class MessageChat(val systemDialogMessageType: SystemDialogueMessageType? = null, val sessionId: String? = null, val botId: Int? = null, val chatId: String? = null, val chatSource: String? = null, val chatLanguageCode: String? = null, val fromBot: Boolean? = false, val sender: String? = null, val replyToId: String? = null, val lastUserMessageId: String? = null, val skillSubscriptionId: String? = null, val isFollowup: Boolean? = null, val message: String?, val messageFormat: MessageFormatType? = null, val attachments: List<String> = listOf(), val attachmentIds: List<String>? = listOf(), val messageWithKindlyEntities: String? = null, var oEmbedResponse: OEmbedData? = null, val labelsTriggered: List<String> = listOf(), val imageCarousel: List<ImageItem>? = null, val imageCarouselSize: Int? = null, val urlTrigger: String? = null, val videoSource: String? = null, val thonImageAboveText: Boolean? = null, val exchangeType: String? = null, val exchangeId: String? = null, val title: String? = null, val parentExchangeId: String? = null, val chatbubbleHideInputField: Boolean? = null, val webhookUrl: String? = null, val score: Double? = null, val handler: String? = null, val triggeredChatStart: Boolean? = null, val replyType: String? = null, val fromWebhook: Boolean? = null, val agentJoined: Boolean? = null, val suggestions: List<SuggestionSDK> = listOf(), val emailReferences: List<String>? = listOf(), val emailFrom: List<String>? = listOf(), val emailTo: List<String>? = listOf(), val emailCc: List<String>? = listOf(), var created: String? = null, val v: Int? = null, var id: String? = null, val isMine: Boolean = false, val typing: Boolean = false, val isFile: Boolean = false, val buttons: List<ButtonChat> = mutableListOf(), val duringBusinessHours: Boolean? = null, val handoverRequestWhenTriggered: Boolean? = null, val name: String? = null, val avatar: String? = null, val systemDialogueCategory: SystemDialogueCategoryType? = null, val form: FormSDK? = null, val messageReferences: List<ChatMessageReferenceModel>? = listOf(), val eventMessage: String? = null, val temporaryId: String? = null, val newContext: Map<String, String>? = null, bubbleIndex: Int? = null)Represents a chat message in the Kindly SDK. Received via the KindlySDKInteraction.didPressButton callback as part of the chat log.
Member | Declaration | Description |
|---|---|---|
MessageChat | constructor(systemDialogMessageType: SystemDialogueMessageType? = null, sessionId: String? = null, botId: Int? = null, chatId: String? = null, chatSource: String? = null, chatLanguageCode: String? = null, fromBot: Boolean? = false, sender: String? = null, replyToId: String? = null, lastUserMessageId: String? = null, skillSubscriptionId: String? = null, isFollowup: Boolean? = null, message: String?, messageFormat: MessageFormatType? = null, attachments: List<String> = listOf(), attachmentIds: List<String>? = listOf(), messageWithKindlyEntities: String? = null, oEmbedResponse: OEmbedData? = null, labelsTriggered: List<String> = listOf(), imageCarousel: List<ImageItem>? = null, imageCarouselSize: Int? = null, urlTrigger: String? = null, videoSource: String? = null, thonImageAboveText: Boolean? = null, exchangeType: String? = null, exchangeId: String? = null, title: String? = null, parentExchangeId: String? = null, chatbubbleHideInputField: Boolean? = null, webhookUrl: String? = null, score: Double? = null, handler: String? = null, triggeredChatStart: Boolean? = null, replyType: String? = null, fromWebhook: Boolean? = null, agentJoined: Boolean? = null, suggestions: List<SuggestionSDK> = listOf(), emailReferences: List<String>? = listOf(), emailFrom: List<String>? = listOf(), emailTo: List<String>? = listOf(), emailCc: List<String>? = listOf(), created: String? = null, v: Int? = null, id: String? = null, isMine: Boolean = false, typing: Boolean = false, isFile: Boolean = false, buttons: List<ButtonChat> = mutableListOf(), duringBusinessHours: Boolean? = null, handoverRequestWhenTriggered: Boolean? = null, name: String? = null, avatar: String? = null, systemDialogueCategory: SystemDialogueCategoryType? = null, form: FormSDK? = null, messageReferences: List<ChatMessageReferenceModel>? = listOf(), eventMessage: String? = null, temporaryId: String? = null, newContext: Map<String, String>? = null, bubbleIndex: Int? = null) | |
agentJoined | val agentJoined: Boolean? | |
attachmentIds | val attachmentIds: List<String>? | |
attachments | val attachments: List<String> | |
avatar | val avatar: String? | |
botId | val botId: Int? | |
buttons | val buttons: List<ButtonChat> | |
chatbubbleHideInputField | val chatbubbleHideInputField: Boolean? | |
chatId | val chatId: String? | |
chatLanguageCode | val chatLanguageCode: String? | |
chatSource | val chatSource: String? | |
created | var created: String? | |
duringBusinessHours | val duringBusinessHours: Boolean? | |
emailCc | val emailCc: List<String>? | |
emailFrom | val emailFrom: List<String>? | |
emailReferences | val emailReferences: List<String>? | |
emailTo | val emailTo: List<String>? | |
eventMessage | val eventMessage: String? | |
exchangeId | val exchangeId: String? | |
exchangeType | val exchangeType: String? | |
form | val form: FormSDK? | |
fromBot | val fromBot: Boolean? | |
fromWebhook | val fromWebhook: Boolean? | |
handler | val handler: String? | |
handoverRequestWhenTriggered | val handoverRequestWhenTriggered: Boolean? | |
hasOEmbedResponse | val hasOEmbedResponse: Boolean | |
id | var id: String? | |
imageCarousel | val imageCarousel: List<ImageItem>? | |
imageCarouselSize | val imageCarouselSize: Int? | |
isFile | val isFile: Boolean | |
isFollowup | val isFollowup: Boolean? | |
isMine | val isMine: Boolean | |
labelsTriggered | val labelsTriggered: List<String> | |
lastUserMessageId | val lastUserMessageId: String? | |
message | val message: String? | |
messageFormat | val messageFormat: MessageFormatType? | |
messageReferences | val messageReferences: List<ChatMessageReferenceModel>? | |
messageWithKindlyEntities | val messageWithKindlyEntities: String? | |
name | val name: String? | |
newContext | val newContext: Map<String, String>? | |
oEmbedResponse | var oEmbedResponse: OEmbedData? | |
parentExchangeId | val parentExchangeId: String? | |
replyToId | val replyToId: String? | |
replyType | val replyType: String? | |
score | val score: Double? | |
sender | val sender: String? | |
sessionId | val sessionId: String? | |
skillSubscriptionId | val skillSubscriptionId: String? | |
suggestions | val suggestions: List<SuggestionSDK> | |
systemDialogMessageType | val systemDialogMessageType: SystemDialogueMessageType? | |
systemDialogueCategory | val systemDialogueCategory: SystemDialogueCategoryType? | |
temporaryId | val temporaryId: String? | |
thonImageAboveText | val thonImageAboveText: Boolean? | |
title | val title: String? | |
triggeredChatStart | val triggeredChatStart: Boolean? | |
typing | val typing: Boolean | |
urlTrigger | val urlTrigger: String? | |
v | val v: Int? | |
videoSource | val videoSource: String? | |
webhookUrl | val webhookUrl: String? | |
MessageFormatType
enum
enum MessageFormatType : Enum<MessageFormatType>Format type for chat message content.
Member | Declaration | Description |
|---|---|---|
TXT | TXT | |
HTML | HTML | |
entries | val entries: EnumEntries<MessageFormatType> | Returns a representation of an immutable list of all enum entries, in the order they're declared. This method may be used to iterate over the enum entries. |
rawValue | val rawValue: String | |
toRawValue | fun toRawValue(): String | |
valueOf | fun valueOf(value: String): MessageFormatType | Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) Throws - kotlin.IllegalArgumentException: if this enum type has no constant with the specified name |
values | fun values(): Array<MessageFormatType> | Returns an array containing the constants of this enum type, in the order they're declared. This method may be used to iterate over the constants. |
MessageFormatType.Companion
object
object CompanionMember | Declaration | Description |
|---|---|---|
fromRawValue | fun fromRawValue(value: String?): MessageFormatType? | |
no.kindly.chatsdk.chat.domain.entites
ButtonChat
data class
data class ButtonChat(val id: String?, val buttonType: String?, val languageCode: String?, val label: String = "", val value: String?, val index: Int?, val createdAt: String? = "", val updatedAt: String? = "", val isActive: Boolean = true, val hideOutsideBusinessHours: Boolean?, var clicked: Boolean = false, val context: Map<String, Any>? = null, val sliderDetails: SliderDetails? = null, val contactDetails: ContactDetails? = null, val emailDetails: EmailDetails? = null)Represents a chat button in the Kindly SDK. Received via the KindlySDKInteraction.didPressButton callback.
Member | Declaration | Description |
|---|---|---|
ButtonChat | constructor(id: String?, buttonType: String?, languageCode: String?, label: String = "", value: String?, index: Int?, createdAt: String? = "", updatedAt: String? = "", isActive: Boolean = true, hideOutsideBusinessHours: Boolean?, clicked: Boolean = false, context: Map<String, Any>? = null, sliderDetails: SliderDetails? = null, contactDetails: ContactDetails? = null, emailDetails: EmailDetails? = null) | |
accessibilityId | val accessibilityId: String | Generates a unique accessibility identifier for Appium automation Format: button_id_label |
buttonType | val buttonType: String? | |
clicked | var clicked: Boolean | |
contactDetails | val contactDetails: ContactDetails? | Present on contact_details buttons — the prompt, placeholder and contact type to capture. |
context | val context: Map<String, Any>? | |
createdAt | val createdAt: String? | |
emailDetails | val emailDetails: EmailDetails? | Present on email buttons — informational; the subject/body are already baked into value. |
hideOutsideBusinessHours | val hideOutsideBusinessHours: Boolean? | |
id | val id: String? | |
index | val index: Int? | |
isActive | val isActive: Boolean | |
label | val label: String | |
languageCode | val languageCode: String? | |
sliderDetails | val sliderDetails: SliderDetails? | Present on slider buttons — the range, step and affix to render. |
updatedAt | val updatedAt: String? | |
value | val value: String? | |
ContactDetails
data class
@Serializable
data class ContactDetails(val id: String? = null, val contactType: String = CONTACT_TYPE_EMAIL, val label: String = "", val editText: String = "", val placeholder: String? = null)Configuration for a contact_details button — an inline email or phone-number capture field.
The captured value does not travel on the normal button-click route; it is posted to the dedicated contact-details endpoint.
Member | Declaration | Description |
|---|---|---|
ContactDetails | constructor(id: String? = null, contactType: String = CONTACT_TYPE_EMAIL, label: String = "", editText: String = "", placeholder: String? = null) | |
contactType | @SerialName(value = "contact_type") val contactType: String | Either email or phone_number. The backend rejects any other value — note it is phone_number, never phone. |
editText | @SerialName(value = "edit_text") val editText: String | Label of the control that lets the user change an already-submitted value. |
id | @SerialName(value = "id") val id: String? | |
isEmail | val isEmail: Boolean | True when this button captures an email address rather than a phone number. |
label | @SerialName(value = "label") val label: String | Prompt shown above the input, e.g. "Your email:". |
placeholder | @SerialName(value = "placeholder") val placeholder: String? | Placeholder shown inside the empty input. |
ContactDetails.Companion
object
object CompanionMember | Declaration | Description |
|---|---|---|
CONTACT_TYPE_EMAIL | const val CONTACT_TYPE_EMAIL: String | |
CONTACT_TYPE_PHONE | const val CONTACT_TYPE_PHONE: String | |
EmailDetails
data class
@Serializable
data class EmailDetails(val id: String? = null, val subject: String? = null, val body: String? = null)Configuration for an email button. The backend already interpolates the subject and body into the button's value query string, so this is informational for the client.
Member | Declaration | Description |
|---|---|---|
EmailDetails | constructor(id: String? = null, subject: String? = null, body: String? = null) | |
body | @SerialName(value = "body") val body: String? | |
id | @SerialName(value = "id") val id: String? | |
subject | @SerialName(value = "subject") val subject: String? | |
ExternalNotification
data class
data class ExternalNotification(val id: String, val title: String, val body: String, val data: Map<String, String>)A decrypted Kindly notification passed to the host app via no.kindly.chatsdk.chat.common.KindlySDKInteraction.shouldHandleNotification.
Forwarded for every Kindly silent push received and successfully decrypted, regardless of app state or which screen is on top. Use the host callback to take over the presentation of the notification; otherwise the SDK presents it itself.
Member | Declaration | Description |
|---|---|---|
ExternalNotification | constructor(id: String, title: String, body: String, data: Map<String, String>) | |
body | val body: String | Decrypted body. |
data | val data: Map<String, String> | The original RemoteMessage.data map, including notification_source and any extra fields the backend attached. Provided so the host can read fields the SDK does not surface. |
id | val id: String | Decrypted message id (from the encrypted chat_id field). |
title | val title: String | Decrypted title. |
SliderDetails
data class
@Serializable
data class SliderDetails(val id: String? = null, val fromValue: Double = 0.0, val toValue: Double = 100.0, val value: Double = 0.0, val stepValue: Double = 1.0, val affix: String? = null, val affixValue: String? = null)Configuration for a slider button — a numeric input rendered inside a button group.
The chosen value is not sent when the slider moves; it is collected locally and delivered by the accompanying submit button in new_context, keyed by the button's lowercased label.
Member | Declaration | Description |
|---|---|---|
SliderDetails | constructor(id: String? = null, fromValue: Double = 0.0, toValue: Double = 100.0, value: Double = 0.0, stepValue: Double = 1.0, affix: String? = null, affixValue: String? = null) | |
affix | @SerialName(value = "affix") val affix: String? | Where affixValue is placed relative to the number: PREFIX or SUFFIX. |
affixValue | @SerialName(value = "affix_value") val affixValue: String? | The unit or symbol shown alongside the number, e.g. $ or kr. |
fromValue | @SerialName(value = "from_value") val fromValue: Double | Lower bound of the slider. |
id | @SerialName(value = "id") val id: String? | |
isPrefix | val isPrefix: Boolean | True when affixValue should be rendered before the number rather than after it. |
stepValue | @SerialName(value = "step_value") val stepValue: Double | Increment between selectable values. May be fractional. |
toValue | @SerialName(value = "to_value") val toValue: Double | Upper bound of the slider. |
value | @SerialName(value = "value") val value: Double | Initial position of the handle. |
format | fun format(number: Double): String | Formats number with the configured affix, dropping a trailing .0 for whole steps. |
wireValue | fun wireValue(number: Double): String | The bare, numeric-parsable string to send to the backend for number — no affix, and no trailing .0 when the slider steps in whole numbers. The platform reads this back with a float parse, so it must stay a plain number. |
no.kindly.chatsdk.chat.domain.mapper
convertToAttachments
function
fun convertToAttachments(fileStore: FileStore, filesWithMimeTypes: List<Pair<String, String>>): ListAttachmentstoMessageSDK
function
fun MessageChat.toMessageSDK(): MessageSDKtoTextPlaceholder
function
fun TextPlaceholderSDK.toTextPlaceholder(): Map<String, String>Convert dynamic TextPlaceholderSDK to Map for backward compatibility. Now supports ANY language dynamically without hardcoded fields!
no.kindly.chatsdk.chat.extensions
appendIfNotExists
function
fun MutableList<MessageDataSDK>.appendIfNotExists(message: MessageDataSDK)Appends a message to the list if it does not already exist.
Parameters
- message: The MessageDataSDK to append.
indexForNewMessage
function
fun List<MessageDataSDK>.indexForNewMessage(newMessage: MessageData): Int?indexForNewMessage
function
fun List<MessageDataSDK>.indexForNewMessage(newMessage: MessageDataSDK): Int?Finds the index at which a new message should be inserted to maintain chronological order.
Parameters
- newMessage: The MessageDataSDK to insert.
Returns
- The index at which to insert the new message, or null if it should be appended.
insertInOrder
function
fun MutableList<MessageDataSDK>.insertInOrder(newMessage: MessageData)insertInOrder
function
fun MutableList<MessageDataSDK>.insertInOrder(newMessage: MessageDataSDK)Inserts a new message into the list in chronological order.
Parameters
- newMessage: The MessageDataSDK to insert.
shouldAdd
function
fun List<MessageDataSDK>.shouldAdd(message: MessageData): BooleanshouldAdd
function
fun List<MessageDataSDK>.shouldAdd(message: MessageDataSDK): BooleanDetermines whether a message should be added to the list.
Parameters
- message: The MessageDataSDK to check.
Returns
- true if the message should be added, false otherwise.
toAnnotatedString
function
fun Spanned.toAnnotatedString(): AnnotatedStringtoList
function
fun JSONArray.toList(): List<Any?>toMap
function
fun JSONObject.toMap(): Map<String, Any?>