# Угоди в CRM-системі

У CRM угоди відображаються як картки з інформацією про клієнта, назву угоди, опис і суму.

<div data-with-frame="true"><figure><img src="/files/2a7c16e38f1b0db6dfc033d0c14e5228bfb6034e" alt="" width="563"><figcaption></figcaption></figure></div>

За потреби можна додати й інші поля (див. рис. 8-12).

## Кнопка "Створити угоду"

<div data-with-frame="true"><figure><img src="/files/78f0edac7d17dd79c209fa024abac9fbc6a17e10" alt="" width="563"><figcaption></figcaption></figure></div>

Поле **Створити угоду** вікно дозволяє швидко налаштувати й зберегти нову угоду.

<div data-with-frame="true"><figure><img src="/files/40ce393e967257e27f3a71ee32d0fe59c973059b" alt="" width="563"><figcaption></figcaption></figure></div>

Заповніть форму, щоб створити клієнта. Якщо клієнт існує, MaviBot запропонує вибрати його з бази даних.

<div data-with-frame="true"><figure><img src="/files/834f7283d4e8b7c3388753646df5cf1e1bd293f3" alt="" width="563"><figcaption></figcaption></figure></div>

1. Якщо клієнта не знайдено, підключіть до проєкту бота WhatsApp або email.
2. Напишіть клієнту через підключений канал — це автоматично створить його профіль.
3. Виберіть етап воронки, на якому має бути розміщена угода.

<div data-with-frame="true"><figure><img src="/files/5c9f9c6eee110701bc682ea131989f6dde310f56" alt="" width="563"><figcaption></figcaption></figure></div>

Змінні угоди також можна додати в модальній формі:

<div data-with-frame="true"><figure><img src="/files/497d8ea954bbe3017053ca03576a4c56feeb9328" alt="" width="563"><figcaption></figcaption></figure></div>

Далі натисніть **«Create»** щоб додати угоду до системи.

## Кнопка "Додати швидко"

Ця кнопка також може допомогти вручну додати нового клієнта до CRM.

<div data-with-frame="true"><figure><img src="/files/f6f786c2f2e8c0c34646dc5735f4c58926cc75c8" alt="" width="308"><figcaption></figcaption></figure></div>

Натисніть кнопку, щоб відкрити вікно, де можна ввести дані клієнта.

<div data-with-frame="true"><figure><img src="/files/3d34309cd3102cf8bc2646060d25b82a39bc612d" alt="" width="308"><figcaption></figcaption></figure></div>

Рис. 26 Вікно швидкого створення угоди (Примітка: Усі дані вигадані; будь-яка схожість є випадковою.)

Отже, угода буде створена в **"Зацікавлений"** етапі.

{% hint style="success" %}
Готово!&#x20;

Тепер ви знаєте, як створювати угоди.
{% endhint %}

## Як створити угоду з чатбота

Приклад сценарію чатбота для створення угоди через функцію

Огляд процесу:

1. Створіть блок Start

<div data-with-frame="true"><figure><img src="/files/75f20d1c792ce5e92427eb765a3237622f08184e" alt=""><figcaption></figcaption></figure></div>

2. Створіть два блоки кнопок.

<div data-with-frame="true"><figure><img src="/files/c40f255f0a1795af9537ce005f3222103c834da3" alt=""><figcaption></figcaption></figure></div>

3. Перейдіть до налаштувань з'єднання, увімкніть опцію "Користувач вводить дані" та вкажіть назву сервісу, яку введе користувач.

<div data-with-frame="true"><figure><img src="/files/0fc8c162eb7795606d7c871ce1c164e8773a4cd6" alt=""><figcaption></figcaption></figure></div>

4. Потім додайте питання "Як вас звати?" у білому блоці. Створіть під ним новий блок і увімкніть **У налаштуваннях зв'язку увімкніть прапорець для** у його налаштуваннях стрілки.

<div data-with-frame="true"><figure><img src="/files/89279cffc2f45d3354846e3652d21ec40a70500a" alt=""><figcaption></figcaption></figure></div>

Налаштування "Користувач вводить дані" зі змінною `name` увімкнено в кожному з'єднанні, що веде до блоку "Введіть ваш номер телефону".

5. Тепер створіть два блоки — "Chat" і "Fallback" — з блоку "Введіть ваш номер телефону".

