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

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

!!! Note "N.B."
    Эта статья является дополнением [основного справочника](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html) по **Webim Mobile SDK** для **iOS**.

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

### Метод класса `newFAQBuilder()`

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

## Класс `FAQBuilder`

Класс, экземпляр которого используется для получения экземпляра класса [`FAQ`](#faq). Экземпляр класса получается методом [`newFAQBuilder()`](#newfaqbuilder) класса [`Webim`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#webim).

### Метод экземпляра `set(accountName:)` { #faqbuilder-set-accountname }

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

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

Возвращает тот же экземпляр класса [`FAQBuilder`](#faqbuilder), но с установленным названием аккаунта. Для получения экземпляра [`FAQ`](#faq) вызов метода является обязательным.

### Метод экземпляра `set(application:)`

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

Параметр `application` — название приложения клиента в системе **Webim**.

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

### Метод экземпляра `set(departmentKey:)`

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

Параметр `departmentKey` — название приложения клиента в системе **Webim**.

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

### Метод экземпляра `set(language:)`

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

Параметр `language` — язык клиента в системе **Webim**.

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

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

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

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

Может выбрасывать ошибки типа [`FAQBuilderError`](#faq-builder-error).

Требует вызова метода [`set(accountName:)`](#faqbuilder-set-accountname).

---

## Протокол `FAQ` { #faq }

Протокол, позволяющий производить манипуляции с текущим списком часто задаваемых вопросов. Экземпляр класса `FAQ` получается с помощью методов класса [`FAQBuilder`](#faqbuilder).

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

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

Может выбрасывать ошибки типа [`FAQAccessError`](#faq-access-error). Необходим для полноценного функционирования сервиса в контексте приложения.

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

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

Может выбрасывать ошибки типа [`FAQAccessError`](#faq-access-error). Для вызова метода список часто задаваемых вопросов не должен находиться в деактивированном состоянии.

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

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

Может выбрасывать ошибки типа [`FAQAccessError`](#faq-access-error).

### Метод экземпляра `getCategory(id:completionHandler:)`

Метод, который используется для получения объекта класса [`FAQCategory`](#faq-category) через `completionHandler`.

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

Параметр `completionHandler` — замыкание, которое выполняется после завершения выполнения метода. При успешном завершении работы метода замыкание принимает один параметр типа [`FAQCategory`](#faq-category), при неуспешном — параметр типа [`FAQGetCompletionHandlerError`](#faq-get-completion-handler-error), и не имеет возвращаемого типа.

Для правильной работы метода требуется вызов метода [`resume()`](#faq-resume).

### Метод экземпляра `getCategoriesForApplication(completionHandler:)`

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

Параметр `completionHandler` — замыкание, которое выполняется после завершения выполнения метода. При успешном завершении работы метода замыкание принимает массив идентификаторов категорий типа `String`, при неуспешном — параметр типа [`FAQGetCompletionHandlerError`](#faq-get-completion-handler-error), и не имеет возвращаемого типа.

Для правильной работы метода требуется вызов метода [`resume()`](#faq-resume).

### Метод экземпляра `getCachedCategory(id:completionHandler:)`

Метод, который используется для получения объекта класса [`FAQCategory`](#faq-category) через `completionHandler` из сохранённого кэша.

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

Параметр `completionHandler` — замыкание, которое выполняется после завершения выполнения метода. При успешном завершении работы метода замыкание принимает один параметр типа [`FAQCategory`](#faq-category), при неуспешном — параметр типа [`FAQGetCompletionHandlerError`](#faq-get-completion-handler-error), и не имеет возвращаемого типа.

Для правильной работы метода требуется вызов метода [`resume()`](#faq-resume).

### Метод экземпляра `getItem(id:openFrom:completionHandler:)`

Метод, который используется для получения объекта класса [`FAQItem`](#faq-item) через `completionHandler`.

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

Параметр `openFrom` — запрос статьи из определённого источника. Тип — опциональный [`FAQItemSource`](#faq-item-source).

Параметр `completionHandler` — замыкание, которое выполняется после завершения выполнения метода. При успешном завершении работы метода замыкание принимает один параметр типа [`FAQItem`](#faq-item), при неуспешном — параметр типа [`FAQGetCompletionHandlerError`](#faq-get-completion-handler-error), и не имеет возвращаемого типа.

Для правильной работы метода требуется вызов метода [`resume()`](#faq-resume).

### Метод экземпляра `getCachedItem(id:openFrom:completionHandler:)`

Метод, который используется для получения объекта класса [`FAQItem`](#faq-item) через `completionHandler` из кэша.

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

Параметр `openFrom` — запрос статьи из определённого источника. Тип — опциональный [`FAQItemSource`](#faq-item-source).

Параметр `completionHandler` — замыкание, которое выполняется после завершения выполнения метода. При успешном завершении работы метода замыкание принимает один параметр типа [`FAQItem`](#faq-item), при неуспешном — параметр типа [`FAQGetCompletionHandlerError`](#faq-get-completion-handler-error), и не имеет возвращаемого типа.

Для правильной работы метода требуется вызов метода [`resume()`](#faq-resume).

### Метод экземпляра `getStructure(id:completionHandler:)`

Метод, который используется для получения объекта класса [`FAQStructure()`](#faq-structure) через `completionHandler.`

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

Параметр `completionHandler` — замыкание, которое выполняется после завершения выполнения метода. При успешном завершении работы метода замыкание принимает один параметр типа [`FAQStructure()`](#faq-structure), при неуспешном — параметр типа [`FAQGetCompletionHandlerError`](#faq-get-completion-handler-error), и не имеет возвращаемого типа.

Для правильной работы метода требуется вызов метода [`resume()`](#faq-resume).

### Метод экземпляра `getCachedStructure(id:completionHandler:)`

Метод, который используется для получения объекта класса [`FAQStructure()`](#faq-structure) через `completionHandler` из кэша.

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

Параметр `completionHandler` — замыкание, которое выполняется после завершения выполнения метода. При успешном завершении работы метода замыкание принимает один параметр типа [`FAQStructure()`](#faq-structure), при неуспешном — параметр типа [`FAQGetCompletionHandlerError`](#faq-get-completion-handler-error), и не имеет возвращаемого типа.

Для правильной работы метода требуется вызов метода [`resume()`](#faq-resume).

### Метод экземпляра `func like(item:completionHandler:)`

Метод, который позволяет поставить отметку «нравится» для статьи.

Параметр `item` — страница, которой необходимо поставить оценку. Тип — [`FAQItem`](#faq-item).

Параметр `completionHandler` — замыкание, которое выполняется после завершения выполнения метода. При успешном завершении работы метода замыкание принимает один параметр типа [`FAQItem`](#faq-item), при неуспешном — параметр типа [`FAQGetCompletionHandlerError`](#faq-get-completion-handler-error), и не имеет возвращаемого типа.

Для правильной работы метода требуется вызов метода [`resume()`](#faq-resume).

### Метод экземпляра `dislike(item:completionHandler:)`

Метод, который позволяет поставить отметку «не нравится» для статьи.

Важно: для правильной работы метода требуется вызов метод [`resume()`](#faq-resume).

Параметр `item` — страница, которой необходимо поставить оценку. Тип — [`FAQItem`](#faq-item).

Параметр `completionHandler` — замыкание, которое выполняется после завершения выполнения метода. При успешном завершении работы метода замыкание принимает один параметр типа [`FAQItem`](#faq-item), при неуспешном — параметр типа [`FAQGetCompletionHandlerError`](#faq-get-completion-handler-error), и не имеет возвращаемого типа.

Для правильной работы метода требуется вызов метода [`resume()`](#faq-resume).

### Метод экземпляра `search(query:category:limitOfItems:completionHandler:)`

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

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

Параметр `category` — ID категории, в которой осуществляется поиск. Тип — `String`.

Параметр `limitOfItems` — число, не больше которого нужно вернуть статей.

Параметр `completionHandler` — замыкание, которое выполняется после завершения выполнения метода. При успешном завершении работы метода замыкание принимает один параметр типа [`FAQSearchItem`](#faq-search-item), при неуспешном — параметр типа [`FAQGetCompletionHandlerError`](#faq-get-completion-handler-error), и не имеет возвращаемого типа.

Для правильной работы метода требуется вызов метода [`resume()`](#faq-resume).

---

## Протокол `SendResolutionCompletionHandler` { #send-resolution-completion-handler }

Объект, реализующий данный протокол, может быть передан в параметр `completionHandler` метода [`sendResolutionSurvey(id:answer:completionHandler:)`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream-sendresolutionsurvey-idanswercompletionhandler) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

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

Вызывается при успешном результате вызова метода `sendResolutionSurvey(id:answer:completionHandler:)` протокола `MessageStream`.

### Метод `onFailure(error:)`

Вызывается при неуспешном результате вызова метода `sendResolutionSurvey(id:answer:completionHandler:)` протокола `MessageStream`.

Параметр `error` — возникшая ошибка. Тип — [`SendResolutionError`](#send-resolution-error).

---

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

Возможные ошибки, которые могут быть переданы в параметр `error` метода `SendResolutionCompletionHandler.onFailure(error:)`.

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

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

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

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

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

Слишком длинный ответ на опрос. Максимальная длина 2000 символов.

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

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

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

Возникает, когда в чате нет оператора.

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

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

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

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

---

## Протокол `FAQCategory` { #faq-category }

Представление категории блока часто задаваемых вопросов. Предоставляет методы получения информации о категории.Объекты `FAQCategory` могут быть получены с помощью `completionHandler` в методах `getCategory(id:completion:)` и `getCachedCategory(id:completionHandler:)`.

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

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

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

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

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

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

Возвращает страницы, принадлежащих категории. Тип — [`FAQItem`](#faq-item).

### Метод экземпляра `getSubcategories()` { #faq-category-get-subcategories }

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

Возвращает информацию о подкатегориях, принадлежащих категории. Тип — [`FAQCategoryInfo`](#faq-category-info).

---

## Протокол `FAQItem` { #faq-item }

Представление страницы блока часто задаваемых вопросов. Предоставляет методы получения информации о странице. Объекты `FAQItem` могут быть получены с `completionHandler` функции `getItem(id:completionHandler:)`.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Возвращает оценку пользователя. Тип — [`UserRate`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html).

---

## Протокол `FAQCategoryInfo` { #faq-category-info }

Представление информации о категории блока часто задаваемых вопросов. Предоставляет методы получения идентификатора и заголовка категории. Объекты `FAQCategoryInfo` могут быть получены с помощью метода [`getSubcategories()`](#faq-category-get-subcategories).

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

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

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

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

---

## Протокол `FAQSearchItem` { #faq-search-item }

Краткая информация о страницах, полученных в результате поиска по ключевому слову.

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

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

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

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

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

У страницы есть оценка поиска. Чем больше оценка, тем больше страница подходит под поисковой запрос. Возвращает оценку поиска. Тип — `Double`.

---

## Протокол `FAQStructure` { #faq-structure }

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

Объекты `FAQStructure` могут быть получены с помощью `completionHandler` метода `getStructure(id:completionHandler:)`.

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

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

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

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

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

### Метод экземпляра `getType()` { #faq-structure-get-type }

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

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

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

Возвращает поддеревья, корнями которых являются прямые потомки корня дерева (структуры). Тип — [`FAQStructure`](#faq-structure).

---

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

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

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

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

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

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

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

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

---

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

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

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

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

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

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

---

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

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

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

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

---

## Перечисляемый тип `FAQGetCompletionHandlerError` { #faq-get-completion-handler-error }

Возможные ошибки, которые могут выбрасывать методы протокола [`FAQ`](#faq).

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

Возникшая ошибка.

---

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

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

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

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

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

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

---

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

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

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

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

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

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

## случай `unknown`

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

---

## Класс `SessionBuilder`

### Метод `set(prechat:)`

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

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

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

### Метод `set(multivisitorSection:)`

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

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

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

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

### Метод `set(onlineStatusRequestFrequencyInMillis:)`

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

Параметр `onlineStatusRequestFrequencyInMillis` — `Int64`.

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

---

## Протокол `WebimSession`

### Метод `change(location:)`

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

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

Может выбрасывать ошибки типа [`AccessError`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#access-error).

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

---

## Протокол `Message`

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

Возвращает объект типа [`Sticker`](https://webim.ru/kb/mobile/sdk/v-3-0/android-additional-features.html#sticker).

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

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

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

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

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

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

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

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

Метод возвращает реакцию текущего посетителя (`ReactionString`) для сообщения, либо `nil`, если посетитель ещё не реагировал.

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

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

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

Возвращает объект [`Group`](#group) или `nil`.

---

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

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

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

---

## Протокол MessageStream

### Метод `rateOperatorWith(id:note:byRating:completionHandler:)`

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

Параметр `id` — ID оператора, оценку которого необходимо отправить сервису **Webim**. Тип — `String`. Опциональный: если передать `nil`, будет отправлена оценка текущему оператору чата (если есть).

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

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

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

Может выбрасывать ошибки типа [`AccessError`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#access-error).

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

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

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

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

Может выбрасывать ошибки типа [`AccessError`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#access-error).

### Метод `searchStreamMessagesBy(query:completionHandler:)`

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

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

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

Параметр `completionHandler` — объект, реализующий методы протокола [`SearchMessagesCompletionHandler`](#search-messages-completion-handler). Тип опциональный.

### Метод `set(prechatFields:)`

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

Может выбрасывать ошибки типа [`AccessError`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#access-error).

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

### Метод `set(surveyListener:)` { #message-stream-set-survey-listener }

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

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

### Метод `set(helloMessageListener)`

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

Параметр `helloMessageListener` — объект, реализующий протокол [`HelloMessageListener`](#hello-message-listener).

### Метод `send(message:data:completionHandler:)`

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

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

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

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

Параметр `completionHandler` — объект [`DataMessageCompletionHandler`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#data-message-completion-handler) либо `nil`.

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

Может выбрасывать ошибки типа [`AccessError`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#access-error).

Если существуют объекты [`MessageTracker`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-tracker) и [`MessageListener`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-listener), отправка сообщения вызовет метод [`added(newMessage:previousMessage:)`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#added-message-new-message-after-previous-message) протокола [`MessageListener`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-listener) с новым сообщением со статусом [`SENDING`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#sending) перечислимого типа [`MessageSendStatus`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-send-status).

### Метод `send(uploadedFiles:completionHandler:)`

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

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

Параметр `completionHandler` — объект, реализующий методы протокола [`SendFilesCompletionHandler`](#send-files-completion-handler). Тип опциональный.

### Метод `send(surveyAnswer:completionHandler:)` { #message-stream-send-survey-answer-completion-handler }

С помощью этого метода можно отправить ответ на текущий вопрос, полученный с помощью метода [`SurveyListener.on(nextQuestion: SurveyQuestion)`](#survey-listener-on-next-question-survey-question).

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

Может выбрасывать ошибки типа [`AccessError`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#access-error).

Параметр `completionHandler` — объект, реализующий методы протокола [`SendSurveyAnswerCompletionHandler`](#send-survey-answer-completion-handler). Тип опциональный.

### Метод `uploadFilesToServer(file:filename:mimeType:completionHandler:)` { #upload-files-to-server-file-filename-mime-type-completion-handler }

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

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

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

Параметр `completionHandler` — объект, реализующий методы протокола [`UploadFileToServerCompletionHandler`](#upload-file-to-server-completion-handler). Тип опциональный.

### Метод `deleteUploadedFiles(fileGuid:completionHandler:)`

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

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

Параметр `completionHandler` — объект, реализующий методы протокола [`DeleteUploadedFileCompletionHandler`](#delete-uploaded-file-completion-handler). Тип опциональный.

### Метод `sendSticker(withId:completionHandler:)` { #send-sticker-with-id-completion-handler }

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

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

Параметр `completionHandler` — объект, реализующий протокол [`SendStickerCompletionHandler`](#send-sticker-completion-handler). Тип опциональный.

### Метод `autocomplete(text:completionHandler)` { #autocomplete }

Метод возвращает подсказки.

Может выбрасывать ошибки типа [`AccessError`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#access-error).

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

Параметр `completionHandler` — объект, реализующий протокол [`AutocompleteCompletionHandler`](#autocomplete-completion-handler). Тип опциональный.

### Метод `react(message:reaction:completionHandler:)` { #message-stream-react }

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

Может выбрасывать ошибки типа [`AccessError`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#access-error).

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

Параметр `reaction` — реакция пользователя. Тип — `ReactionString`.

Параметр `completionHandler` — объект, реализующий методы протокола [`ReactionCompletionHandler`](#reaction-completion-handler). Тип опциональный.

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

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

Может выбрасывать ошибки типа [`AccessError`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#access-error).

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

### Метод `closeSurvey(completionHandler:)` { #message-stream-close-survey-completion-handler }

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

Может выбрасывать ошибки типа [`AccessError`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#access-error).

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

### Метод `sendGeolocation(latitude:longitude:completionHandler:)` { #sendgeolocation }

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

Параметр `latitude` – широта. Тип - `Double`.

Параметр `longitude` - долгота. Тип - `Double`.

Параметр `completionHandler` – объект, реализующий методы протокола [GeolocationCompletionHandler](#geolocation-completion-handler). Тип опциональный.

Может выбрасывать ошибки типа [AccessError](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#access-error).

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

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

---

## Протокол `Operator`

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

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

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

---

## Протокол `SendFilesCompletionHandler` { #send-files-completion-handler }

Объект, подчиняющийся протоколу, может быть передан в параметре `completionHandler` метода [`send(uploadedFiles:completionHandler:)`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

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

Метод вызывается при успешной отправке файлов методом [`send(uploadedFiles:completionHandler:)`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

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

### Метод `onFailure(messageID:error:)` { #send-files-completion-handler-on-failure-message-id-error }

Вызывается при неудачной отправке файлов методом [`send(uploadedFiles:completionHandler:)`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

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

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

---

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

Возможные ошибки, которые могут быть переданы в параметр `error` метода [`onFailure(messageID:error:)`](#send-files-completion-handler-on-failure-message-id-error) протокола [`SendFilesCompletionHandler`](#send-files-completion-handler).

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

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

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

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

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

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

---

## Протокол `DeleteUploadedFileCompletionHandler` { #delete-uploaded-file-completion-handler }

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

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

Метод вызывается при успешном удалении файла методом [`deleteUploadedFiles(fileGuid:completionHandler:)`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

### Метод `onFailure(error:)` { #delete-uploaded-file-completion-handler-on-failure-error }

Вызывается при неудачном удалении файла методом [`deleteUploadedFiles(fileGuid:completionHandler:)`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

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

---

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

Возможные ошибки, которые могут быть переданы в параметр `error` метода [`onFailure(error:)`](#delete-uploaded-file-completion-handler-on-failure-error) протокола [`DeleteUploadedFileCompletionHandler`](#delete-uploaded-file-completion-handler).

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

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

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

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

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

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

---

## Протокол `SendStickerCompletionHandler` { #send-sticker-completion-handler }

Объект, подчиняющийся протоколу, может быть передан в параметре `completionHandler` метода [`send(message:completionHandler:)`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream-send-message-completion-handler) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

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

Метод вызывается при успешной отправке стикера методом [`sendSticker(withId:completionHandler:)`](#send-sticker-with-id-completion-handler) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

### Метод `onFailure(error:)` { #send-sticker-completion-handler-on-failure-error }

Вызывается при неудачной отправке стикера методом [`send(message:completionHandler:)`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream-send-message-completion-handler) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

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

---

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

Возможные ошибки, которые могут быть переданы в параметр `error` метода [`onFailure(error:)`](#send-sticker-completion-handler-on-failure-error) протокола [`SendStickerCompletionHandler`](#send-sticker-completion-handler).

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

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

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

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

---

## Протокол `AutocompleteCompletionHandler` { #autocomplete-completion-handler }

Объект, подчиняющийся протоколу может быть передан в параметре `completionHandler` метода [`autcomplete(text:completionHandler)`](#autocomplete) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

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

Метод вызывается при успешной отправки подсказки методом [`autcomplete(text:completionHandler)`](#autocomplete) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

### Метод `onFailure(error:)`

Вызывается при неудачной отправке подсказки методом [`autcomplete(text:completionHandler)`](#autocomplete) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

Параметр `error` — ошибка, воспрепятствовавшая успешной отправке подсказки. Тип — [`AutocompleteError`](#autocomplete-error).

---

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

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

Эндпоинт API для подсказок посетителю не задан или задан некорректно.

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

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

---

## Протокол `SurveyListener` { #survey-listener }

Объект, реализующий протокол, может быть передан в параметре `surveyListener` метода [`set(surveyListener:)`](#message-stream-set-survey-listener) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

### Метод `on(survey:)` { #survey-listener-on-survey }

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

Параметр `survey` — объект опроса. Тип — [`Survey`](#survey).

### Метод `on(nextQuestion:)` { #survey-listener-on-next-question-survey-question }

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

Параметр `nextQuestion` — первый/следующий вопрос. Тип — [`SurveyQuestion`](#survey-question).

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

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

---

## Протокол `SendSurveyAnswerCompletionHandler` { #send-survey-answer-completion-handler }

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

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

Вызывается при успешном результате вызова метода [`send(surveyAnswer:completionHandler:)`](#message-stream-send-survey-answer-completion-handler) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

### Метод `onFailure(error:)`

Вызывается при неуспешном результате вызова метода [`send(surveyAnswer:completionHandler:)`](#message-stream-send-survey-answer-completion-handler) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

Параметр `error` — ошибка, воспрепятствовавшая успешному вызову метода. Тип — [`SendSurveyAnswerError`](#send-survey-answer-error).

---

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

Возможные ошибки, которые могут быть переданы в параметр `error` при вызове метода `SendSurveyAnswerCompletionHandler.onFailure(error:)`.

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

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

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

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

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

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

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

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

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

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

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

Вопрос не найден.

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

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

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

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

---

## Протокол `SurveyCloseCompletionHandler` { #survey-close-completion-handler }

Объект, реализующий данный протокол, может быть передан в параметр `completionHandler` метода [`closeSurvey(completionHandler:)`](#message-stream-close-survey-completion-handler) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

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

Вызывается при успешном результате вызова метода [`closeSurvey(completionHandler:)`](#message-stream-close-survey-completion-handler) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

### Метод `onFailure(error:)` { #survey-close-completion-handler-on-failure-error }

Вызывается при неуспешном результате вызова метода [`closeSurvey(completionHandler:)`](#message-stream-close-survey-completion-handler) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

Параметр `error` — ошибка, воспрепятствовавшая успешному вызову метода. Тип — [`SurveyCloseError`](#survey-close-error).

---

## Перечисляемый тип `SurveyCloseError` { #survey-close-error }

Возможные ошибки, которые могут быть переданы в параметр `error` при вызове метода [`SurveyCloseCompletionHandler.onFailure(error:)`](#survey-close-completion-handler-on-failure-error).

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

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

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

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

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

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

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

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

---

## Протокол `GeolocationCompletionHandler` { #geolocation-completion-handler }

Объект, реализующий данный протокол, может быть передан в параметр `completionHandler` метода [`sendGeolocation`](#sendgeolocation) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).


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

Вызывается при успешном результате вызова метода [`sendGeolocation`](#sendgeolocation) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).


### Метод `onFailure(error:)` { #geolocation-completion-handler-on-failure }

Вызывается при неуспешном результате вызова метода [`sendGeolocation`](#sendgeolocation) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

Параметр `error` - ошибка, воспрепятствовавшая успешному вызову метода. Тип – [`GeolocationError`](#geolocation-error).

---

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

Возможные ошибки, которые могут быть переданы в параметр `error` при вызове метода [`GeolocationCompletionHandler.onFailure(error:)`](#geolocation-completion-handler-on-failure).


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

Неверная данные геолокации.


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

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

---

## Протокол `HelloMessageListener` { #hello-message-listener }

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

### Метод `helloMessage(message:)`

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

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

---

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

Доступные виды реакций.

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

Оценка "Нравится".

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

Оценка "Не нравится".

---

## Протокол `ReactionCompletionHandler` { #reaction-completion-handler }

Объект, подчиняющийся протоколу, может быть передан в параметре `completionHandler` метода [`react(message:reaction:completionHandler:)`](#message-stream-react) протокола `MessageStream`.

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

Метод вызывается при успешном запросе методом [`react(message:reaction:completionHandler:)`](#message-stream-react) протокола `MessageStream`.

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

### Метод `onFailure(error:)` { #reaction-completion-handler-onfailure }

Вызывается при неудачном запросе метода [`react(message:reaction:completionHandler:)`](#message-stream-react).

Параметр `error` — ошибка, воспрепятствовавшая успешному вызову метода. Тип — `ReactionError`.

---

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

Возможные ошибки, которые могут быть переданы в параметр метода [`onFailure(error:)`](#reaction-completion-handler-onfailure) протокола `ReactionCompletionHandler`.

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

На сервере отключены реакции.

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

Пользователь может оставлять реакции только на сообщения оператора.

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

Сообщение не найдено.

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

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

---

## Перечисляемый тип `DataMessageError` { #data-message-error }

Возможные ошибки, которые могут быть переданы в параметр `error` метода [`onFailure(messageID:error:)`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#on-failure-message-id-error-data-message-completion-handler).

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

Полученный код ошибки не поддерживается данной версией `WebimClientLibrary`.

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

Процитированное сообщение не отмечено флагом `canBeReplied` или флаг не стоит в значении `true`.

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

Отправленный ID сообщения соответствует другому посетителю.

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

Отправленный ID сообщения соответствует нескольким сообщениям (скорее всего, имеет место ошибка в базе данных).

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

Означает, что один или более аргумент реализованной на сервере системы цитирования не был отправлен.

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

Был отправлен неверный ID процитированного сообщения.

---

## Протокол `Survey`

Содержит методы, с помощью которых можно получить информацию об опросе.

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

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

Возвращает значение типа [`SurveyConfig`](#survey-config).

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

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

Возвращает значение типа `String`.

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

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

Возвращает значение типа [`SurveyCurrentQuestionInfo`](#survey-current-question-info).

---

## Протокол `SurveyConfig` { #survey-config }

Содержит методы, с помощью которых можно получить информацию об опросе.

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

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

Возвращает значение типа `Int`.

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

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

Возвращает значение типа [`SurveyDescriptor`](#survey-descriptor).

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

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

Возвращает значение типа `String`.

---

## Протокол `SurveyCurrentQuestionInfo` { #survey-current-question-info }

Содержит методы, с помощью которых можно получить информацию об опросе.

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

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

Возвращает значение типа `Int`.

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

С помощью этого метода можно получить индекс текущего вопроса в списке вопросов начиная с 0, возвращаемых методом `getQuestions()`.

Возвращает значение типа `Int`.

---

## Протокол `SurveyDescriptor` { #survey-descriptor }

Содержит методы, с помощью которых можно получить информацию об опросе.

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

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

Возвращает значение типа [`SurveyForm`](#survey-form).

---

## Протокол `SurveyForm` { #survey-form }

Содержит методы, с помощью которых можно получить информацию об опросе.

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

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

Возвращает значение типа `Int`.

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

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

Возвращает значение типа [`SurveyQuestion`](#survey-question).

---

## Протокол `SurveyQuestion` { #survey-question }

Содержит методы, с помощью которых можно получить информацию об опросе.

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

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

Возвращает значение типа [`SurveyType`](#survey-type).

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

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

Возвращает значение типа `String`.

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

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

Возвращает опциональное значение типа `[String]`.

---

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

Типы, которые можно получить в результате вызова метода [`getType()`](#survey-question-get-type) у объекта типа [`SurveyQuestion`](#survey-question).

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

Вопрос, в котором ответ — это оценка.

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

Вопрос, в котором ответ — это вариант из списка возможных вариантов.

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

Вопрос, в котором ответ — это комментарий пользователя.

---

## Протокол `UploadFileToServerCompletionHandler` { #upload-file-to-server-completion-handler }

Объект, подчиняющийся протоколу, может быть передан в параметре `completionHandler` метода [`uploadFilesToServer(file:filename:mimeType:completionHandler:)`](#upload-files-to-server-file-filename-mime-type-completion-handler) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

### Метод `onSuccess(id:uploadedFile:)`

Метод вызывается при успешной загрузке файла методом [`uploadFilesToServer(file:filename:mimeType:completionHandler:)`](#upload-files-to-server-file-filename-mime-type-completion-handler) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

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

Параметр `uploadedFile` — загруженный на сервер файл. Тип — [`UploadedFile`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#uploaded-file).

### Метод `onFailure(messageID:error:)`

Вызывается при неудачной загрузке файла методом [`uploadFilesToServer(file:filename:mimeType:completionHandler:)`](#upload-files-to-server-file-filename-mime-type-completion-handler) протокола [`MessageStream`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message-stream).

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

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

---

## Протокол `KeyboardButton`

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

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

Возвращает объект [`Params`](#params) или `nil` при отсутствии дополнительной информации.

---

## Протокол `Params` { #params }

Содержит информацию о кнопке клавиатуры чат-бота.

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

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

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

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

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

Возвращает тип кнопки. Тип — опциональный [`ParamsButtonType`](#params-button-type).

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

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

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

---

## Перечисляемый тип `ParamsButtonType` { #params-button-type }

Возможные типы кнопки клавиатуры чат-бота, возвращаемые методом `Params.getType()`.

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

Кнопка - ссылка.

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

Кнопка - действие.

---

## Протокол `SearchMessagesCompletionHandler` { #search-messages-completion-handler }

Коллбэк, который получает результат поиска по истории сообщений, инициированного
методом `searchStreamMessagesBy(query:completionHandler:)`.

| Метод                  | Описание                                                                              |
|------------------------|---------------------------------------------------------------------------------------|
| `onSuccess(messages:)` | `messages` — массив объектов [`Message`](https://webim.ru/kb/mobile/sdk/v-3-0/ios-sdk-handbook.html#message) с совпадениями. |
| `onFailure(error:)`    | `error` — значение перечисления [`SearchMessagesError`](#search-messages-error).      |

### Перечисляемый тип `SearchMessagesError` { #search-messages-error }

| Случай          | Когда возникает                      |
|-----------------|--------------------------------------|
| `noChat`        | В чате ещё нет истории для поиска.   |
| `queryTooShort` | Строка запроса короче двух символов. |
| `unknown`       | Любая другая нераспознанная ошибка.  |

---

## Протокол `Group` { #group }

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

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

Метод, с помощью которого может быть получен ID группы.

Возвращает `String`.

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

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

Возвращает `Int`.

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

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

Возвращает `Int`.

---

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