# История диалогов

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

Тексты диалогов, состоявшихся у оператора ранее, можно посмотреть на странице **История**, перейдя на неё из меню Панели управления:

![Переход к истории диалогов через меню](https://webim.ru/kb/img/for-admins/view-dialog-history/chats_history_menu.webp "переход к истории диалогов"){ style="width: 325px; max-width: 100%" }

Откроется страница истории диалогов.

![Страница истории диалогов](https://webim.ru/kb/img/agent-gui/view-dialog-history/chats-history.webp "страница истории"){ style="width: 1440px; max-width: 100%" }

## Столбцы таблицы

В таблице истории диалогов отображаются следующие поля:

| Поле                       | Описание                                                                                                                               |
|----------------------------|----------------------------------------------------------------------------------------------------------------------------------------|
| **№**                      | Внутренний идентификатор обращения                                                                                                     |
| **Имя**                    | Имя посетителя (или «Посетитель», если имя не задано)                                                                                  |
| **ID посетителя**          | Идентификатор посетителя из внутренней системы идентификации, используемой клиентом ([`provided_visitor_id`](https://webim.ru/kb/dev/identification/visitor-ids.html#provided_visitor_id)) |
| **Email посетителя**       | Адрес электронной почты посетителя, если был указан                                                                                    |
| **Телефон**                | Номер телефона посетителя, если был указан                                                                                             |
| **Адрес посетителя**       | IP-адрес, с которого начат диалог                                                                                                      |
| **Оператор**               | Оператор, который последним писал или совершил действие в диалоге                                                                      |
| **Сообщений посетителя**   | Количество сообщений, отправленных посетителем в рамках обращения                                                                      |
| **Категории**              | Список категорий, назначенных диалогу. Если их несколько, они выводятся через запятую                                                  |
| **Отделы**                 | Отдел, в который было направлено обращение                                                                                             |
| **Начат**                  | Дата и время начала диалога                                                                                                            |
| **Длительность обращения** | Общая продолжительность обращения от создания до закрытия                                                                              |
| **Действие**               | Возможность начать новый чат с посетителем (кнопка **Начать чат**). Подробнее см. [Функция «Начать чат»](https://webim.ru/kb/for-admins/start-chat-features.html)       |

!!! Note "N.B."
    Если [`provided_visitor_id`](https://webim.ru/kb/dev/identification/visitor-ids.html#provided_visitor_id) не передан, в колонке **ID посетителя** отображается идентификатор посетителя в канале ([`channel_user_id`](https://webim.ru/kb/dev/identification/visitor-ids.html#channel_user_id)). Если не переданы ни тот, ни другой, колонка пустая. `visitor_id` из системы **Webim** в этой колонке не отображается.

На этой странице отображается список всех диалогов, доступных для просмотра этим оператором, прежде всего между ним самим и посетителями, которых он(а) обслужил(а).

История диалогов может работать в двух режимах:

  * Стандартный режим - поиск по истории диалогов работает через аналитическую СУБД (**MySQL**, **PostgreSQL**), при большом количестве диалогов процесс может занять продолжительное время.

  * Режим интеграции **Webim** с поисковым кластером (**Elasticsearch** или **OpenSearch**, начиная с **Webim Server 10.8+**) — поиск по истории диалогов идёт через [ту же интеграцию](https://webim.ru/kb/devops/connect-elasticsearch.html), что ускоряет поиск при большом числе диалогов. Передача диалогов в кластер выполняется компонентом `data-storager`.

Чтобы быстро найти нужные диалоги, введите в строке поиска имя посетителя, его ID или фрагмент текста сообщения. Поиск по имени и по тексту сообщения не зависит от регистра букв: запросы «Иван» и «иван» найдут одни и те же диалоги. По ID находятся диалоги при точном совпадении с [`visitor_id`](https://webim.ru/kb/dev/identification/visitor-ids.html#visitor_id) из системы **Webim** или с [`provided_visitor_id`](https://webim.ru/kb/dev/identification/visitor-ids.html#provided_visitor_id). Поиск по [`channel_user_id`](https://webim.ru/kb/dev/identification/visitor-ids.html#channel_user_id) не поддерживается.

Чтобы перейти к расширенному поиску, нажмите **Все фильтры**. Откроется вложенная вкладка:

![Фильтры](https://webim.ru/kb/img/for-admins/view-dialog-history/filters-history.webp "фильтры"){ style="width: 1334px; max-width: 100%" }

В качестве дополнительных фильтров можно настроить следующие параметры:

  * **Операторы**: можно выбрать одного или несколько операторов, чьи диалоги необходимо найти;

  * **Оценка**: можно выбрать чаты, в которых посетитель поставил оператору определённую оценку;

  * **Отделы**: позволит показать чаты, обращения в которых были направлены в определённые отделы;

  * **Язык диалога**: отображение чатов на конкретном языке;

  * **Категория**: отображение чатов, которым была задана одна из выбранных категорий;

  * **Показывать диалоги**: позволит отобразить диалоги, которые попали в одну из следующих групп:

    * **Онлайн**: онлайн-обращения;

    * **Офлайн**: офлайн-обращения (обращение считается офлайн, если все операторы в отделе для обращения были в статусе Офлайн);

    * **Пропущенные**: обращение считается пропущенным, если посетитель ушёл до того, как ему начали набирать ответ, и не вернулся до того, как закрыли диалог;

    * **Отказы**: обращение, в котором посетитель написал, когда операторы были онлайн, и находился онлайн в течение этого тайм-аута, но не получил за это время ответа;

    * **Отклонённые приглашения**;

    * **В обработке**.

  * **Минимум сообщений**: показывает диалоги, в которых количество сообщений – не меньше указанного;

  * **ID посетителя**: отображает все чаты посетителя с указанным [`provided_visitor_id`](https://webim.ru/kb/dev/identification/visitor-ids.html#provided_visitor_id).

!!! Note "N.B."
    Несколько фильтров применяются по принципу логического **И**, т.е. при выборе любых нескольких фильтров в результатах поиска будут отображены только те диалоги, которые соответствуют значениям всех заданных фильтров.

Также в таблице с историей в крайней правой колонке есть кнопка **Начать чат**. Это позволит Вам начать новый чат с данным посетителем. В **РМО** он отобразится в отделе **Приглашённые**. Если посетитель не онлайн, у чата будет пометка «офлайн». Подробнее см. [Функция «Начать чат»](https://webim.ru/kb/for-admins/start-chat-features.html).

## Скачивание данных пользователей

Чтобы выгрузить список всех посетителей, которые обращались к Вам за всё время, нажмите кнопку Скачать данные всех посетителей. Начнётся загрузка csv-файла. В нём будет содержаться информация о всех посетителях, когда-либо обращавшихся к Вам за консультацией, с указанием их идентификаторов, имени, даты и времени обращения.

![Пример фрагмента списка посетителей](https://webim.ru/kb/img/for-admins/view-dialog-history/visitors-info-from-history.webp "фрагмент списка посетителей"){ style="width: 544px; max-width: 100%" }

## Выгрузка истории диалогов

Чтобы загрузить список диалогов на локальный диск, нажмите кнопку **Сохранить как...** и в выпадающем окне выберите нужный формат. Сервис сформирует файл и предложит сохранить его на диске. Выберите имя и директорию для сохранения. Откройте файл в любом текстовом редакторе.

![Пример фрагмента истории диалогов в формате .TXT](https://webim.ru/kb/img/for-admins/view-dialog-history/2022-04-06_16-35.webp "фрагмент истории диалогов txt"){ style="width: 686px; max-width: 100%" }

Чтобы загрузить список диалогов на локальный диск в формате Microsoft Excel, нажмите **Сохранить как XLSX с диалогами**.

Функция доступна при включённой тарифной опции `thread_search_leads_excel_export`. Для её активации обратитесь к вашему менеджеру.

Сервис сформирует файл и предложит сохранить его на диске. Выберите имя и директорию для сохранения. Откройте файл в программе Microsoft Excel. Обратите внимание, что выгрузить можно не более 5000 диалогов.

![Пример фрагмента истории диалогов в виде таблицы Excel](https://webim.ru/kb/img/for-admins/view-dialog-history/history-excel.webp "фрагмент истории диалогов excel"){ style="width: 1071px; max-width: 100%" }

# Поиск по тексту {: #history-search }

Далее описаны правила того, как работает строка поиска и фильтр «Текст сообщения» в разделе История диалогов. В интерфейсе могут применяться два разных механизма:

  * Поиск через кластер **Elasticsearch** или **OpenSearch** — полнотекстовый, токенизирующий запрос (в коде и настройках по-прежнему часто фигурирует имя Elasticsearch).

  * Поиск по SQL — поиск подстроки в тексте сообщений, без учёта регистра.

## Отличия видов поиска {: #differences }

| Характеристика                        | Elasticsearch / OpenSearch                                                                                  | SQL                                                                           |
| ------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| Обработка фразы с несколькими словами | Слова анализируются отдельно; по умолчанию — логическое И; порядок слов не важен (кроме запроса в кавычках) | Ищется точная подстрока; порядок и пробелы важны                              |
| Кавычки `"…"`                         | Поиск строгой последовательности слов                                                                       | Не имеют специального смысла, учитываются как обычные символы                 |
| Регистрозависимость                   | Регистр не учитывается                                                                                      | Регистр не учитывается                                                        |
| Маски                                 | Поддерживается только суффиксная `*` у одного слова                                                         | Маски не используются; поиск по части слова возможен обычным вводом фрагмента |
| Ошибки в синтаксисе                   | Невалидные части запроса игнорируются, поиск выполняется по валидным фрагментам                             | Синтаксического парсинга нет; ищется введённая подстрока                      |
| Производительность и актуальность     | Быстрая индексация, «почти в реальном времени»                                                              | Скорость зависит от объёма и периода; при длинных интервалах медленнее        |

## Поля, по которым выполняется поиск {: #fields }

Свободная строка поиска и фильтр «Текст сообщения» применяются к текстам сообщений диалога (сообщения посетителя и оператора). Структурные фильтры (период, канал, оператор, отдел, категория и т. п.) сужают выборку диалогов и не меняют правила разбора текстового запроса.

!!! Note "N.B."
    Внутренние системные события отображаются в истории, но в текстовом поиске учитываются только текстовые тела сообщений.

## Поиск через Elasticsearch или OpenSearch {: #elastic }

Поддерживаются следующие операторы в строке поиска:

  * `+` — логическое И между словами

  * `|` — логическое ИЛИ

  * `"…"` — точная фраза (строгое совпадение порядка и соседства слов)

  * `*` — только в конце одного слова для поиска по префиксу

!!! Note "N.B." 
    Любые символы внутри кавычек трактуются как обычные символы. Другие расширенные операторы (например, `-`, `~`, скобки) в интерфейсе истории не используются.

### Особенности

  * Порядок слов вне кавычек не важен. Запрос из нескольких слов трактуется как логическое И между токенами.

  * Регистр не учитывается.

  * Если запрос сформулирован с ошибкой (например, не закрыты кавычки), невалидные части игнорируются и поиск всё равно выполняется по валидным фрагментам.

  * Маска `*` работает только как суффикс одного слова: `эластик*`. Конструкции вида `поиска в эластик*` не возвращают результатов.

  * Символ `?` в текстовом поле не поддерживается и воспринимается как обычный символ.

### Примеры (режим поискового кластера)

Пусть в сообщениях есть фрагмент: `фраза для поиска в эластике`.

| Ввод                  | Результат                                                            |                                                            
| --------------------- | -------------------------------------------------------------------- |
| `фраза`               | Диалоги, где встречается слово «фраза»                               |                                                            
| `фраза для`           | Диалоги, где встречаются оба слова «фраза» и «для», порядок не важен |                                                            
| `"фраза для"`         | Диалоги с точной последовательностью «фраза для»                     |                                                            
| `"фраза для" | поиска`| Диалоги с точной фразой «фраза для» или со словом «поиска»           |
| `эластик*`            | Диалоги со словами, начинающимися на «эластик…»                      |                                                            
| `поиска в эластик*`   | Результатов нет (маска работает только для одного слова)             |                                                            
| `"фраза для`          | Работает как `фраза для` (первая кавычка будет проигнорирована)      |                                                            

## Поиск через SQL {: #sql }

Ищется подстрока в тексте сообщений, без учёта регистра букв. Так работает и **MySQL**, и **PostgreSQL**. То же относится к имени посетителя и имени оператора в строке поиска. Специальный синтаксис в строке не используется.

### Особенности

  * Регистр букв не учитывается: `Фраза` и `фраза` дают одинаковый результат.

  * Несколько слов, разделённых пробелами, трактуются как единая подстрока: порядок и наличие пробелов важны.

  * Кавычки, `*`, `?` и другие символы не имеют специального смысла и воспринимаются как обычные символы.

  * Для поиска по части слова достаточно ввести фрагмент слова; он будет найден как подстрока.

### Примеры (SQL)

Те же исходные данные: `фраза для поиска в эластике`.

| Ввод          | Результат                                                      |
| ------------- | -------------------------------------------------------------- |
| `фраза`       | Диалоги, где встречается подстрока «фраза»                     |
| `ФРАЗА`       | То же, что и `фраза`: регистр не важен                         |
| `фраза для`   | Диалоги, где встречается ровно «фраза␠для» (в этом порядке)    |
| `"фраза для"` | То же, что и выше: кавычки не влияют                           |
| `эластик*`    | Диалоги с подстрокой «эластик*» (звёздочка не является маской) |
| `ласт`        | Диалоги, где встречается «ласт» как часть слова                |

## Влияние фильтров {: #filters }

Период ограничивает набор диалогов, в пределах которого выполняется текстовый поиск.

Канал, отдел, оператор, категория и другие параметры сужают выборку диалогов. Логика разбора текстового запроса при этом не меняется.

## Ограничения {: #gotchas }

  * В режиме **Elasticsearch** / **OpenSearch** не поддерживается комбинация маски `*` и нескольких слов. Если нужен поиск по нескольким словам и одному префиксу, используйте последовательные запросы или уточняйте фразу.

  * В SQL при длинных интервалах время отклика может увеличиваться, так как поиск подстроки линейно зависит от объёма текста.

  * Для строгого совпадения слов рядом и в заданном порядке используйте кавычки в режиме поискового кластера. В SQL того же эффекта можно добиться, введя фразу целиком, включая пробелы в нужном месте.

## Выбор режима поиска {: #mode }

Переключение режима выполняется параметром `elasticsearch_history`.

  * `true` — строка поиска и фильтр «Текст сообщения» работают через кластер **Elasticsearch** или **OpenSearch** (`simple_query_string`).

  * `false` — используется SQL: поиск подстроки по телу сообщений, без учёта регистра (и в **MySQL**, и в **PostgreSQL**).

Подключение к кластеру настраивается по инструкции «[Подключение Elasticsearch или OpenSearch](https://webim.ru/kb/devops/connect-elasticsearch.html)».

### Где включить?

  * Через редактор настроек аккаунта ([account config](https://webim.ru/kb/for-admins/service-pages/account-config-editor.html)): найдите параметр `elasticsearch_history` и установите нужное значение.

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

!!! Note "N.B."
    Если у вас нет доступа к account config, пожалуйста, обратитесь к вашему аккаунт-менеджеру.

### Как проверить режим

  * В логах запросов видны обращения либо к API поискового кластера, либо SQL с `ILIKE` по телу сообщений.

  * В интерфейсе начинают работать `|` и суффиксная маска `*` только в режиме **Elasticsearch** / **OpenSearch**.

## Связанные страницы {: #where-in-kb }

  * [Подключение Elasticsearch или OpenSearch](https://webim.ru/kb/devops/connect-elasticsearch.html) — установка и подключение поискового кластера

  * [Редактор настроек аккаунта](https://webim.ru/kb/for-admins/service-pages/account-config-editor.html) — как открыть и поменять параметры уровня аккаунта, включая `elasticsearch_history`

---

Источник: https://webim.ru/kb/for-admins/view-dialog-history.html