<div data-with-frame="true"><figure><img src="/files/5d4018912b7f95a42a399952643325ee85182b24" alt=""><figcaption></figcaption></figure></div>

1. Виберіть **"RegEx math"** тип у налаштуваннях з'єднання.
2. Увімкніть налаштування "Користувач вводить дані".
3. Введіть назву змінної: `phone`.

<div data-with-frame="true"><figure><img src="/files/6071b5fa500f9884fc83349d798fa0be503a0c28" alt=""><figcaption></figcaption></figure></div>

Тепер у блоці Fallback напишіть повідомлення: **"Це неправильно! Спробуйте ще раз."**

Ця конфігурація працюватиме так: якщо ваш клієнт введе неправильний номер телефону, він отримає повідомлення з блоку Fallback. Повідомлення Fallback буде надсилатися доти, доки клієнт не введе правильний номер телефону.

6. Потім запитайте клієнта про його бюджет і одразу створіть під ним новий блок.

<div data-with-frame="true"><figure><img src="/files/d963f13868a7209d1000018b09476158244e07ea" alt=""><figcaption></figcaption></figure></div>

7. Увімкніть перемикач **У налаштуваннях зв'язку увімкніть прапорець для** налаштування в з'єднанні та введіть назву змінної: `Призначте назву змінної (наприклад,`.

<div data-with-frame="true"><figure><img src="/files/5ac58e8b4ebb7ae2417eb3b5ab6006046ff339eb" alt=""><figcaption></figcaption></figure></div>

Активуйте **У налаштуваннях зв'язку увімкніть прапорець для** прапорець у з'єднанні та вкажіть телефонну змінну client\_name.

8. Ви можете або змінити тип останнього блоку на "Leads", або використати `create_order` функцію.

   Ось варіант із червоним блоком "Leads".

<div data-with-frame="true"><figure><img src="/files/613d1c17bbe1143f52ccd7e68322675fbb167c39" alt=""><figcaption></figcaption></figure></div>

Приклад.

<div data-with-frame="true"><figure><img src="/files/d30f0397866ab004151aa20beab7314dca9026b5" alt=""><figcaption></figcaption></figure></div>

Функція create\_order(name, budget, description, client\_name, phone, email, state\_id) використовується для створення угоди з чатбота в CRM.

<details>

<summary>Параметри</summary>

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

<table><thead><tr><th width="303.3046875">Параметри</th><th>Значення</th></tr></thead><tbody><tr><td><strong>name</strong></td><td><p>Назва угоди.</p><p>Необов'язковий параметр, якщо не передано, буде застосовано до поточної активної угоди клієнта</p></td></tr><tr><td><strong>Призначте назву змінної (наприклад,</strong></td><td>Вартість угоди (число). Необов'язковий параметр, якщо не передано, буде застосовано до поточної активної угоди клієнта. Якщо передати нечислове значення в <strong>Призначте назву змінної (наприклад,</strong> параметр, функція повертає відповідь: <strong>'budget must be a number'</strong></td></tr><tr><td><strong>description</strong> </td><td>Опис угоди. Необов'язковий параметр;</td></tr><tr><td><strong>client_name</strong></td><td>(необов'язковий параметр) рядок, ім'я нового клієнта</td></tr><tr><td><strong>phone</strong></td><td>(необов'язковий параметр) рядок, номер телефону нового клієнта</td></tr><tr><td><strong>email</strong></td><td>(необов'язковий параметр) рядок, email нового клієнта</td></tr><tr><td><strong>state_id</strong> </td><td>число дозволяє вказати стан, у якому буде угода після створення (необов'язковий параметр)</td></tr></tbody></table>

{% hint style="info" %}
Щоб створити клієнта, необхідно вказати змінну телефону або email. Якщо вказано телефон і в проєкті немає клієнта з таким телефоном, буде створено нового.

Якщо змінну email вказано без змінної телефону, і в проєкті немає клієнта з цією адресою, буде створено нового.
{% endhint %}

</details>

У сценарії ми зібрали такі дані на етапах:

* Name — назва угоди (у прикладі, I need a website і I need a landing);
* Budget — вартість угоди, яку було оголошено в блоках після того, як клієнт обрав тип сайту;
* Phone — номер телефону клієнта
* Client\_name — ім'я клієнта

