> For the complete documentation index, see [llms.txt](https://help.novatalks.com.ua/ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.novatalks.com.ua/ru/get-started/settings/chatbots/chatbot-script-logging.md).

# Логирование сценария чат-бота

{% hint style="info" %}
Логирование сценария чат-бота не является базовым функционалом по умолчанию и настраивается индивидуально по запросу заказчика.
{% endhint %}

Логирование событий бота происходит в конструкторе сценариев BotFlow. Для реализации этой задачи используется специальная нода-подфлоу — Log Bot/IVR Event. Каждое событие фиксируется в момент его возникновения как отдельная запись в базе данных (таблица `[bot_ivr_events]`).

Чтобы выполнить логирование, необходимо добавить эту ноду в схему (после действия, которое нужно залогировать) и заполнить её свойства (Properties).

<figure><img src="/files/EZlg4SX7iZnyf9PbF1Q6" alt=""><figcaption></figcaption></figure>

## Настройка ноды `Log Bot/IVR Event`

В соответствии с интерфейсом свойств ноды (Edit subflow instance), для корректного логирования необходимо настроить следующие свойства (Properties):

* **Name** — название ноды на схеме (например, *Log Back, Log To Submenu*).
* **Event** — событие, которое произошло (события, подлежащие логированию, см. п. [1. Event](#id-1.-event)).
* **Source** — источник и раздел, из которого зафиксировано событие (источники, подлежащие логированию, см. п. [2. Source](#id-2.-source)).
* **Task** — действие, выполненное в результате срабатывания события (действия, подлежащие логированию, см. п. [3. Task](#id-3.-task)).
* **Name** — название произошедшего события. Может быть названием выбранной кнопки (если используется нода Answer Switch — фиксируется автоматически) или другим кастомным названием события, указанным при логировании.
* **Parent Name** — название предыдущего шага. Для source: chatbot\_menu каждое событие, кроме первого (вход в меню), содержит название шага, из которого пришёл клиент (name с предыдущего шага).

{% hint style="info" %}
Заполнение поля **Parent Name** происходит автоматически после ноды Answer Switch.
{% endhint %}

* **Status** — статус выполнения сервиса. Фиксируется только для событий с `task:self_serve` (статусы, подлежащие логированию, см. п.[ 4.1. status](#id-4.1.-status)).
* **Exit Reason** — причина выхода пользователя из бота. Фиксируется только для событий с `task:transfer` или `task:resolve` (причины, подлежащие логированию, см. п. [4.2. exit\_reason](#id-4.2.-exit_reason)).
* **Custom Data 1-5** — поля для передачи дополнительных кастомных данных (при необходимости).
* **logger** — включает или отключает вывод логов для анализа процесса логирования.

<figure><img src="/files/qKh0nf48dcHzwzFeTURL" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Оценка CSAT и системные таймауты логируются автоматически (их не нужно настраивать дополнительно).
{% endhint %}

### Описание возможных значений Properties, подлежащих логированию

#### 1. Event

События, подлежащие логированию:

<table><thead><tr><th width="134">event</th><th>описание</th></tr></thead><tbody><tr><td><strong>button_click</strong>  </td><td>выбор клиентом одной из заранее определённых опций пункта меню выбора языка, меню самообслуживания, оценки CSAT.</td></tr><tr><td><strong>text_input</strong>  </td><td>пользователь вводит текстовое сообщение в чат-боте в ответ на открытый вопрос (без кнопок).</td></tr><tr><td><strong>system_event</strong> </td><td>событие, инициированное системой (например, таймаут неактивности клиента, агента или бота).</td></tr><tr><td><strong>api_request</strong></td><td>вызов веб-сервиса в рамках сценария чат-бота для получения данных клиента или выполнения операции.</td></tr><tr><td><strong>announce</strong></td><td>отправка сообщения клиенту.</td></tr></tbody></table>

#### 2. Source

Источники, подлежащие логированию:

| source            | описание                                     |
| ----------------- | -------------------------------------------- |
| chatbot\_language | Чат-бот: этап выбора языка                   |
| chatbot\_menu     | Чат-бот: этап прохождения меню               |
| chatbot\_csat     | Чат-бот: етап CSAT                           |
| agent             | Событие на этапе нахождения диалога у агента |

#### 3. Task

Задачи, подлежащие логированию:

| task        | описание                                      |
| ----------- | --------------------------------------------- |
| subflow     | Переход в меню или подменю                    |
| transfer    | Передача диалога с бота/IVR на агента/команду |
| resolve     | Завершення діалогу                            |
| self\_serve | Запуск сервиса самообслуживания               |

#### 4. Детализация действий (task).&#xD;

#### 4.1. status

Статус выполнения сервиса. Фиксируется только для событий с `task:self_serve`.\
Статусы, подлежащие логированию:

| status    | описание                                   |
| --------- | ------------------------------------------ |
| initiated | Запущен сценарий сервиса самообслуживания  |
| completed | Сервис самообслуживания успешно завершён   |
| failed    | Сервис самообслуживания завершён неуспешно |

#### 4.2. exit\_reason

Причина выхода пользователя из бота. Фиксируется только для событий с `task:transfer` или `task:resolve`.\
Причины, подлежащие логированию:

| exit\_reason                                                  | описание                                            |
| ------------------------------------------------------------- | --------------------------------------------------- |
| transfer\_button                                              | выбранный пункт меню с действием трансфера          |
| end\_button                                                   | выбранный пункт меню с действием завершения диалога |
| client\_timeout                                               | завершение диалога по неактивности клиента          |
| agent\_bot\_timeout                                           | завершение диалога по неактивности агента/бота      |
| not\_working\_time                                            | завершение диалога в нерабочее время                |
| csat                                                          | завершение диалога после прохождения CSAT           |
| Любая кастомная причина завершения, указанная при логировании | ​                                                   |

***

### Примеры возможных сценариев логирования событий:

1. Сценарий: выбор языка, навигация по меню, трансфер на агента и прохождение CSAT

> Описание флоу:
>
> 1. Пользователю отображается меню выбора языка, и он выбирает пункт **Украинский**.
> 2. Пользователю отображается **Главное меню**, и он выбирает пункт **Депозиты**.
> 3. Пользователю отображается подфлоу меню **Депозиты**, и он выбирает пункт **Назад**.
> 4. Пользователю снова отображается **Главное меню**, и он выбирает пункт **Кредиты**.
> 5. Пользователю отображается подфлоу меню **Кредиты**, и он выбирает пункт **Главное меню**.
> 6. Пользователю отображается **Главное меню**, и он выбирает пункт **Карты**.
> 7. Пользователю отображается подфлоу меню **Карты**, и он выбирает пункт **Открыть**.
> 8. Пользователю отображается подфлоу меню **Карты – Открыть**, и он выбирает пункт **Дебетовую**. Система выполняет действие трансфера на агента.
> 9. После завершения диалога агентом пользователю отображается оценка CSAT, и он выбирает пункт **Отлично 😄**.

Пример логирования:

<table><thead><tr><th width="40">№</th><th>event</th><th width="167">source</th><th>name</th><th>parent_name</th><th>task</th><th>status</th><th>exit_reason</th></tr></thead><tbody><tr><td>1</td><td>button_click</td><td>chatbot_language</td><td>Українська</td><td>NULL</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>2</td><td>button_click</td><td>chatbot_menu</td><td>Депозити</td><td>NULL</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>3</td><td>button_click</td><td>chatbot_menu</td><td>Назад</td><td>Депозити</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>4</td><td>button_click</td><td>chatbot_menu</td><td>Кредити</td><td>Назад</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>5</td><td>button_click</td><td>chatbot_menu</td><td>Головне меню</td><td>Кредити</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>6</td><td>button_click</td><td>chatbot_menu</td><td>Карти</td><td>Головне меню</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>7</td><td>button_click</td><td>chatbot_menu</td><td>Відкрити</td><td>Карти</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>8</td><td>button_click</td><td>chatbot_menu</td><td>Дебетову</td><td>Відкрити</td><td>transfer</td><td>NULL</td><td>transfer_button</td></tr><tr><td>9</td><td>button_click</td><td>chatbot_csat</td><td>Відмінно 😄</td><td>NULL</td><td>resolve</td><td>NULL</td><td>csat</td></tr></tbody></table>

2. Сценарій: Завершення діалогу - кнопка “Завершити”

> Описание флоу:
>
> 1. Пользователю отображается меню выбора языка, и он выбирает пункт **Украинский**.
> 2. Пользователю отображается **Главное меню**, и он выбирает пункт **Карты**.
> 3. Пользователю отображается подфлоу меню **Карты**, и он выбирает пункт **Открыть**.
> 4. Пользователю отображается подфлоу меню **Карты – Открыть**, и он выбирает пункт **Завершить**. Система завершает диалог.

Пример логирования:

<table><thead><tr><th width="58">№</th><th>event</th><th width="179">source</th><th>name</th><th>parent_name</th><th>task</th><th>status</th><th>exit_reason</th></tr></thead><tbody><tr><td>1</td><td>button_click</td><td>chatbot_language</td><td>Українська</td><td>NULL</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>2</td><td>button_click</td><td>chatbot_menu</td><td>Карти</td><td>NULL</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>3</td><td>button_click</td><td>chatbot_menu</td><td>Відкрити</td><td>Карти</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>4</td><td>button_click</td><td>chatbot_menu</td><td>Завершити</td><td>Відкрити</td><td>resolve</td><td>NULL</td><td>end_button</td></tr></tbody></table>

3. Сценарий: завершение диалога — завершение по таймауту неактивности клиента

> Описание флоу:
>
> 1. Пользователю отображается меню выбора языка, и он выбирает пункт **Украинский**.
> 2. Пользователю отображается **Главное меню**, и он выбирает пункт **Карты**.
> 3. Пользователю отображается подфлоу меню **Карты**, и он выбирает пункт **Открыть**.
> 4. Пользователю отображается подфлоу меню **Карты – Открыть**. Пользователь не совершает никаких действий в течение времени ожидания. Система автоматически завершает диалог.

Пример логирования:

<table><thead><tr><th width="47">№</th><th>event</th><th width="161">source</th><th>name</th><th width="146">parent_name</th><th>task</th><th>status</th><th width="174">exit_reason</th></tr></thead><tbody><tr><td>1</td><td>button_click</td><td>chatbot_language</td><td>Українська</td><td>NULL</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>2</td><td>button_click</td><td>chatbot_menu</td><td>Карти</td><td>NULL</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>3</td><td>button_click</td><td>chatbot_menu</td><td>Відкрити</td><td>Карти</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>4</td><td>system_event</td><td>chatbot_menu</td><td>NULL</td><td>NULL</td><td>resolve</td><td>NULL</td><td>client_timeout</td></tr></tbody></table>

4. Сценарий: Завершение диалога — завершение по таймауту неактивности агента

> Описание флоу:
>
> 1. Пользователю отображается меню выбора языка, и он выбирает пункт **Украинский**.
> 2. Пользователю отображается **Главное меню**, и он выбирает пункт **Карты**.
> 3. Пользователю отображается подфлоу меню **Карты**, и он выбирает пункт **Открыть**.
> 4. Пользователю отображается подфлоу меню **Карты – Открыть**, и он выбирает пункт **Дебетовую**. Система выполняет действие трансфера на агента.
> 5. В процессе общения агент не отвечает в течение установленного времени. Система автоматически завершает диалог.

<table><thead><tr><th width="41">№</th><th>event</th><th width="178">source</th><th>name</th><th width="146">parent_name</th><th>task</th><th>status</th><th width="201">exit_reason</th></tr></thead><tbody><tr><td>1</td><td>button_click</td><td>chatbot_language</td><td>Українська</td><td>NULL</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>2</td><td>button_click</td><td>chatbot_menu</td><td>Карти</td><td>NULL</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>3</td><td>button_click</td><td>chatbot_menu</td><td>Відкрити</td><td>Карти</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>4</td><td>button_click</td><td>chatbot_menu</td><td>Дебетову</td><td>Відкрити</td><td>transfer</td><td>NULL</td><td>transfer_button</td></tr><tr><td>5</td><td>system_event</td><td>agent</td><td>NULL</td><td>NULL</td><td>resolve</td><td>NULL</td><td>agent_bot_timeout</td></tr></tbody></table>

5. Сценарий: Завершение диалога — обращение в нерабочее время

> Описание флоу:
>
> 1. Пользователю отображается меню выбора языка, и он выбирает пункт **Украинский**.
> 2. Пользователю отображается **Главное меню**, и он выбирает пункт **Карты**.
> 3. Пользователю отображается подфлоу меню **Карты**, и он выбирает пункт **Открыть**.
> 4. Пользователю отображается подфлоу меню **Карты – Открыть**, и он выбирает пункт **Дебетовую**. Система проверяет рабочий график и определяет, что время вне рабочих часов. Система завершает диалог.

Пример логирования:

<table><thead><tr><th width="51">№</th><th>event</th><th width="160">source</th><th width="123">name</th><th width="141">parent_name</th><th>task</th><th>status</th><th width="189">exit_reason</th></tr></thead><tbody><tr><td>1</td><td>button_click</td><td>chatbot_language</td><td>Українська</td><td>NULL</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>2</td><td>button_click</td><td>chatbot_menu</td><td>Карти</td><td>NULL</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>3</td><td>button_click</td><td>chatbot_menu</td><td>Відкрити</td><td>Карти</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>4</td><td>button_click</td><td>chatbot_menu</td><td>Дебетову</td><td>Відкрити</td><td>resolve</td><td>NULL</td><td>not_working_time</td></tr></tbody></table>

6. Сценарий: Сервис самообслуживания с полем ввода текстовых данных, вызовом веб-сервиса и анонсированием информации

> Описание флоу:
>
> 1. Пользователю отображается меню выбора языка, и он выбирает пункт **Украинский**.
> 2. Пользователю отображается **Главное меню**, и он выбирает пункт **Карты**.
> 3. Пользователю отображается подфлоу меню **Карты**, и он выбирает пункт **Баланс карты**. Система инициирует сценарий самообслуживания (`task=selfServe`, `status=initiated`).
> 4. Пользователю отображается сообщение «Введите номер вашей карты», и он вводит значение вручную.
> 5. Система выполняет вызов внешнего веб-сервиса для получения данных о балансе.
> 6. После получения ответа пользователю отображается анонс с балансом карты, и фиксируется, что сервис выполнен успешно.
> 7. Пользователю задаётся вопрос «Есть ли ещё вопросы?», и он выбирает пункт **Нет**. Система завершает диалог.

Пример логирования:

<table data-header-hidden><thead><tr><th width="50">№</th><th>event</th><th>source</th><th>name</th><th width="145">parent_name</th><th>task</th><th>status</th><th>exit_reason</th></tr></thead><tbody><tr><td>1</td><td>button_click</td><td>chatbot_language</td><td>Українська</td><td>NULL</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>2</td><td>button_click</td><td>chatbot_menu</td><td>Карти</td><td>NULL</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>3</td><td>button_click</td><td>chatbot_menu</td><td>Баланс карти</td><td>Карти</td><td>selfServe</td><td>initiated</td><td>NULL</td></tr><tr><td>4</td><td>text_input</td><td>chatbot_menu</td><td>ask_card_number</td><td>Баланс карти</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>5</td><td>api_request</td><td>chatbot_menu</td><td>ws_clientdata</td><td>ask_card_number</td><td>subflow</td><td>NULL</td><td>NULL</td></tr><tr><td>6</td><td>announce</td><td>chatbot_menu</td><td>announce_card_balance</td><td>ws_clientdata_call</td><td>selfServe</td><td>completed</td><td>NULL</td></tr><tr><td>7</td><td>button_click</td><td>chatbot_menu</td><td>Ні</td><td>announce_card_balance</td><td>resolve</td><td>NULL</td><td>other_question_no</td></tr></tbody></table>
