Классы Чата
Все классы актуальны для версии 4.7.0.
Иерархия сообщений
Сообщение описывается двумя пересекающимися иерархиями: по типу содержимого (UsedeskMessage) и по отправителю (UsedeskMessageOwner). Конкретный класс сообщения реализует по одному интерфейсу из каждой.
sealed interface UsedeskMessage {
val id: String
val createdAt: Calendar
sealed interface Text : UsedeskMessage {
val text: String
val convertedText: String
}
sealed interface File : UsedeskMessage {
val file: UsedeskFile
}
}
sealed interface UsedeskMessageOwner {
sealed interface Agent : UsedeskMessageOwner {
val name: String
val avatar: String
}
sealed interface Client : UsedeskMessageOwner {
val status: Status
val localId: String
enum class Status {
SENDING,
SUCCESSFULLY_SENT,
SEND_FAILED
}
}
}
Класс конфигурации Чата — UsedeskChatConfiguration : Parcelable
| Название | Тип | Описание |
|---|---|---|
| urlChat | String | Адрес сервера чата |
| urlChatApi | String | Адрес API чата |
| companyId | String | Идентификатор компании |
| channelId | String | Идентификатор канала |
| messagesPageSize | Int | Количество сообщений в одной странице загрузки |
| clientId | String | Идентификатор клиента |
| clientToken | String? | Токен клиента |
| clientEmail | String? | Email клиента |
| clientName | String? | Имя клиента |
| clientNote | String? | Заметка о клиенте |
| clientPhoneNumber | Long? | Телефон клиента |
| clientAdditionalId | String? | Дополнительный идентификатор клиента |
| clientInitMessage | String? | Первое сообщение, отправляемое при инициализации чата |
| clientAvatar | String? | Аватар клиента |
| cacheMessagesWithFile | Boolean | Кэшировать ли неотправленные сообщения с файлами |
| additionalFields | Map<Long, String> | Дополнительные поля |
| additionalNestedFields | List<Map<Long, String>> | Дополнительные вложенные поля |
Класс текстового сообщения агента — UsedeskMessageAgentText : UsedeskMessage.Text, UsedeskMessageOwner.Agent
| Название | Тип | Описание |
|---|---|---|
| id | String | Идентификатор сообщения |
| createdAt | Calendar | Время создания |
| text | String | Исходный текст сообщения |
| convertedText | String | Текст, подготовленный к отображению |
| name | String | Имя агента |
| avatar | String | Ссылка на аватар агента |
| buttons | List<Button> | Кнопки в сообщении |
| fieldsInfo | List<FieldInfo> | Поля формы в сообщении |
| rating | UsedeskRating? | Оценка сообщения. null, если сообщение оценивать нельзя |
UsedeskMessageAgentText.Button
| Название | Тип | Описание |
|---|---|---|
| name | String | Подпись кнопки |
| url | String | Ссылка |
| type | String | Тип кнопки |
UsedeskMessageAgentText.FieldInfo
| Название | Тип | Описание |
|---|---|---|
| id | String | Идентификатор поля |
| name | String | Название поля |
| required | Boolean | Обязательно ли к заполнению |
Класс оценки — UsedeskRating
Добавлено в версии 4.7.0
Приходит с сервера вместе с сообщением агента, на клиенте не конструируется. Идентификатор выбранного варианта передаётся в метод sendRating.
| Название | Тип | Описание |
|---|---|---|
| appearance | Appearance | Вид оценки |
| options | List<Option> | Варианты оценки в порядке отображения |
| selectedId | String? | Идентификатор уже выставленной оценки. null — сообщение ещё не оценено |
UsedeskRating.Option
| Название | Тип | Описание |
|---|---|---|
| id | String | Идентификатор варианта. Именно его передают в sendRating |
| label | String | Подпись варианта |
| data | String | Значение, которое уходит на сервер. По умолчанию равно id |
| reaction | Reaction? | LIKE или DISLIKE для реакций, null для остальных вариантов |
UsedeskRating.Appearance
| Значение | Описание |
|---|---|
| REACTIONS | Оценка двумя реакциями: лайк и дизлайк |
| STARS | Оценка звёздами — по одной на каждый вариант из options |
UsedeskRating.Option.Reaction
| Значение | Описание |
|---|---|
| LIKE | Положительная реакция |
| DISLIKE | Отрицательная реакция |
Сообщения агента с файлом
Классы UsedeskMessageAgentFile, UsedeskMessageAgentImage, UsedeskMessageAgentVideo и UsedeskMessageAgentAudio реализуют UsedeskMessage.File, UsedeskMessageOwner.Agent и имеют одинаковый набор полей.
| Название | Тип | Описание |
|---|---|---|
| id | String | Идентификатор сообщения |
| createdAt | Calendar | Время создания |
| file | UsedeskFile | Файл |
| name | String | Имя агента |
| avatar | String | Ссылка на аватар агента |
Класс текстового сообщения клиента — UsedeskMessageClientText : UsedeskMessage.Text, UsedeskMessageOwner.Client
| Название | Тип | Описание |
|---|---|---|
| id | String | Идентификатор сообщения |
| createdAt | Calendar | Время создания |
| text | String | Исходный текст сообщения |
| convertedText | String | Текст, подготовленный к отображению |
| status | UsedeskMessageOwner.Client.Status | Статус отправки |
| localId | String | Локальный идентификатор сообщения |
Сообщения клиента с файлом
Классы UsedeskMessageClientFile, UsedeskMessageClientImage, UsedeskMessageClientVideo и UsedeskMessageClientAudio реализуют UsedeskMessage.File, UsedeskMessageOwner.Client и имеют одинаковый набор полей.
| Название | Тип | Описание |
|---|---|---|
| id | String | Идентификатор сообщения |
| createdAt | Calendar | Время создания |
| file | UsedeskFile | Файл |
| status | UsedeskMessageOwner.Client.Status | Статус отправки |
| localId | String | Локальный идентификатор сообщения |
UsedeskMessageOwner.Client.Status
| Значение | Описание |
|---|---|
| SENDING | Сообщение отправляется |
| SUCCESSFULLY_SENT | Сообщение успешно отправлено |
| SEND_FAILED | Отправить сообщение не удалось |
Класс информации о файле на устройстве — UsedeskFileInfo
| Название | Тип | Описание |
|---|---|---|
| uri | Uri | Адрес файла на устройстве |
| type | String | MIME-тип файла |
| name | String | Имя файла |
Класс информации о файле на сервере — UsedeskFile : Parcelable
| Название | Тип | Описание |
|---|---|---|
| content | String | Ссылка на файл |
| type | String | MIME-тип файла |
| size | String | Размер файла |
| name | String | Имя файла |
Класс черновика сообщения — UsedeskMessageDraft
| Название | Тип | Описание |
|---|---|---|
| text | String | Текст черновика |
| files | List<UsedeskFileInfo> | Прикреплённые файлы |
Класс формы обратной связи — UsedeskOfflineForm
| Название | Тип | Описание |
|---|---|---|
| clientName | String | Имя клиента |
| clientEmail | String | Email клиента |
| topic | String | Тема обращения |
| fields | List<Field> | Заполненные дополнительные поля |
| message | String | Текст обращения |
UsedeskOfflineForm.Field
| Название | Тип | Описание |
|---|---|---|
| key | String | Ключ поля |
| title | String | Название поля |
| value | String | Значение поля |
Класс настроек Формы Обратной Связи — UsedeskOfflineFormSettings
| Название | Тип | Описание |
|---|---|---|
| noOperators | Boolean | Нет операторов на линии |
| workType | WorkType | Режим работы формы |
| callbackTitle | String | Заголовок формы |
| callbackGreeting | String | Приветственный текст формы |
| fields | List<CustomField> | Дополнительные поля |
| topics | List<String> | Список тем обращения |
| topicsTitle | String | Заголовок списка тем |
| topicsRequired | Boolean | Обязателен ли выбор темы |
UsedeskOfflineFormSettings.CustomField
| Название | Тип | Описание |
|---|---|---|
| key | String | Ключ поля |
| required | Boolean | Обязательно ли к заполнению |
| checked | Boolean | Включено ли поле |
| placeholder | String | Подсказка в поле |
UsedeskOfflineFormSettings.WorkType
| Значение | Описание |
|---|---|
| NEVER | Форма не показывается |
| CHECK_WORKING_TIMES | Форма показывается в нерабочее время |
| ALWAYS_ENABLED_CALLBACK_WITHOUT_CHAT | Всегда показывается форма, без чата |
| ALWAYS_ENABLED_CALLBACK_WITH_CHAT | Всегда показывается форма, вместе с чатом |
Класс состояния подключения — UsedeskConnectionState
| Значение | Описание |
|---|---|
| NONE | Подключение не устанавливалось |
| CONNECTING | Подключение устанавливается |
| RECONNECTING | Переподключение |
| CONNECTED | Подключение установлено |
| DISCONNECTED | Подключение разорвано |
Интерфейс слушателя событий — UsedeskActionListener
fun onModel(
model: UsedeskChat.Model,
newMessages: List<UsedeskMessage>,
updatedMessages: List<UsedeskMessage>,
removedMessages: List<UsedeskMessage>
)
fun onModelUpdated(
oldModel: UsedeskChat.Model?,
newModel: UsedeskChat.Model
)
fun onException(usedeskException: Exception)Все методы имеют реализацию по умолчанию — переопределяйте только нужные.