Якщо вам потрібно створити угоду в певному стані транзакції, передайте параметр state\_id.

{% hint style="info" %}
Важливо!&#x20;

Якщо ви не передаєте жодних параметрів, тоді замість параметра передайте none (як на рис. 36, де замість параметра email вказано none).
{% endhint %}

Де знайти ID стану (параметр state\_id)

<div data-with-frame="true"><figure><img src="/files/56b46879795982f400eae0914e0a3385bb82b4a3" alt="" width="316"><figcaption></figcaption></figure></div>

ID етапу:

<div data-with-frame="true"><figure><img src="/files/d38b145b93fe41a236f0e7f164b64273da1fa148" alt="" width="375"><figcaption></figcaption></figure></div>

## Інші налаштування

Пошуковий рядок — це пошук угоди за ім'ям клієнта.

<div data-with-frame="true"><figure><img src="/files/57d4fda21298b447488b9938086b2980f313d3af" alt="" width="375"><figcaption></figcaption></figure></div>

Фільтр: дозволяє фільтрувати угоди за різними параметрами. Також ви можете зберегти створений фільтр, якщо часто ним користуєтеся.

<div data-with-frame="true"><figure><img src="/files/f80888497df43cbac726d7d660bf7e8c2af5b7b4" alt=""><figcaption></figcaption></figure></div>

## Як запустити бота, коли угода переходить на новий етап воронки

Щоб запустити бота під час зміни етапу угоди у воронці CRM:

1. Перейдіть до налаштувань проєкту.
2. Відкрийте **"Callbacks"** розділ.

<div data-with-frame="true"><figure><img src="/files/13230a151b1e3e3a71bf5a90e90962802df8bc15" alt=""><figcaption></figcaption></figure></div>

Натисніть **"Налаштування callback для переходу етапів CRM"**:

<div data-with-frame="true"><figure><img src="/files/3474a2c7d1ed8ddaaa2618627a8a3f680048f6fc" alt=""><figcaption></figcaption></figure></div>

Після цього ви побачите модальне вікно з усіма воронками в проєкті. Ви можете вибрати або всю воронку, або конкретний етап.

<div data-with-frame="true"><figure><img src="/files/852b0dc54df58bd0a53082d9a111a21a2f219dce" alt="" width="563"><figcaption></figcaption></figure></div>

Потім збережіть налаштування.&#x20;

Тепер, коли стан угоди змінюється — автоматично або вручну — з будь-якого місця на сайті генерується сповіщення, яке можна використати для запуску відповіді бота.

{% hint style="info" %}
Сповіщення має такий вигляд: **crm\_state\_changed Назва воронки:Назва етапу**
{% endhint %}

Змінна callback\_query\_id також з'явиться в картці клієнта, зберігаючи ідентифікатор угоди, для якої було надіслано сповіщення.

<div data-with-frame="true"><figure><img src="/files/6cb9a7e167475f487b2cff35b7486b256bae4b33" alt="" width="563"><figcaption></figcaption></figure></div>

Щоб запустити бота у відповідь на цю подію, введіть текст callback у поле тригера з'єднання або блоку на основі тригера (наприклад, блоків Start або Trigger).

<div data-with-frame="true"><figure><img src="/files/cffa27345f014aff2610c6f58febe0a16e37681f" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="info" %}
Якщо ви хочете залишити клієнта в основному сценарії чатбота, використовуйте блок "Chat". Цей блок не підтримує перехід до нього, тож після реакції на callback клієнт залишається в основній воронці, але все одно отримує повідомлення.

Якщо вам потрібно продовжити воронку після зміни стану, використовуйте блок "Start". Клієнта буде перенаправлено до блоку "Start" у відповідь на callback, що дозволить продовжити воронку звідти.
{% endhint %}

### Як перемістити угоду

Щоб перемістити угоду на будь-який етап воронки, просто клацніть і перетягніть її лівою кнопкою миші до потрібного етапу.

<div data-with-frame="true"><figure><img src="/files/c088943a50b17b86d111aa4f879cd2cc58f3a08e" alt="" width="563"><figcaption></figcaption></figure></div>

