# Дополнительные возможности Webim Mobile SDK v4 для Android

В данной статье приведены недоступные по умолчанию возможности **Webim Mobile SDK** для **Android**. Для их подключения обратитесь в [службу технической поддержки](mailto:support@webim.ru)

!!! Note "N.B."
    Эта статья является дополнением [основного справочника](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html) по **Webim Mobile SDK** для **Android**. Методы, помеченные в исходниках аннотацией `@CustomMethod`, подключаются по согласованию со [службой технической поддержки](mailto:support@webim.ru).

## Класс `Webim` { #webim }

### метод класса `newFAQBuilder()` { #new-faq-builder }

Метод, необходимый для получения объекта [`FAQBuilder`](#faq-builder), который в свою очередь необходим для создания экземпляра класса [`FAQ`](#faq).

Не принимает параметры.

Возвращает экземпляр класса [`FAQBuilder`](#faq-builder), необходимый для работы с блоком часто задаваемых вопросов.

Не выбрасывает исключения.

Не требует предварительного вызова других методов.

## класс `FAQBuilder` { #faq-builder }

Класс, экземпляр которого используется для получения экземпляра класса [`FAQ`](#faq). Экземпляр класса получается методом [`newFAQBuilder()`](#new-faq-builder) класса [`Webim`](#webim).

### метод экземпляра `setAccountName(String accountName)` { #set-account-name }

Метод необходим для задания названия аккаунта в системе **Webim** при создании блока часто задаваемых вопросов.

Параметр `accountName` — название аккаунта клиента в системе **Webim**. Обычно представляет из себя URL-сервера (например, `https://companyname.webim.ru`), но может иметь и вид названия аккаунта одним словом (например, `«demo»`), если сервер находится в домене `webim.ru`. Тип параметра — `String`.

Возвращает тот же экземпляр класса [`FAQBuilder`](#faq-builder), но с установленным названием аккаунта.

Не выбрасывает исключения.

Требует предварительно полученного экземпляра класса [`FAQBuilder`](#faq-builder). Для получения экземпляра класса [`FAQ`](#faq) вызов метода является обязательным.

### метод экземпляра `build()` { #faqbuilder-build }

Метод, который вызывается в заключение перечисленных выше методов для получения экземпляра [`FAQ`](#faq).

Не принимает параметры.

Возвращает объект [`FAQ`](#faq) с установленными параметрами с помощью остальных методов экземпляра класса.

Выбрасывает `IllegalArgumentException`, если не было установлено название аккаунта (см. метод [`setAccountName(String accountName)`](#set-account-name)),

Требует предварительно полученного экземпляра класса [`FAQBuilder`](#faq-builder), а также последующего вызова методов [`setAccountName(String accountName)`](#set-account-name).

---

## интерфейс `FAQ` { #faq }

Интерфейс, позволяющий производить манипуляции с блоком часто задаваемых вопросов. Реализуется внутренними сущностями SDK.

Экземпляр класса [`FAQ`](#faq) получается с помощью методов класса [`FAQBuilder`](#faq-builder).

### метод экземпляра `resume()`

При создании экземпляра класса [`FAQ`](#faq), соответствующий ему блок часто задаваемых вопросов находится в приостановленном состоянии. Данный метод необходим для того, чтобы стартовать сетевую активность.

Не принимает параметры.

Ничего не возвращает.

Выбрасывает `IllegalStateException`, если объект блока часто задаваемых вопросов был деактивирован (см. метод [`destroy()`](#faq-destroy)).

Выбрасывает `RuntimeException`, если метод был вызван из потока, отличного от того, в котором был создан объект класса.

Не требует предварительного вызова никаких других методов. Необходим для полноценного функционирования сервиса в контексте приложения.

Скорость выполнения метода зависит от скорости получения ответа сервера.

### метод экземпляра `pause()`

Метод, который используется для приостановки сетевой активности блока часто задаваемых вопросов. Если сессия уже находится в приостановленном состоянии, метод не производит никаких действий.

Не принимает параметры.

Ничего не возвращает.

Выбрасывает `RuntimeException`, если метод был вызван из потока, отличного от того, в котором был создан объект класса.

Не требует предварительного вызова никаких других методов. Для вызова метода блок часто задаваемых вопросов не должен находиться в деактивированном состоянии.

### метод экземпляра `destroy()` { #faq-destroy }

Метод, который используется для деактивации блока часто задаваемых вопросов и экземпляра класса. После вызова данного метода, никакие методы, относящиеся к блоку часто задаваемых вопросов использованы быть не могут.

Не принимает параметры.

Ничего не возвращает.

Выбрасывает `RuntimeException`, если метод был вызван из потока, отличного от того, в котором был создан объект класса.

Не требует предварительного вызова никаких других методов.

### метод экземпляра `getStructure(String rootId, GetCallback<FAQStructure> callback)` { #get-structure }

Метод запрашивает объект класса [`FAQStructure`](#faq-structure).

Если запрашиваемая структура не найдена на сервере или запрос завершился с ошибкой (полученный ответ равен `null`), вызывается метод [`onError()`](#faq-get-callback) переданного объекта `callback`. При успешном ответе вызывается метод [`receive(T item)`](#faq-get-callback-receive), а структура сохраняется в кеш.

Параметр `rootId` — ID вершины, которая будет корнем дерева (структуры) блока часто задаваемых вопросов. Тип — `String`.

Параметр `callback` — объект, реализующий интерфейс [`FAQ.GetCallback<FAQStructure>`](#faq-get-callback).

Ничего не возвращает.

Выбрасывает `RuntimeException`, если метод был вызван из потока, отличного от того, в котором был создан объект класса.

Не требует предварительного вызова никаких других методов.

### метод экземпляра `getCategory(String id, GetCallback<FAQCategory> callback)` { #get-category }

Метод запрашивает объект класса [`FAQCategory`](#faq-category).

Если запрашиваемая категория не найдена на сервере или запрос завершился с ошибкой (полученный ответ равен `null`), вызывается метод [`onError()`](#faq-get-callback) переданного объекта `callback`. При успешном ответе вызывается метод [`receive(T item)`](#faq-get-callback-receive), а категория сохраняется в кеш.

Параметр `id` — ID категории блока часто задаваемых вопросов. Тип — `String`.

Параметр `callback` — объект, реализующий интерфейс [`FAQ.GetCallback<FAQCategory>`](#faq-get-callback).

Ничего не возвращает.

Выбрасывает `RuntimeException`, если метод был вызван из потока, отличного от того, в котором был создан объект класса.

Не требует предварительного вызова никаких других методов.

### метод экземпляра `getItem(String id, FAQItemSource openFrom, GetCallback<FAQItem> callback)` { #get-item }

Метод запрашивает объект класса [`FAQItem`](#faq-item).

Если запрашиваемая страница не найдена на сервере или запрос завершился с ошибкой (полученный ответ равен `null`), вызывается метод [`onError()`](#faq-get-callback) переданного объекта `callback`. При успешном ответе вызывается метод [`receive(T item)`](#faq-get-callback-receive).

Параметр `id` — ID страницы блока часто задаваемых вопросов. Тип — `String`.

Параметр `openFrom` — источник открытия страницы. Тип — `FAQItemSource`. Если параметр передан, перед запросом выполняется трекинг открытия страницы.

Параметр `callback` — объект, реализующий интерфейс [`FAQ.GetCallback<FAQItem>`](#faq-get-callback).

Ничего не возвращает.

Выбрасывает `RuntimeException`, если метод был вызван из потока, отличного от того, в котором был создан объект класса.

Не требует предварительного вызова никаких других методов.

---

## интерфейс `FAQCategory` { #faq-category }

Представление категории блока часто задаваемых вопросов. Предоставляет методы получения информации о категории.

Объекты [`FAQCategory`](#faq-category) передаются в метод [`FAQ.GetCallback.receive(T item)`](#faq-get-callback-receive).

### метод `getId()`

Не принимает параметров.

Возвращает идентификатор категории. Тип — `Int`.

Не выбрасывает исключений.

Не требует предварительного вызова никаких других методов.

### метод `getTitle()`

Не принимает параметров.

Возвращает заголовок категории. Тип — `String`.

Не выбрасывает исключений.

Не требует предварительного вызова никаких других методов.

### метод `getItems()`

Категория содержит страницы блока часто задаваемых вопросов.

Не принимает параметров.

Возвращает страницы, принадлежащих категории. Тип — `List<FAQItem>`.

Не выбрасывает исключений.

Не требует предварительного вызова никаких других методов.

### метод `getSubcategories()` { #get-subcategories }

Категория содержит подкатегории. Для удобства данный метод возвращает информацию о подкатегориях без её страниц и подкатегорий.

Не принимает параметров.

Возвращает информацию о подкатегориях, принадлежащих категории. Тип — `List<FAQCategoryInfo>`.

Не выбрасывает исключений.

Не требует предварительного вызова никаких других методов.

---

## интерфейс `FAQCategoryInfo` { #faq-category-info }

Представление информации о категории блока часто задаваемых вопросов. Предоставляет методы получения идентификатора и заголовка категории.

Объекты [`FAQCategoryInfo`](#faq-category-info) могут быть получены с помощью метода [`getSubcategories()`](#get-subcategories).

### метод `getId()`

Не принимает параметров.

Возвращает идентификатор категории. Тип — `Int`.

Не выбрасывает исключений.

Не требует предварительного вызова никаких других методов.

### метод `getTitle()`

Не принимает параметров.

Возвращает заголовок категории. Тип — `String`.

Не выбрасывает исключений.

Не требует предварительного вызова никаких других методов.

---

## интерфейс `FAQItem` { #faq-item }

Представление страницы блока часто задаваемых вопросов. Предоставляет методы получения информации о странице.

Объекты [`FAQItem`](#faq-item) передаются в метод [`FAQ.GetCallback.receive(T item)`](#faq-get-callback-receive).

### метод `getId()`

Не принимает параметров.

Возвращает идентификатор страницы. Тип — `String`.

Не выбрасывает исключений.

Не требует предварительного вызова никаких других методов.

### метод `getTitle()`

Не принимает параметров.

Возвращает заголовок страницы. Тип — `String`.

Не выбрасывает исключений.

Не требует предварительного вызова никаких других методов.

### метод `getCategories()`

Страница может принадлежать нескольким категориям.

Не принимает параметров.

Возвращает идентификаторы категорий, которым принадлежит страница. Тип — `List`.

Не выбрасывает исключений.

Не требует предварительного вызова никаких других методов.

### метод `getTags()`

У страницы есть набор тэгов.

Не принимает параметров.

Возвращает список тэгов, которыми отмечена страница. Тип — `List`.

Не выбрасывает исключений.

Не требует предварительного вызова никаких других методов.

### метод `getContent()`

Не принимает параметров.

Возвращает содержание страницы. Тип — `String`.

Не выбрасывает исключений.

Не требует предварительного вызова никаких других методов.

### метод `getLikeCount()`

Страница содержит количество отметок «Нравится».

Не принимает параметров.

Возвращает количество отметок «Нравится» страницы. Тип — `Int`.

Не выбрасывает исключений.

Не требует предварительного вызова никаких других методов.

### метод `getDislikeCount()`

Страница содержит количество отметок «Не нравится».

Не принимает параметров.

Возвращает количество отметок «Не нравится» страницы. Тип — `Int`.

Не выбрасывает исключений.

Не требует предварительного вызова никаких других методов.

---

## интерфейс `FAQStructure` { #faq-structure }

Представление дерева (структуры) блока часто задаваемых вопросов. Предоставляет методы получения информации о дереве блока часто задаваемых вопросов.

Объекты [`FAQStructure`](#faq-structure) передаются в метод [`FAQ.GetCallback.receive(T item)`](#faq-get-callback-receive).

### метод `getId()`

У дерева есть корневой элемент.

Не принимает параметров.

Возвращает идентификатор корневого элемента дерева. Тип — `String`.

Не выбрасывает исключений.

Не требует предварительного вызова никаких других методов.

### метод `getTitle()`

Не принимает параметров.

Возвращает заголовок корня. Тип — `String`.

Не выбрасывает исключений.

Не требует предварительного вызова никаких других методов.

### метод `getType()` { #faq-structure-get-type }

Корень дерева может быть категорией или страницей.

Не принимает параметров.

Возвращает тип корневого элемента. Тип — [`FAQType`](#faq-type).

Не выбрасывает исключений.

Не требует предварительного вызова никаких других методов.

### метод `getChildren()`

Не принимает параметров.

Возвращает поддеревья, корнями которых являются прямые потомки корня дерева (структуры). Тип — `List<FAQStructure>`.

Не выбрасывает исключений.

Не требует предварительного вызова никаких других методов.

---

## Перечисляемый тип `FAQType` { #faq-type }

Возможные типы корня дерева блока часто задаваемых вопросов (см. метод [`getType()`](#faq-structure-get-type) интерфейса [`FAQStructure`](#faq-structure)).

### случай `ITEM`

Корень дерева является страницей.

### случай `CATEGORY`

Корень дерева является категорией.

### случай `UNKNOWN`

Корень дерева имеет неизвестный тип для данной версии SDK.

---

## Перечисляемый тип `UserRate` { #user-rate }

Страница может быть отмечена пользователем.

### Случай `like`

Пользователю понравилась страница.

### Случай `dislike`

Пользователю не понравилась страница.

### Случай `noRate`

Страница не оценена пользователем.

---

## Перечисляемый тип `FAQAccessError` { #faq-access-error }

Значение типа соответствуют ошибкам, которые могут выбрасываться некоторыми методами интерфейсов [`FAQ`](#faq).

### Случай `invalidThread`

Возникает, когда метод был вызван не из потока, в котором был создан экземпляр блока часто задаваемых вопросов.

### Случай `invalidFaq`

Возникает при попытке использования методов недействительного экземпляра [`FAQ`](#faq) (например, после того, как на нем был вызван метод [`destroy()`](#faq-destroy)).

---

## Перечисляемый тип `FAQBuilderError`

Значение типа соответствуют возможным ошибкам, которые могут возникнуть при вызове метода [`build()`](#faqbuilder-build) класса [`FAQBuilder`](#faq-builder).

### Случай `nilAccountName`

Возникает, когда при создании блока часто задаваемых вопросов не было передано значение названия аккаунта.

---

## Перечисляемый тип `FAQItemSource` { #faq-item-source }

Возможный источник статьи. Статья может быть взята из поиска или из структуры или категории.

### Случай `search`

Статью запрашивают из поиска.

### Случай `tree`

Статью запрашивают из структуры или категории.

---

## интерфейс `FAQ.GetCallback<T>` { #faq-get-callback }

Обобщённый интерфейс обратного вызова для методов [`FAQ`](#faq), которые получают структуру, категорию, статью или список результатов.

### метод `receive(T item)` { #faq-get-callback-receive }

Вызывается после успешного выполнения запроса.

Параметр `item` — результат запроса. Конкретный тип зависит от вызванного метода.

### метод `onError()`

Вызывается, если запрос завершился с ошибкой.

---

## Перечисляемый тип `RootType` { #root-type }

Возможные типы корня дерева блока часто задаваемых вопросов (см. метод [`getType()`](#faq-structure-get-type) интерфейса [`FAQStructure`](#faq-structure)).

### Случай `item`

Корень дерева является страницей.

### Случай `category`

Корень дерева является категорией.

### случай `unknown`

Корень дерева имеет неизвестный тип для данной версии SDK.

---

## Класс `SessionBuilder` { #session-builder }

### метод экземпляра `setPrechatFields(String prechatFields)`

Метод, с помощью которого можно установить поля с дополнительной информацией, которая будет видна оператору.

Параметр `prechatFields` — поля с дополнительной информацией в формате `JSON`. Тип параметра — `String`.

Возвращает тот же экземпляр класса [`SessionBuilder`](#session-builder), но с установленными полями.

Не выбрасывает исключения.

Требует предварительно полученного экземпляра класса [`SessionBuilder`](#session-builder). Для получения экземпляра класса [`WebimSession`](#webim-session) вызов метода не является обязательным.

### Метод `setMultivisitorSection(String multivisitorSection)`

Метод, с помощью которого можно установить настройки для получения push-уведомлений от сервиса **Webim** при запуске нескольких сессий на одном устройстве.

Тип параметра `multivisitorSection` — `String`.

Возвращает тот же экземпляр класса [`SessionBuilder`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#session-builder), но с установленным полем.

Для получения экземпляра класса [`WebimSession`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#webim-session) вызов метода не является обязательным.

### Метод `setOnlineStatusRequestFrequencyInMillis(long requestFrequency)`

Метод, с помощью которого можно указать частоту запросов к серверу в миллисекундах.

Параметр `requestFrequency` — `long`.

Возвращает тот же экземпляр класса [`SessionBuilder`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#session-builder), но с установленным вручную значением соответствующей опции.

---

## Интерфейс `WebimSession` { #webim-session }

### Метод `changeLocation(String location)`

Метод используется для смены названия локации в рамках существующей сессии. Вызов метода приблизительно аналогичен результату создания новой сессии с аналогичными параметрами, но с другим названием локации.

Параметр `location` — название локации, на которое необходимо сменить текущее значение сессии. Тип — `String`.

Может выбрасывать ошибки типа `IllegalStateException`.

Для вызова метода сессия не должна находиться в приостановленном или деактивированном состоянии (см. методы [`resume()`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#resume), [`pause()`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#pause) и [`destroy()`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#destroy)).

---

## Интерфейс `Message`



### Метод `getSticker()`

Возвращает объект типа [`Sticker`](#sticker).

Не выбрасывает исключений.

### Метод `canVisitorReact()`

Метод возвращает `true` в случае, если посетитель может отреагировать на сообщение, в противном случае - `false`.

Не выбрасывает исключений.

### Метод `canVisitorChangeReaction()`

Метод возвращает `true`, если посетитель может сменить оставленную на сообщение реакцию, в противном случае - `false`.

Не выбрасывает исключений.

### Метод `getReaction()`

Метод возвращает реакцию посетителя на сообщения. Возвращаемый тип - [`MessageReaction`](#message-reaction).

---

## Интерфейс `Sticker` { #sticker }

### Метод `getStickerId`

Возвращает id стикера типа `int`.

---

## Перечисляемый тип `MessageReaction` { #message-reaction }

### Случай `LIKE`

Посетителю понравилось сообщение оператора.

### Случай `DISLIKE`

Посетителю не понравилось сообщение оператора.

## Перечисляемый тип `AttachmentState` { #attachment-state }

### Случай `externalChecks`

Файл проверяется сервером.

---

## Интерфейс MessageStream { #message-stream }

### Метод `sendResolutionSurvey(String operatorId, int answer, SendResolutionSurveyCallback callback)` { #send-resolution-survey }

Отправляет ответ опроса после консультации («resolution survey»). Метод помечен `@CustomMethod`.

Параметр `operatorId` — идентификатор оператора. Тип — `String`.

Параметр `answer` — выбранный ответ. Тип — `int`.

Параметр `callback` — объект, реализующий интерфейс [`SendResolutionSurveyCallback`](#send-resolution-survey-callback).

Связанный метод [`getLastOperatorResolutionSurveyAnswer(Operator.Id)`](#get-last-operator-resolution-survey) возвращает предыдущий ответ или `null`.

### Метод `getLastOperatorResolutionSurveyAnswer(Operator.Id operatorId)` { #get-last-operator-resolution-survey }

Возвращает предыдущий ответ resolution survey для оператора или `null`. Тип — `Integer`. Метод помечен `@CustomMethod`.

### Метод `sendGeolocation(float latitude, float longitude, GeolocationCallback callback)` { #send-geolocation }

Отправляет координаты посетителя.

Параметры `latitude` и `longitude` — широта и долгота. Тип — `float`.

Параметр `callback` — объект, реализующий интерфейс [`GeolocationCallback`](#geolocation-callback).

### Метод `autocomplete(String text, AutocompleteCallback callback)` { #autocomplete }

Запрашивает подсказки ввода. Метод помечен `@CustomMethod`. Требует настроенного endpoint подсказок в конфигурации аккаунта на сервере.

Параметр `text` — текущий ввод посетителя. Тип — `String`.

Параметр `callback` — объект, реализующий интерфейс [`AutocompleteCallback`](#autocomplete-callback).

### Метод `rateOperator(int id, String note, int rate, RateOperatorCallback rateOperatorCallback)`

С помощью этого метода можно отправить оценку оператора текущего посетителя с комментарием.

Параметр `id` — ID оператора, оценку которого необходимо отправить сервису **Webim**. Тип — `String`.

Параметр `note` — комментарий к оценке оператора, который необходимо отправить сервису **Webim**. Максимальная длина 2000 символов. Тип — опциональный `String`.

Параметр `byRating`— оценка оператора, которую необходимо отправить сервису **Webim**. Оценка должна быть целым числом от 1 до 5 (при указании иного, метод не произведет никаких действий). Тип — `Int`.

Параметр `completionHandler` — объект `RateOperatorCallback`.

Может выбрасывать ошибки типа `IllegalStateException`.

!!! Warning "Внимание!"
    Реализация механизма оценки оператора в чате остаётся за разработчиками мобильного приложения!

### Метод `respondSentryCall(String id)`

С помощью этого метода можно перевести чат на дежурного оператора.

Параметр `id` — ID сообщения о переводе на дежурного оператора. Тип — `String`.

Может выбрасывать ошибки типа `IllegalStateException`.

### Метод `searchMessages(String query, SearchMessagesCallback callback)`

Метод используется поиска сообщения в истории по запросу.

Может выбрасывать `IllegalStateException` или `RuntimeException` (см. [интерфейс MessageStream](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#message-stream)).

Параметр `query` — запрос для поиска. Тип — `String`.

Параметр `callback` — объект, реализующий методы интерфейса [`SearchMessagesCallback`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#search-messages-callback). Тип — `SearchMessagesCallback`.

### Метод `setPrechatFields(String prechatFields)`

Отправляет дополнительные поля на сервер.

Может выбрасывать ошибки типа `IllegalStateException`.

Параметр `prechatFields` — дополнительные поля. Тип — `String`.

### Метод `setSurveyListener(SurveyListener surveyListener)` { #set-survey-listener }

С помощью этого метода можно установить объект [`SurveyListener`](#survey-listener).

Параметр `surveyListener` — объект, реализующий интерфейс [`SurveyListener`](#survey-listener).

### Метод `setGreetingMessageListener(GreetingMessageListener listener)` { #set-greeting-message-listener }

С помощью этого метода можно установить приветственное сообщение.

Параметр `listener` — объект, реализующий интерфейс [`GreetingMessageListener`](#greeting-message-listener).

### Метод `send(String message, String data, DataMessageCallback dataMessageCallback)`

Метод используется для отправки сообщения посетителя в сервис **Webim**.

Параметр `message` — отправляемое сообщение. Тип — `String`.

Максимальная длина сообщения — 32000 символов. Более длинные сообщения будут обрезаны сервером при их получении.

Параметр `data` используется для передачи произвольного словаря с параметрами сообщения на сервер (если версия сервера поддерживает данный функционал). Ключи словаря должны быть типа `String`, значения — любого «стандартного» типа.

Параметр `dataMessageCallback` — объект [`DataMessageCallback`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#data-message-callback) либо `null`.

Возвращает ID, сгенерированный случайным образом для данного сообщения, который может быть использован для идентификации данного конкретного сообщения внутри логики приложения. Тип — `String`.

Может выбрасывать ошибки типа `IllegalStateException`.

Если существуют объекты [`MessageTracker`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#message-tracker) и [`MessageListener`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#message-listener), отправка сообщения вызовет метод [`messageAdded(Message before, Message message)`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#message-added) интерфейса [`MessageListener`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#message-listener) с новым сообщением со статусом [`SENDING`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#sending) перечислимого типа [`SendStatus`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#message-send-status).

### Метод `sendFiles(List<UploadedFile> uploadedFiles, SendFilesCallback sendFilesCallback)`

Метод, с помощью которого можно отправить файлы на сервер **Webim**. Тип — `UploadedFile`.

Параметр `uploadedFiles` — список файлов, которые необходимо отправить.

Параметр `sendFilesCallback` — объект, реализующий методы интерфейса [`SendFilesCallback`](#send-files-callback). Тип — `SendFilesCallback`.

### Метод `send(String surveyAnswer, SurveyAnswerCallback callback)`

С помощью этого метода можно отправить ответ на текущий вопрос, полученный с помощью метода [`SurveyListener.on(nextQuestion, SurveyQuestion)`](https://webim.ru/kb/mobile/sdk/v-4-0/ios-additional-features.html#survey-listener-on-next-question-survey-question).

Параметр `surveyAnswer` — ответ, для вопроса типа `'stars'` — ответом будет являться целое число от 1 до 5, определяющее оценку оператора. Для вопроса типа `'radio'` ответ — это индекс элемента в массиве `options`, начиная с 1. Для вопроса типа `'comment'` ответ — это строчка, представляющая комментарий пользователя. Тип — `String`.

Может выбрасывать ошибки типа `IllegalStateException`.

Параметр `callback` — объект, реализующий методы интерфейса [`SurveyAnswerCallback`](#survey-answer-callback). Тип — `SurveyAnswerCallback`.

### Метод `uploadFilesToServer(File file, String name, String mimeType, UploadFileToServerCallback uploadFileToServerCallback)` { #upload-files-to-server-file-filename-mime-type-callback }

Параметр `file` — сам файл в формате `File`.

Параметр `name` — название файла. Тип — `String`.

Параметр `mimeType` — MIMЕ-тип передаваемого файла. Тип — `String`.

Параметр `uploadFileToServerCallback` — объект, реализующий методы интерфейса [`UploadFileToServerCallback`](#upload-file-to-server-callback). Тип — `UploadFileToServerCallback`.

### Метод `deleteUploadedFile(String fileGuid, DeleteUploadedFileCallback deleteUploadedFileCallback)`

Метод, с помощью которого можно удалить файлы с сервера **Webim**.

Параметр `fileGuid` — id удаляемого файла. Тип — `String`.

Параметр `deleteUploadedFileCallback` — объект, реализующий методы интерфейса [`DeleteUploadedFileCallback`](#delete-uploaded-file-callback). Тип — `DeleteUploadedFileCallback`.

### Метод `sendSticker(int stickerId, SendStickerCallback sendStickerCallback)`

С помощью этого метода можно отправить стикер в чат.

Параметр `stickerId` — ID стикера, который необходимо отправить сервису **Webim**. Тип — `int`.

Параметр `sendStickerCallback` — объект, реализующий интерфейс [`SendStickerCallback`](#send-sticker-callback). Тип — `SendStickerCallback`.

### интерфейс `MessageReactionCallback` { #message-reaction-callback }

Колбэк результата вызова `MessageStream.reactMessage(...)`. Сигнатуры методов см. в **Webim Mobile SDK**.

### Метод `reactMessage(Message message, MessageReaction reaction, MessageReactionCallback callback)`

Метод используется для отправки реакции пользователя на сообщение.

Может выбрасывать `IllegalStateException` или `RuntimeException` (см. [интерфейс MessageStream](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#message-stream)).

Параметр `message` — сообщение для реакции. Тип — `Message`.

Параметр `reaction` — реакция пользователя. Тип — [`MessageReaction`](#message-reaction).

Параметр `callback` — объект, реализующий методы интерфейса [`MessageReactionCallback`](#message-reaction-callback). Тип — `MessageReactionCallback`.

### Метод `updateWidgetStatus(String data)`

Метод используется для обновления статуса виджета.

Может выбрасывать ошибки типа `IllegalStateException`.

Параметр `data` — строка в формате `JSON` с новым статусом виджета. Тип — `String`.

### Метод `closeSurvey(SurveyCloseCallback callback)` { #close-survey }

С помощью данного метода можно закрыть опрос.

Может выбрасывать ошибки типа `IllegalStateException`.

Параметр `completionHandler` — объект, реализующий методы интерфейса [`SurveyCloseCallback`](#survey-close-callback). Тип опциональный.

### Метод `clearChatHistory()`

Метод вызывается, когда пользователь очищает историю.

---

## Интерфейс `Operator`

### Метод `getInfo()`

Метод позволяет получить дополнительную информацию о конкретном операторе.

Возвращает дополнительную информацию о конкретном операторе. Тип — опциональный `String`.

---

## Интерфейс `SendFilesCallback` { #send-files-callback }

Объект, подчиняющийся интерфейсу, может быть передан в параметре `callback` метода [`sendFiles(List<UploadedFile>, SendFilesCallback)`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#send-files-message-stream) интерфейса [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#message-stream).

### Метод `onSuccess(Message.Id messageId)`

Метод вызывается при успешной отправке файлов методом [`sendFiles(List<UploadedFile>, SendFilesCallback)`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#send-files-message-stream) интерфейса [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#message-stream).

Параметр `messageid` — ID соответствующего сообщения. Тип — `Message.Id`.

### Метод `onFailure(Message.Id messageId, SendFileError sendFilesError)` { #send-files-callback-on-failure-message-id-error }

Вызывается при неудачной отправке файлов методом [`sendFiles(List<UploadedFile>, SendFilesCallback)`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#send-files-message-stream) интерфейса [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#message-stream).

Параметр `messageid` — ID соответствующего сообщения. Тип — `String`.

Параметр `sendFilesError` — ошибка, воспрепятствовавшая успешной отправке файла. Тип — [`SendFilesError`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#send-files-error).

---

## Перечисляемый тип `SendFilesError`

Возможные ошибки, которые могут быть переданы в параметр `error` метода [`onFailure(messageID, sendFilesError)`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#on-failure-message-id-error) интерфейса [`SendFilesCallback`](#send-files-callback).

### Случай `CONNECTION_TIMEOUT`

Превышено время ожидания соединения.

### Случай `FILE_NOT_FOUND`

Файл не найден.

### Случай `FILE_TYPE_NOT_ALLOWED`

Тип файла не разрешён.

### Случай `FILE_SIZE_EXCEEDED`

Превышен разрешённый размер файла.

### Случай `FILE_SIZE_TOO_SMALL`

Отправляемый файл имеет слишком маленький размер.

### Случай `MAX_FILES_COUNT_PER_CHAT_EXCEEDED`

Максимальное число файлов для чата.

### Случай `MAX_FILES_COUNT_PER_MESSAGE`

Максимальное число файлов для сообщения.

### Случай `UPLOADED_FILE_NOT_FOUND`

Отправка файлов в теле запроса не поддерживается.

### Случай `FILE_NAME_INCORRECT`

Некорректное имя файла.

### Случай `FILE_IS_EMPTY`

Файл пуст.

### Случай `UNAUTHORIZED`

Ошибка аутентификации посетителя на сервере.

### Случай `UNKNOWN`

Неизвестная ошибка.

---

## Интерфейс `DeleteUploadedFileCallback` { #delete-uploaded-file-callback }

Объект, подчиняющийся интерфейсу, может быть передан в параметре `callback` метода [`deleteUploadedFile(fileGuid, completionHandler)`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#delete-uploaded-files-message-stream) интерфейса [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#message-stream).

### Метод `onSuccess()`

Метод вызывается при успешном удалении файла методом [`deleteUploadedFile(fileGuid, callback)`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#delete-uploaded-files-message-stream) интерфейса [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#message-stream).

### Метод `onFailure(DeleteUploadedFileError error)` { #delete-uploaded-file-callback-on-failure-error }

Вызывается при неудачном удалении файла методом [`deleteUploadedFile(fileGuid, callback)`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#delete-uploaded-files-message-stream) интерфейса [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#message-stream).

Параметр `error` — ошибка, воспрепятствовавшая успешной отправке файла. Тип — [`DeleteUploadedFileError`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#delete-uploaded-file-error).

---

## Перечисляемый тип `DeleteUploadedFileError`

Возможные ошибки, которые могут быть переданы в параметр `error` метода [`onFailure(error)`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#delete-uploaded-file-callback-on-failure) интерфейса [`DeleteUploadedFileCallback`](#delete-uploaded-file-callback).

### Случай `FILE_NOT_FOUND`

Файл не найден.

### Случай `FILE_HAS_BEEN_SENT`

Файл был отправлен.

### Случай `UNKNOWN`

Неизвестная ошибка.

---

## Интерфейс `SendStickerCallback` { #send-sticker-callback }

Объект, подчиняющийся интерфейсу, может быть передан в параметре `sendStickerCallback` метода [`sendSticker(int, SendStickerCallback)`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#send-sticker) интерфейса [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#message-stream).

### Метод `onSuccess()`

Метод вызывается при успешной отправке стикера методом [`sendSticker(int, SendStickerCallback)`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#send-sticker) интерфейса [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#message-stream).

### Метод `onFailure(WebimError error)` { #send-sticker-callback-on-failure-error }

Вызывается при неудачной отправке стикера методом [`sendSticker(int, SendStickerCallback)`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#send-sticker) интерфейса [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#message-stream).

Параметр `error` — ошибка, воспрепятствовавшая успешной отправке файла. Тип — [`SendStickerError`](#send-sticker-error).

---

## Перечисляемый тип `SendStickerError` { #send-sticker-error }

Возможные ошибки, которые могут быть переданы в параметр `error` метода [`onFailure(WebimError ...)`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#on-failure-send-sticker-callback) интерфейса [`SendStickerCallback`](#send-sticker-callback).

### Случай `NO_CHAT`

Чат не найден.

### Случай `NO_STICKER_ID `

ID стикера не установлен.

---

## интерфейс `SendResolutionSurveyCallback` { #send-resolution-survey-callback }

Объект, реализующий интерфейс, может быть передан в параметре `callback` метода [`sendResolutionSurvey`](#send-resolution-survey) интерфейса [`MessageStream`](#message-stream).

### метод `onSuccess()`

Вызывается при успешной отправке ответа опроса после консультации.

### метод `onFailed(WebimError<SendResolutionSurveyCallback.SendResolutionError> error)`

Вызывается, если запрос завершился с ошибкой.

Параметр `error` — ошибка. Тип — [`WebimError<SendResolutionSurveyCallback.SendResolutionError>`](#send-resolution-error).

---

## Перечисляемый тип `SendResolutionError` { #send-resolution-error }

Возможные ошибки метода [`sendResolutionSurvey`](#send-resolution-survey).

### Случай `RATE_DISABLED`

Оценка оператора отключена в настройках аккаунта.

### Случай `NO_CHAT`

Текущий чат отсутствует.

### Случай `OPERATOR_NOT_IN_CHAT`

Указанный оператор не принадлежит текущему чату.

### Случай `RESOLUTION_SURVEY_VALUE_INCORRECT`

Передан некорректный ответ опроса.

### Случай `RATE_FORM_MISMATCH`

Форма оценки не соответствует конфигурации на сервере.

### Случай `VISITOR_SEGMENT_MISMATCH`

Сегмент посетителя не соответствует условиям опроса.

### Случай `RATED_ENTITY_MISMATCH`

Оцениваемая сущность не соответствует запросу.

### Случай `UNKNOWN`

Неизвестная ошибка.

---

## интерфейс `GeolocationCallback` { #geolocation-callback }

Объект, реализующий интерфейс, может быть передан в параметре `callback` метода [`sendGeolocation`](#send-geolocation) интерфейса [`MessageStream`](#message-stream).

### метод `onSuccess()`

Вызывается при успешной отправке координат.

### метод `onFailed(WebimError<GeolocationError> geolocationError)`

Вызывается, если отправка координат завершилась с ошибкой.

Параметр `geolocationError` — ошибка. Тип — [`WebimError<GeolocationError>`](#geolocation-error).

---

## Перечисляемый тип `GeolocationError` { #geolocation-error }

Возможные ошибки метода [`sendGeolocation`](#send-geolocation).

### Случай `INVALID_GEO`

Переданы некорректные координаты.

### Случай `UNKNOWN`

Неизвестная ошибка.

---

## интерфейс `AutocompleteCallback` { #autocomplete-callback }

Объект, реализующий интерфейс, может быть передан в параметре `callback` метода [`autocomplete`](#autocomplete) интерфейса [`MessageStream`](#message-stream).

### метод `onSuccess(List<SuggestionItem> suggestions)`

Вызывается при успешном получении подсказок.

Параметр `suggestions` — список подсказок. Тип — `List<SuggestionItem>` (`ru.webim.android.sdk.impl.items.SuggestionItem`).

### метод `onFailure(WebimError<AutocompleteError> webimError)`

Вызывается, если запрос подсказок завершился с ошибкой.

Параметр `webimError` — ошибка. Тип — [`WebimError<AutocompleteError>`](#autocomplete-error).

---

## Перечисляемый тип `AutocompleteError` { #autocomplete-error }

Возможные ошибки метода [`autocomplete`](#autocomplete).

### Случай `HINTS_API_INVALID`

Endpoint подсказок не задан или некорректен в конфигурации аккаунта на сервере.

### Случай `UNKNOWN`

Неизвестная ошибка.

---

## класс `SuggestionItem` { #suggestion-item }

Элемент списка подсказок, который возвращает [`AutocompleteCallback.onSuccess`](#autocomplete-callback). Класс находится в пакете `ru.webim.android.sdk.impl.items`.

### метод `getTagId()`

Возвращает идентификатор тега подсказки. Тип — `String`.

### метод `getSuggestId()`

Возвращает идентификатор подсказки. Тип — `String`.

### метод `getText()`

Возвращает текст подсказки. Тип — `String`.

---

## интерфейс `Survey`

### метод `getConfig()`

С помощью этого метода можно получить конфигурацию опроса.

Не принимает параметры.

Возвращает экземпляр класса [`Config`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#config).

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

### метод `getCurrentQuestionInfo()`

С помощью этого метода можно получить информацию о текущем вопросе.

Не принимает параметры.

Возвращает экземпляр класса [`CurrentQuestionInfo`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#current-question-info).

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

### метод `getId()`

С помощью этого метода можно получить `id` опроса.

Не принимает параметры.

Возвращает ID опроса. Тип `String`.

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

---

## интерфейс `SurveyAnswerCallback` { #survey-answer-callback }

Объект, реализующий интерфейс, может быть передан в параметре `callback` метода [`sendSurveyAnswer(String surveyAnswer, SurveyAnswerCallback callback)`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#send-survey-answer) интерфейса [`MessageStream`](#message-stream).

### метод `onSuccess()`

Метод вызывается при успешном результате вызова метода [`sendSurveyAnswer(String surveyAnswer, SurveyAnswerCallback callback)`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#send-survey-answer) интерфейса [`MessageStream`](#message-stream).

Не принимает параметры.

Ничего не возвращает.

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

### метод `onFailure(WebimError<SurveyAnswerError> WebimError)` { #on-failure-survey-answer-callback }

Метод вызывается при неуспешном результате вызова метода [`sendSurveyAnswer(String surveyAnswer, SurveyAnswerCallback callback)`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#send-survey-answer) интерфейса [`MessageStream`](#message-stream).

Параметр WebimError — возникшая ошибка. Тип — `WebimError<SurveyAnswerCallback>`.

Ничего не возвращает.

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

---

## интерфейс `SurveyCloseCallback` { #survey-close-callback }

Объект, реализующий интерфейс, может быть передан в параметре `callback` метода [`closeSurvey(SurveyCloseCallback callback)`](#close-survey) интерфейса [`MessageStream`](#message-stream).

### метод `onSuccess()`

Метод вызывается при успешном результате вызова метода [`closeSurvey(SurveyCloseCallback callback)`](#close-survey) интерфейса [`MessageStream`](#message-stream).

Не принимает параметры.

Ничего не возвращает.

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

### метод `onFailure(WebimError<SurveyAnswerError> WebimError)`

Метод вызывается при неуспешном результате вызова метода [`closeSurvey(SurveyCloseCallback callback)`](#close-survey) интерфейса [`MessageStream`](#message-stream).

Параметр `WebimError` — возникшая ошибка. Тип — `WebimError<SurveyCloseError>`.

Ничего не возвращает.

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

---

## интерфейс `SurveyListener` { #survey-listener }

Объект, реализующий интерфейс, может быть передан в параметре `SurveyListener` метода [`setSurveyListener(SurveyListener surveyListener)`](#set-survey-listener) интерфейса [`MessageStream`](#message-stream).

### метод `onSurvey(Survey survey)` { #on-survey-survey-listener }

Данный метод вызывается в момент, когда с сервера приходит новый опрос.

Параметр `survey` — объект опроса.

Ничего не возвращает.

Исключений не выбрасывает.

Не требует предварительного вызова никаких других методов.

### метод `onNextQuestion(Survey.Question question)` { #on-next-question }

Данный метод вызывается в двух случаях: при получении опроса сразу после вызова [`onSurvey(Survey survey)`](#on-survey-survey-listener) и при успешном ответе на предыдущий вопрос.

Параметр `question` — текущий вопрос.

Ничего не возвращает.

Исключений не выбрасывает.

Не требует предварительного вызова никаких других методов.

### метод `onSurveyCanceled()` { #on-survey-canceled }

Данный метод вызывается, когда опрос закрывается на сервере.

Не принимает параметры.

Ничего не возвращает.

Исключений не выбрасывает.

Не требует предварительного вызова никаких других методов.

---

## интерфейс `UploadedFile` { #uploaded-file }

Интерфейс является абстракцией, представляющей отдельный файл который загружен на сервер **Webim**.

Интерфейс реализован внутренними сущностями SDK, объекты которого могут быть получены в вызовах методов интерфейса [`MessageListener`](https://webim.ru/kb/mobile/sdk/v-4-0/android-sdk-handbook.html#message-listener).

Объекты `UploadedFile` — неизменяемые. Изменения каких-либо его полей создает новый объект.

### метод `getSize()`

Метод, с помощью которого может быть получен размер файла вложения.

Не принимает параметров.

Возвращает размер файла вложения в байтах. Тип — `long`.

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

### метод `getGuid()`

Метод, с помощью которого может быть получен `guid` файла вложения.

Не принимает параметров.

Возвращает значение в текстовом виде. Тип — `String`.

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

### метод `getFileName()`

Метод, с помощью которого может быть получено имя файла вложения.

Не принимает параметров.

Возвращает имя файла вложения в текстовом виде. Тип — `String`.

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

### метод `getContentType()`

Метод, с помощью которого может быть получен MIME-тип вложения.

Не принимает параметров.

Возвращает MIME-тип вложения в текстовом виде. Тип — `String`.

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

### метод `getVisitorId()`

Метод, с помощью которого может быть получен id отправителя файла.

Не принимает параметров.

Возвращает значение в текстовом виде. Тип — `String`.

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

### метод `getClientContentType()`

Метод, с помощью которого может быть получен MIME-тип вложения.

Не принимает параметров.

Возвращает MIME-тип вложения в текстовом виде. Тип — `String`.

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

---

## интерфейс `UploadFileToServerCallback` { #upload-file-to-server-callback }

Интерфейс, методы которого реализуются каким-либо классом приложения.

Объект, подчиняющийся интерфейсу, может быть передан в параметре `uploadFileToServerCallback` метода [`uploadFilesToServer(File file, String name, String mimeType, UploadFileToServerCallback uploadFileToServerCallback)`](#upload-files-to-server-file-filename-mime-type-callback) интерфейса [`MessageStream`](#message-stream).

### метод `onSuccess(Message.Id id, UploadedFile uploadedFile)`

Метод вызывается при успешной отправке файла методом [`uploadFilesToServer(File file, String name, String mimeType, UploadFileToServerCallback uploadFileToServerCallback)`](#upload-files-to-server-file-filename-mime-type-callback) интерфейса [`MessageStream`](#message-stream).

Параметр `id` — ID соответствующего сообщения. Тип — `Message.Id`.

Параметр `uploadedFile` — загруженный на сервер файл. Тип — `UploadedFile`.

Ничего не возвращает.

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

Метод будет вызван после завершения работы метода [`uploadFilesToServer(File file, String name, String mimeType, UploadFileToServerCallback uploadFileToServerCallback)`](#upload-files-to-server-file-filename-mime-type-callback).

### метод `onFailure(Message.Id id, WebimError<SendFilesCallback.SendFileError> error)`

Вызывается при неудачной отправке файла методом [`uploadFilesToServer(File file, String name, String mimeType, UploadFileToServerCallback uploadFileToServerCallback)`](#upload-files-to-server-file-filename-mime-type-callback) интерфейса [`MessageStream`](#message-stream).

Параметр `id` — ID соответствующего сообщения. Тип — `Message.Id`.

Параметр `error` — ошибка, воспрепятствовавшая успешной отправке файла. Тип — `<SendFilesCallback.SendFileError>`.

Ничего не возвращает.

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

Метод будет вызван после завершения работы метода [`uploadFilesToServer(File file, String name, String mimeType, UploadFileToServerCallback uploadFileToServerCallback)`](#upload-files-to-server-file-filename-mime-type-callback).

---

## Перечисляемый тип `SurveyAnswerError`

Возможные ошибки, которые могут быть переданы в параметр `WebimError` метода [`onFailure(WebimError<SurveyAnswerError> WebimError)`](#on-failure-survey-answer-callback) интерфейса [`SurveyAnswerCallback`](#survey-answer-callback).

### случай `INCORRECT_RADIO_VALUE`

Возникает, когда был передан неправильный ответ на вопрос типа `'radio'`.


### случай `INCORRECT_STARS_VALUE`

Возникает, когда был передан неправильный ответ на вопрос типа `'stars'`.


### случай `INCORRECT_SURVEY_ID`

Возникает, когда при попытке отправить ответ на вопрос был передан неверный ID опроса.


### случай `MAX_COMMENT_LENGTH_EXCEEDED`

Возникает, когда был отправлен ответ на вопрос типа `'comment'`, превосходящий максимально разрешенную длину.


### случай `NO_CURRENT_SURVEY`

Возникает при попытке отправить ответ на вопрос, когда текущий опрос на сервере уже был закрыт или ещё не был начат.


### случай `SURVEY_DISABLED`

Возникает при попытке отправить ответ на вопрос, когда возможность опросов выключена на данном сервере.


### случай `UNKOWN`

Возникает, когда полученная ошибка не может быть обработана текущей версии `WebimClientLibrary`.

---

## Перечисляемый тип `SurveyCloseError`

Возможные ошибки, которые могут быть переданы в параметр `WebimError` метода [`onFailure(WebimError<SurveyCloseError> WebimError)`](#send-files-callback-on-failure-message-id-error) интерфейса [`SurveyCloseCallback`](#survey-close-callback).

### случай `INCORRECT_SURVEY_ID`

Возникает, когда при попытке закрыть опрос был передан неверный ID опроса.

### случай `NO_CURRENT_SURVEY`

Возникает при попытке закрыть опрос, когда текущий опрос на сервере уже был закрыт или ещё не был начат.

### случай `SURVEY_DISABLED`

Возникает при попытке закрыть опрос, когда возможность опросов выключена на данном сервере.

### случай `UNKNOWN`

Возникает, когда полученная ошибка не может быть обработана текущей версией `WebimClientLibrary`.

---

## интерфейс `GreetingMessageListener` { #greeting-message-listener }

Интерфейс является абстракцией, представляющей приветственное сообщение.

Объект, реализующий интерфейс, может быть передан в параметре `listener` метода [`setGreetingMessageListener(GreetingMessageListener listener)`](#set-greeting-message-listener) интерфейса [`MessageStream`](#message-stream).

### метод `greetingMessage(String message)`

Метод вызывается при получении приветственного сообщения до получения сообщений в чате.

Параметр `message` — приветственное сообщение. Тип — `String`.

Ничего не возвращает.

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

---

## интерфейс `Question` { #question }

### метод `getType()` { #get-type-question }

С помощью этого метода можно узнать тип данного вопроса.

Не принимает параметры.

Возвращает тип вопроса. Тип `Type`.

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

### метод `getText()`

С помощью этого метода можно получить текст вопроса.

Не принимает параметры.

Возвращает текст вопроса. Тип `String`.

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

### метод `getOptions()`

С помощью этого метода можно получить варианты ответов для вопроса.

Не принимает параметры.

Возвращает список вариантов типа `List<String>` или `null`, если тип вопроса не `'radio'`.

Не выбрасывает исключения.

Не требует предварительного вызова никаких других методов.

---

---

Источник: https://webim.ru/kb/mobile/sdk/v-4-0/android-additional-features.html
