> For the complete documentation index, see [llms.txt](https://help.novatalks.com.ua/ua/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/ua/get-started/settings/chatbots/chatbot-script-logging.md).

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

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

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

Щоб здійснити логування, потрібно додати цю ноду в схему (після дії, яку треба залогувати) та заповнити її властивості (Properties).

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

## Налаштування ноди `Log Bot/IVR Event` <a href="#node-configuration" id="node-configuration"></a>

Відповідно до інтерфейсу властивостей ноди (Edit subflow instance), для коректного логування необхідно налаштувати наступні властивості (Properties):

* **Name** — назва ноди на схемі (наприклад, *Log Back*, *Log To Submenu*).
* **Event** — подія, що відбулася (Події, що підлягають логуванню, див. п. [1. Event](#id-1.-event)).&#x20;
* **Source** — джерело та розділ, звідки подія зафіксована (Джерела, що підлягають логуванню, див. п. [2. Source](#id-2.-source)).&#x20;
* **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/1I9IanKeXlV3GxCSei0P" alt=""><figcaption></figcaption></figure>

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

## Опис можливих значень Properties, що підлягають логуванню

### 1. Event&#x20;

Події, що підлягають логуванню:

<table><thead><tr><th width="146.5">event</th><th>Опис</th></tr></thead><tbody><tr><td>button_click</td><td>Вибір клієнтом однієї з попередньо визначених опцій пункту меню вибору мови, меню самообслуговування, оцінки CSAT</td></tr><tr><td>text_input</td><td>Користувач вводить текстове повідомлення в чат-боті у відповідь на відкрите запитання (без кнопок)</td></tr><tr><td>system_event</td><td>Подія, ініційована системою (наприклад, таймаут неактивності клієнта, агента або бота)</td></tr><tr><td>api_request</td><td>Виклик веб-сервісу в рамках сценарію чат-боту для отримання даних клієнта або виконання операції</td></tr><tr><td>announce</td><td>Відправка повідомлення клієнту</td></tr></tbody></table>

### 2. Source

Джерела, що підлягають логуванню:

<table><thead><tr><th width="190.25">source</th><th>Опис</th></tr></thead><tbody><tr><td>chatbot_language</td><td>Чат-бот: етап вибору мови</td></tr><tr><td>chatbot_menu</td><td>Чат-бот: етап проходження меню</td></tr><tr><td>chatbot_csat</td><td>Чат-бот: етап CSAT</td></tr><tr><td>agent</td><td>Подія на етапі знаходження діалога на агенті</td></tr></tbody></table>

### 3. Task

Задачі, що підлягають логуванню:

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

### 4.  Деталізація дій (task).&#x20;

#### 4.1. status

Статус виконання сервісу. Фіксується тільки для подій з task:self\_serve.&#x20;

Статуси, що підлягають логуванню:

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

#### 4.2. exit\_reason&#x20;

Причина виходу користувача з бота. Фіксується тільки для подій з task:transfer або task:resolve.

Причини, що підлягають логуванню:&#x20;

<table><thead><tr><th width="374">exit_reason</th><th>Опис</th></tr></thead><tbody><tr><td>transfer_button</td><td>Обраний пункт меню з дією трансфер</td></tr><tr><td>end_button</td><td>Обраний пункт меню з дією завершення діалогу</td></tr><tr><td>client_timeout</td><td>Завершення діалогу по неактивності клієнта</td></tr><tr><td>agent_bot_timeout</td><td>Завершення діалогу по неактивності агента/бота</td></tr><tr><td>not_working_time</td><td>Завершення діалогу через неробочий час</td></tr><tr><td>csat </td><td>Завершення діалогу після проходження csat</td></tr><tr><td>Будь-яка кастомна причина завершення, що була вказана при логуванні</td><td></td></tr></tbody></table>

***

### Приклади можливих сценаріїв логування подій&#x20;

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

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

**Приклад логування:**

<table><thead><tr><th width="53.05078125">№</th><th width="169.25">event</th><th width="164.25">source</th><th>name</th><th width="143">parent_name</th><th>task</th><th>status</th><th width="170.5">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="64.48828125">№</th><th width="166.75">event</th><th width="175.5">source</th><th width="128">name</th><th width="140.5">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="63.13671875">№</th><th width="153">event</th><th width="169.25">source</th><th>name</th><th width="145.5">parent_name</th><th>task</th><th>status</th><th width="139.25">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="66.63671875">№</th><th width="153">event</th><th width="166.75">source</th><th>name</th><th width="144.25">parent_name</th><th>task</th><th width="100.5">status</th><th width="191.75">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. Користувачу відображається підфлоу меню Карти – Відкрити, і він обирає пункт Дебетову. Система перевіряє робочий графік і виявляє, що час поза робочими годинами. Система завершує діалог&#x20;

**Приклад логування:**

<table><thead><tr><th width="60.8984375">№</th><th width="161.75">event</th><th width="178">source</th><th>name</th><th width="145.5">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>not_working_time</td></tr></tbody></table>

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

> Опис флоу:
>
> 1. Для користувача відображається меню вибору мови, і він обирає пункт Українська.
> 2. Користувачу відображається Головне меню, і він обирає пункт Карти.
> 3. Користувачу відображається підфлоу меню Карти, і він обирає пункт Баланс карти. Система ініціює сценарій самообслуговування (task=selfServe, status=initiated).
> 4. Користувачу відображається повідомлення “Введіть номер вашої картки”, і він вводить значення вручну.
> 5. Система здійснює виклик зовнішнього веб-сервісу для отримання даних про баланс .
> 6. Після отримання відповіді користувачу відображається анонс із балансом картки та фіксується, що сервіс виконано успішно.
> 7. Користувачу задається запитання “Чи має він ще запитання”, і він обирає пункт Ні. Система завершує діалог

**Приклад логування:**

<table><thead><tr><th width="67.55859375">№</th><th width="155.5">event</th><th width="169.25">source</th><th width="169.25">name</th><th width="153">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>