Коли угоду переміщено до **"Failed"** або **"Archived,"** з'являється модальне вікно з пропозицією вказати причину. Ця дія створює відповідну змінну угоди: `failed_reason` або `archived_reason`.

Вказана причина зберігається у відповідній змінній. Якщо угоду згодом відновлено, змінна `restored_from_failed` або `restored_from_archived` додається зі значенням `"true"`.

## Як заборонити переміщення угоди до вказаного етапу

Якщо вам потрібно обмежити етапи, на які угоди можна переміщати вручну, налаштуйте обмеження в параметрах стану.

Відкрийте воронку та перейдіть до налаштувань етапу.

<div data-with-frame="true"><figure><img src="/files/56b46879795982f400eae0914e0a3385bb82b4a3" alt="" width="316"><figcaption></figcaption></figure></div>

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

<div data-with-frame="true"><figure><img src="/files/f7eb0e878b9fb9652d4da70a705e3f600c5618f5" alt="" width="563"><figcaption></figcaption></figure></div>

Після збереження обмежені етапи будуть візуально виділені в MaviBot CRM. Вони стануть темнішими, а переміщення угод до них буде вимкнено. Якщо застосовано обмеження на переміщення етапів, ці етапи також будуть приховані в інтерфейсі чату клієнта.

## Реакція на видалення угоди в CRM

Коли угоду видаляють у CRM, бот отримує callback із назвою **`crm_lead_removed`** щоб повідомити клієнта.

<div data-with-frame="true"><figure><img src="/files/d7a43050aca830c7bb00eb6a08afb32fd518d2cc" alt="" width="465"><figcaption></figcaption></figure></div>

## Як перемикати угоди

Коли дії з угодами виконуються безпосередньо на сторінці CRM, спрацьовують такі callback-и:

* `change_responsible_order` — призначений менеджер угоди був змінений.
* `crm_state_changed` — угоду було переміщено до іншого етапу воронки.
* `crm_system_state_changed` — угоду було переміщено до **Lost**, **Won**, або **Archived**.
* `crm_lead_removed` — угоду було видалено.

Крім того, у змінних клієнта буде `callback_order_id`, яка містить ID конкретної угоди, на яку вплинула дія в CRM.

Під час обробки одного з цих callback-ів відповідна угода тимчасово стає активною в межах блоку обробки, що дає змогу отримати доступ до її змінних безпосередньо.

Щойно сценарій переходить до наступного блоку, стандартна логіка MaviBot відновлюється — будь-який подальший доступ до змінних угоди повертатиме значення з найостаннішої активної угоди клієнта.

### Як перемкнути угоду в активний стан у боті

Поле `switch_order(order_id)` функція дозволяє зробити конкретну угоду активною, щоб отримати доступ до її змінних.

* `order_id` — необов'язковий параметр для ID конкретної угоди. Якщо його не вказано, активною стає остання угода клієнта.
* Щоб активувати певну угоду, передайте її ID у `switch_order(order_id)` функцію.
* Якщо ви викличете цю функцію в блоці калькулятора та вкажете ID цільової угоди, ви зможете отримати доступ до змінних цієї угоди в усіх наступних блоках.

<div data-with-frame="true"><figure><img src="/files/122418fd6e5887307c9c93324feb0c329c878270" alt="" width="563"><figcaption></figcaption></figure></div>

Якщо `switch_order` Якщо функцію викликано з ID видаленої або неіснуючої угоди, перемикання не відбудеться. У такому разі функція поверне ID угоди, яка наразі активна для клієнта (або `None` якщо в клієнта немає активної угоди).

Отже, ви можете перевірити, чи перемикання було успішним, порівнявши `order_id` переданий у функцію з тим значенням, яке вона повертає:

`switch_result = switch_order(order_id)`

`result = if(switch_result == order_id, value_if_true, value_if_false)`

<div data-with-frame="true"><figure><img src="/files/63331847ed33b129d280167276bcb34054b81290" alt="" width="563"><figcaption></figcaption></figure></div>

Якщо до `switch_order()` функції не передано жодного аргументу, вона активує останню угоду клієнта. Це дає змогу повернути або скинути активну угоду — наприклад, після виконання операцій з іншою угодою або коли вам не потрібно зберігати тимчасово активовану угоду, викликану callback-ом CRM.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mavibot.ai/doc/uk/crm/setting/deals.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
