# Чатбот для онлайн-бронювання

## Загальна інформація

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

Робота бота ґрунтується на послідовному виконанні функцій: отриманні даних для відображення клієнту, а потім передаванні цих даних далі для запуску нових функцій і отримання нових результатів.

Коли клієнт рухається воронкою, у кожен наступний блок слід передавати лише ті дані, що відповідають вибору клієнта, — використовуйте ці дані для налаштування наступних викликів функцій.

Завдяки можливості отримувати проміжні дані (наприклад, посади співробітників і категорії послуг) та передавати їх далі для фільтрації співробітників і послуг, ви можете гнучко налаштувати свою воронку й дати клієнту контроль над етапами її проходження.

{% hint style="info" %}
Усі методи, описані в цій статті, повертають масив словників.

Для зручної роботи з ними рекомендуємо переглянути розділи [Масиви](broken://pages/8b662a1baa75d8d10eb910e4c71b0fd62560cef9) і [Словники](broken://pages/b50f4377d9e74a701fb2e79a1edbf0488894c058).&#x20;

Також, щоб використовувати функцію для формування дій користувача (вибір послуги, дати, бронювання), радимо звернути увагу на метод [tools\_make\_button\_str\_checker](/doc/uk/chatbot/functions/kalkulyator/arrays.md).&#x20;
{% endhint %}

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

<figure><img src="/files/dab860b4d1c29a82c0ba8fd329b723bb1080bd36" alt="" width="563"><figcaption><p>схема чат-бота</p></figcaption></figure>

{% hint style="info" %}
Щоб побачити детальну схему налаштування чат-бота онлайн-бронювання з використанням функцій, дивіться розділ [Приклад реалізації бота](#example-of-bot-implementation) цієї статті.&#x20;
{% endhint %}

## Отримання інформації про філії

Щоб створити воронку онлайн-бронювання та отримати інформацію про філії проєкту, використовуйте функцію get\_companies\_for\_booking.

Функція повертає список із даними для кожної філії (воронки), у налаштуваннях якої ввімкнено «Online Booking».

Дані подаються у вигляді пар «ключ-значення» та містять ідентифікатор філії (id), назву (name) та адресу (address).

Функція не приймає жодних параметрів.

### Приклад використання:

Виклик функції всередині блоку:

<figure><img src="/files/9054cc6b552f15a05ffb865b78ce98d595270593" alt="" width="375"><figcaption></figcaption></figure>

Приклад повернених даних:

<figure><img src="/files/9940e3bc71af367bb70fcf23f22274f14b42ba74" alt="" width="375"><figcaption></figcaption></figure>

## Отримання інформації про посади або категорії послуг

Функція get\_categories\_for\_booking(company\_id) дає змогу отримати список усіх типів спеціалістів або категорій послуг для філії.

Кожен елемент у списку, що повертається, містить ідентифікатор (id), назву (name) та опис (description) посади або категорії послуг. Дані подано у вигляді пар «ключ-значення»:

#### Параметри:

<table><thead><tr><th width="310">Параметр</th><th>Опис</th></tr></thead><tbody><tr><td>company_id (обов’язковий) </td><td>Ідентифікатор філії, очікуваний формат — ціле число.</td></tr></tbody></table>

### Приклад використання:

Приклад виклику функції в блоці коду:

<figure><img src="/files/bb79b03208535b2776e9f1bde2a22315d9cd0bd3" alt="" width="375"><figcaption></figcaption></figure>

## Отримання інформації про співробітників

Якщо вам потрібно надати інформацію про співробітників філії, використовуйте функцію get\_employees\_for\_booking.

Виклик поверне список даних, що містить ідентифікатор співробітника (id), ім’я (name), інформацію (information) та посаду (job\_title).

Також можна фільтрувати співробітників за списком послуг, посадою або категорією послуг. Для цього передайте додатковий параметр у виклик функції: service\_ids, job\_title\_id або service\_category\_id.

#### Порядок параметрів:

company\_id -> service\_ids -> job\_title\_id -> service\_category\_id

#### **Параметри:**

<table><thead><tr><th width="287"></th><th></th></tr></thead><tbody><tr><td>company_id (обов’язковий)</td><td>Ідентифікатор філії, очікуваний формат — ціле число;</td></tr><tr><td>service_ids (необов’язковий)</td><td>Ідентифікатор послуги або список ідентифікаторів послуг, очікуваний формат — ціле число або список цілих чисел у квадратних дужках, розділених комами, наприклад [844, 845]</td></tr><tr><td>job_title_id (необов’язковий)</td><td>Ідентифікатор посади, очікуваний формат — ціле число;</td></tr><tr><td>service_category_id (необов’язковий) </td><td>Ідентифікатор категорії послуг, очікуваний формат — ціле число;</td></tr></tbody></table>

**Примітка:**

Якщо ви хочете отримати всіх співробітників філії, залиште значення для service\_ids, job\_title\_id і service\_category\_id порожніми.

* Приклад виклику: get\_employees\_for\_booking(14275391)

Щоб відфільтрувати співробітників за списком ідентифікаторів послуг, передайте список як другий параметр і залиште job\_title\_id та service\_category\_id порожніми.

* Приклад виклику: get\_employees\_for\_booking(14275391, \[844, 845])

Щоб відфільтрувати співробітників за посадою, передайте ID у параметр job\_title\_id, а service\_ids і service\_category\_id залиште порожніми.

* Приклад виклику: get\_employees\_for\_booking(14275391, “”, 1021)

Щоб отримати співробітників, які надають послуги певної категорії, залиште service\_ids і job\_title\_id порожніми рядками, а вибраний ID категорії передайте в service\_category\_id.

* Приклад виклику: get\_employees\_for\_booking(14275391, “”, “”, 1019)

### Приклад використання:

Виклик функції в блоці коду:

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

Приклад повернених даних:

<figure><img src="/files/9382377daf3ec986eca3c25c69ff8683718d27fc" alt="" width="375"><figcaption></figcaption></figure>

## Отримання інформації про послуги

Щоб отримати інформацію про послуги, які надає філія, використовуйте **get\_services\_for\_booking** функцію.

У результаті виклику бот поверне список, що містить дані про послуги. Кожен запис про послугу містить ідентифікатор (**id**), назву (**title**), опис (**description**), ціну (**price**), а також тривалість послуги в хвилинах (**duration**).

Ви можете відфільтрувати отриманий список за категорією послуги, за співробітником або одночасно за категорією послуги й співробітником. Для цього передайте додаткові параметри **service\_category\_id** та/або **employee\_id** під час виклику функції.

#### Порядок параметрів:

company\_id -> service\_category\_id -> employee\_id

**Параметри:**

<table><thead><tr><th width="310"></th><th></th></tr></thead><tbody><tr><td>company_id (обов’язковий) </td><td>Ідентифікатор філії, очікуваний формат – ціле число;</td></tr><tr><td>service_category_id (необов’язковий) </td><td>Ідентифікатор категорії послуг, очікуваний формат – ціле число;</td></tr><tr><td>employee_id (необов’язковий) </td><td>Ідентифікатор співробітника, очікуваний формат – ціле число;</td></tr></tbody></table>

#### Примітка до розділу «Параметри»:

Якщо ви хочете отримати всі послуги філії, залиште **service\_category\_id** і **employee\_id** значення порожніми.

* Приклад виклику: get\_services\_for\_booking(14275391)

Якщо ви хочете відфільтрувати послуги за категорією та/або співробітником, передайте відповідні ідентифікатори в **service\_category\_id** і **employee\_id** параметри. Щоб фільтрувати лише за одним параметром, для іншого вкажіть порожній рядок.

Приклади викликів:

* get\_services\_for\_booking(14275391, 1018) - фільтр за категорією послуг;
* get\_services\_for\_booking(14275391, “”, 512978) - фільтр за співробітником;
* get\_services\_for\_booking(14275391, 1018, 463665) - фільтрація за обома параметрами;

### &#x20;Приклад використання:

Виклик функції всередині блоку:

<figure><img src="/files/82163d0aa24bb19d656ff13f37fa8d5c68e856e9" alt=""><figcaption></figcaption></figure>

Приклад повернених даних:

<figure><img src="/files/42c255889810617c7aa7b8cc5b4c5fb1fdca33cc" alt="" width="375"><figcaption></figcaption></figure>

## Отримання доступних дат бронювання

Після того як клієнт обрав послуги для бронювання, йому потрібно отримати список доступних дат бронювання.

Щоб згенерувати цей список, використовуйте **get\_dates\_for\_booking** функцію.

Функція перевірить наявність доступних часових слотів і поверне список підхожих дат у форматі «день.місяць.рік».

#### Порядок параметрів такий:

company\_id -> service\_ids -> employee\_id -> days\_limit

#### Параметри:

<table><thead><tr><th width="309.33941650390625"></th><th></th></tr></thead><tbody><tr><td>company_id (обов’язковий) </td><td>ідентифікатор філії, очікуваний формат – ціле число;</td></tr><tr><td>service_ids (необов’язковий)</td><td>список ідентифікаторів послуг для бронювання, очікуваний формат – ціле число або список цілих чисел у квадратних дужках, розділених комами (наприклад 842 або [842, 843]);</td></tr><tr><td>employee_id (необов’язковий)</td><td>ідентифікатор співробітника, очікуваний формат – ціле число. Якщо значення параметра залишити порожнім або передати порожній рядок “” — функція шукатиме доступні дати серед усіх співробітників, які надають повний набір послуг зі списку service_ids;</td></tr><tr><td>days_limit (необов’язковий)</td><td>кількість днів від поточної дати, у межах яких виконується пошук доступних дат, очікуваний формат – ціле число, значення за замовчуванням – 14 (днів);</td></tr></tbody></table>

### Приклад використання:

Виклик функції всередині блоку:

<figure><img src="/files/7125fc4641b8e30ce463c884e0aaac586b2bdc48" alt=""><figcaption></figcaption></figure>

Приклад повернених даних:

<figure><img src="/files/5bfe9150352220d7e72e1ef405ab7d90eb4d7d23" alt="" width="375"><figcaption></figcaption></figure>

## Отримання доступних слотів бронювання

Щоб отримати список доступних слотів бронювання, використовуйте **get\_slots\_for\_booking** функцію.

Функція перевірить наявність вільного часу на вибрану дату та поверне список вільних слотів у форматі «години:хвилини», наприклад \[“09:00”, “11:00”, “14:30”, “16:00”].

#### Порядок параметрів такий:

company\_id -> service\_ids -> employee\_id -> slot\_interval

#### Параметри:

<table><thead><tr><th width="284"></th><th></th></tr></thead><tbody><tr><td>company_id (обов’язковий)</td><td>ідентифікатор філії, очікуваний формат – ціле число;</td></tr><tr><td>service_ids (необов’язковий) - </td><td>список ідентифікаторів послуг для бронювання, очікуваний формат – ціле число або список цілих чисел (наприклад 842 або [842, 843]);</td></tr><tr><td>date (необов’язковий) - </td><td>дата для перевірки слотів, очікуваний формат – рядок у вигляді «день.місяць.рік», наприклад “01.01.2024”;</td></tr><tr><td>employee_id (необов’язковий)</td><td>ідентифікатор співробітника, очікуваний формат – ціле число. Якщо значення параметра залишити порожнім або передати порожній рядок, функція шукатиме вільні слоти в розкладах усіх співробітників, які працюють у вибрану дату та надають повний набір послуг зі списку service_ids;</td></tr><tr><td>slot_interval (необов’язковий) </td><td>інтервал у хвилинах між доступними слотами, очікуваний формат – ціле число, значення за замовчуванням – 30 (хвилин);</td></tr></tbody></table>

### Приклад використання:

Виклик функції в блоці:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXc7GJ9EjdCro_idrF14dVYscslN653oUESQaAFjHBWZrSO8q4joGD95kXjFfaX-E2oRT_nLCdKNrGdN9j5wBVJFKOgiyG2ZGDJNjR-l3OAhvP2E0pPTA0dOiYD3WxGdxdD57bRO-UC3CoGVVO4XV3Cq5BNpc8cZ1S6S0lsnlw?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

Приклад повернених даних:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXe6V_i1iPe4C6A6CDJPu6GNK4fFLzUzq4ktYRRf01jRRgvRl87Ir3hWs2GbWRsYatbz0o8srDyE6pHklrvZ129tilNr5fuR9C_lhQP75MO-_Mfi9JVgcTvHoldK6Y8dcZ_cQamJp2JDxBfA8OU3a9cDgPavncaz-9aU_p31qg?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

## Створення бронювання

Щоб створити онлайн-бронювання, використовуйте **create\_booking** функцію.

Якщо бронювання успішне, функція поверне інформацію про статус операції (status) зі значенням True та деталі бронювання (booking) у форматі «ключ: значення».

Нові дані бронювання містять:

* ідентифікатор (id),&#x20;
* дату (booking\_date),&#x20;
* час (booking\_time),&#x20;
* назви послуг (services),&#x20;
* тривалість бронювання (service\_duration),&#x20;
* загальну вартість (total\_cost),&#x20;
* ім’я призначеного співробітника (employee\_name) та його посаду (job\_title),&#x20;
* назву філії (company\_name) та адресу філії (company\_address)&#x20;

у форматі «ключ: значення».

#### Порядок параметрів:&#x20;

company\_id -> service\_ids -> booking\_date -> booking\_time -> employee\_id

Параметри:

<table><thead><tr><th width="288"></th><th></th></tr></thead><tbody><tr><td>company_id (обов’язковий)</td><td>ідентифікатор філії, очікуваний формат – ціле число;</td></tr><tr><td>service_ids (обов’язковий)</td><td>список ідентифікаторів послуг для бронювання, очікуваний формат – ціле число або список цілих чисел (наприклад 5 або [5, 10, 15]);</td></tr><tr><td>booking_date (обов’язковий)</td><td>дата бронювання, очікуваний формат – рядок у вигляді «день.місяць.рік», наприклад “15.01.2024”;</td></tr><tr><td>booking_time (обов’язковий) </td><td>час бронювання, очікуваний формат – рядок у вигляді «години:хвилини», наприклад “12:30”;</td></tr><tr><td>employee_id (необов’язковий)</td><td>ідентифікатор співробітника, очікуваний формат – ціле число. Якщо значення параметра залишити порожнім або передати порожній рядок “”, функція забронює через випадкового співробітника, який надає повний набір послуг зі списку service_ids, якщо вони доступні у вказані дату й час;</td></tr></tbody></table>

### &#x20;Приклад використання:

Виклик функції в блоці:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdb3Fq2gqGtJ-QK342Hr12Ckv-krW_04_uAeJsCcnKpCq_iTC8mAxXjXvc_UqOVAOfm7WGcHYlfcvZjImoZXoNuPYCctsZOPB35toHI4zWMmK-sr3GoEdujlh8YQRxXsF_qN-I836wsU3AKhMvP8t0KiF0h6syWhECIxsynkQ?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

Приклад успішної відповіді бронювання:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfsZPfW9v1VoJqC3nNqtnlLQJS-KhAaEi3uUzhz26vYmcxajMRMwd7NnZVZB2LpmavglbNibSpAAJIlo0mbge1_K6rguZTf1tE4NxkBPmKQ1GCy0x47vzfkIV5DTN-R-RlYpMZ-bfAQ-vrZ_tEM6mugSbn0E5BAjHCVN2Gdmw?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

Коли ви створюєте бронювання та потім знову запитуєте доступні слоти, ви помітите, що списки скоротилися. Наприклад, на 05.02.2024 слот 18:00 вже недоступний (він був вільний лише в розкладі Вікторії), а для Пола Томпсона запис на чоловічу стрижку та оформлення бороди тепер можна зробити з 9:00 до 14:00, оскільки загальна тривалість послуг становить 1 годину 45 хвилин, а в Павла вже є інше бронювання о 16:00.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfglzV1DHx8clVfshVMInDi9MOS6sAlPGG8Axr6FYKBAeINwRaj2gvJMRYNcec7ZmDCnFKYCkU64AQqz2mgMWxCnp4G4YPRPb6C9D9g9KLKFM2e2bCVpBA2refY_fChq-W1uNy196r5d8dNZUudGRg-2qgN9NX20lCteL8AZw?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

## Отримання інформації про майбутні бронювання клієнта

Ви можете переглянути поточні бронювання клієнта, викликавши **get\_bookings\_info** функцію.

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

Інформація про бронювання подається у форматі «ключ: значення» і містить:

* ідентифікатор бронювання (booking\_id),&#x20;
* дату (booking\_date),&#x20;
* час (booking\_time),&#x20;
* ідентифікатори (service\_ids) та назви (service\_names) вибраних послуг,&#x20;
* тривалість бронювання (booking\_duration),&#x20;
* загальну вартість послуг (total\_cost),&#x20;
* ідентифікатор (employee\_id) і ім’я (employee\_name) призначеного співробітника, а також його посаду (job\_title),&#x20;
* ідентифікатор філії (company\_id)&#x20;
* назву філії (company\_name) та адресу (company\_address).

#### Параметри:

<table><thead><tr><th width="253"></th><th></th></tr></thead><tbody><tr><td>client_id (необов’язковий)</td><td>client ID, req – Цей параметр є обов’язковим, якщо ви хочете отримати бронювання для конкретного клієнта; за замовчуванням використовується client ID з чату з ботом.</td></tr></tbody></table>

### Приклад використання:

Виклик функції в блоці:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXeKlJcFxIx3cc_3vb8g0MARiqu6iNE4eW8BEmVY21MjT74GxS2U7JKFaAn6Sia99v4kQ4O8HuHFYkQJs8jCNmtpZHIkKq1SZ3_3BCBSA7mCs_iXVk6Ucu8hWTOHN7mPa0J5LGG5QSRK8TSP9BEZracVVNQBZKuZkLJx36r_TA?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

Приклад повернених даних:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcHzfzRWdUXAmr-iwrHhcdpHYraOD--i4jjI5ftsc-KRzzEOOFArT3hKZE--WucI4m3_b2v0DK99dV4EL2BQ9d0U2q-2fGHM6RiCHX_YUl7kgI-SA4zJIHs4zFte6GhgQAMfUY9Qim4THusxMhKielEnXQuHzapLqmh_oZm?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

## Зміна дати й часу бронювання

Клієнт може самостійно змінити дату й час бронювання. Для цього йому потрібно перейти до блоку воронки, де викликається **modify\_booking\_time** функція.

Якщо операція успішна, функція поверне статус операції (status) зі значенням True та повідомлення (message) «Час бронювання змінено» у форматі «ключ: значення».

#### Порядок параметрів:&#x20;

order\_id -> new\_date -> new\_time

#### Параметри:

<table><thead><tr><th width="300"></th><th></th></tr></thead><tbody><tr><td>order_id (обов’язковий) </td><td>ідентифікатор бронювання, очікуване значення – ціле число;</td></tr><tr><td>new_date (обов’язковий)</td><td>нова дата бронювання, очікуваний формат – рядок у вигляді «день.місяць.рік», наприклад “16.01.2024”;</td></tr><tr><td>new_time (обов’язковий)</td><td>новий час бронювання, очікуваний формат – рядок у вигляді «години:хвилини», наприклад “14:30”;</td></tr></tbody></table>

### Приклад використання:

Виклик функції в блоці:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcDyllYwQDcuLOWIAFTCHb4A765baTgyFrir86V0h3ja3OQpECP2D5TszmK-M_PbKmQRVbp1LFLUMc_JIU4m9562kGnWz9WILVhjpMhf1jZw5bOUXCuBbUasMKWeaTo0pATOPujX4QK6laEk2TlXPU6Qycc7xlih1KbEBxK?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

Відповідь бота для успішної операції:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdKqYrp28WS18aq3-_0I_3iDJUc2FmzwsilP1-5do9jmVjjVJ3Igfflo9rMnU_KEWWdAUYSZtjp6B0bVxwBcc7P21RvWVIeCOEAq0pNEh1KYDxJATu71S1Fiil4gicJeFuq5MAcp7bnQdUqRf8kjrWMXuA2_Fl09tjKwEPI?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

Раніше зайнятий слот 16:00 тепер доступний для бронювання, а створити нове бронювання для тих самих послуг тепер можна лише з 11:00

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXeM-8-vu5dfYf4DlMnzlWTk08tQm80ne-qTBJleANK0Mjn-TuZWyMbO13Hex4FzdwvCgQspNeErgWwQkTZIejzDWK1BItCGxrLpAi9D0XFx75rqFvUF9UChQ_LoZqUNozZzKwubmGkx7XSgsTm-_1CBORCt5Nidh5X4ohbx?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

В інформації про бронювання клієнта ви також побачите оновлений час бронювання:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXeCyMMrRSlqAdCpmu0-HWsS6iKxW6xHjdtcnZ2NjxLTaRy7W_w3mhyLZQ2PjZgpvbmHRnRML-5A6hTwHpgpLaTerklX-opM8_UTQAeuT-ev2bd7AvC6N1ynPf50EUVRs6m4hZU4YIKnWQRamRcGbror5uJ7ElZ2v2KPtX1NxQ?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

## Скасування бронювання

Клієнт може самостійно скасувати наявне бронювання. Для цього йому потрібно перейти до блоку, де викликається **cancel\_booking** функція.

У разі успішного скасування буде повернуто статус операції (status) зі значенням True та повідомлення (message) «Бронювання видалено» у форматі «ключ: значення».

Порядок параметрів:

pipeline\_id -> order\_id

Параметри:

<table><thead><tr><th width="321"></th><th></th></tr></thead><tbody><tr><td>pipeline_id (обов’язковий)</td><td>ідентифікатор філії, очікуване значення – ціле число;</td></tr><tr><td>order_id (обов’язковий)</td><td>ідентифікатор бронювання, очікуване значення – ціле число;</td></tr></tbody></table>

### Приклад використання:

Виклик функції в блоці:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdWFqf619l5j1eQoe4p6QCPqGGsqcyEefKLs5PJxPwecillJaxUnQSC5eHFcT2olsrM62PHJDVGyxeD6Tl2xg3id27f-p51spmVZFjlDhSwzw3TwMx-CbQT9n3fnjYLPCO4wlqtKdB0cd1W36dp9wXYg4gEVJh6eketyDUQ?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

Відповідь бота для успішного скасування:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXe7FcrjKQxzoEgo3wfMuUt0a9zkPVkb02ojx5pZ3KYWU5NfLazmLhgCaNxvigreYXXfzYFEhd5KyF7D3808VLBGl5Cte7YRXI0cWQK3J9ZV05G5y5XUIXGq1Arcac2KrPmHnCCakarcTFXd_9X5_4yYsI6j4rpMySaZr3lA?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

Після скасування слоти «09:00» і «10:00» знову доступні для бронювання:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcRLLDJ0un8QPUj11yC8VDy2TlbbgUHuDd13YSQ3AZU3ey4Cg00SMEke5LFPKWGHR8em7BWHiH8l-bSqGICNAU5CP9ORBGI9CFMKziB0JQLZA0QUvYJ8q-SXXQGQsPCnEWdNrDZ1G7bZupR4zOLgGpJt9TgZBxG_R1MPf9f?key=KyjJFgzVYb53MOCGur8CUg" alt=""><figcaption></figcaption></figure>

## Приклад реалізації бота

### Налаштування чат-бота

**Блок №1.** Початок. Жодних спеціальних дій не потрібно

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcXoXRmydVuSiBv9lAWBG-5rDy8cIcNbk2zjsJ7o5kxShJEExU13A9O2v9pFuqG6oTndOvrnRft3jHQaZFf-7RGYiFM09FPzpQdrdS47_ttQcgLvbDExj9xIBEjJ80qVPHSAFzfth5zcO_rCvqk66FaK-Nx?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption><p>Блок 1.</p></figcaption></figure>

**Блок №2**. У цьому блоці ми отримуємо дані, які будуть надані клієнту.

Опис вмісту калькулятора:

* comp\_id - ідентифікатор блоку послуг, який можна знайти в розділі «Послуги»;
* data - інформація про надані послуги
* res - словник із даними, необхідними для створення кнопок і налаштування умов
* numbered\_list - може бути корисним, якщо список послуг потрібно дублювати у текстовому вигляді
* buttons - масив кнопок, згенерованих із даних про послуги
* checker - масив назв послуг, який використовується для встановлення умов переходу до наступного блоку

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdLGPcvhDRumGklk525zCB4VEqziavYPoNoqJiC3XD036d1R_jcSF2yeDhFZvrTOTxFrALYNF9_ezfdbKxgn6fSuIkTyCzHb9Cxaw3cW9ywtyUbvf3Bezb3ukuZC3fFuM5e0Jb8tNCyWRqUv-8aev2MHeo?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption><p>Блок № 2</p></figcaption></figure>

**Блок №3**. Отримуємо та відображаємо дані про вибрану послугу.

title - у масиві словників **data**, знайдіть словник, у якому ключ **title** дорівнює **question**. Із цього словника отримайте значення для того самого ключа **title**

description - аналогічно отримайте значення для ключа **description**

price - аналогічно отримайте значення для ключа **price**

serv\_id - аналогічно отримайте значення для ключа **id**

b - створіть масив рядків, які будуть відображатися як кнопки під повідомленням

res - з масиву **b**, створіть масив словників, як у попередньому блоці

buttons - отримайте масив для відображення кнопок

Тепер у нас є змінні, що містять назву, опис і ціну послуги, обраної клієнтом

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfoMVt3v-buSCBlpe9hKGoFoemSKQW0oeLLZ7LZwZ24vR507mCOTzuewDhUsfCangNsex0sKbdc9k-HeJXQ-ermTNsf_p3O4xtlpygOhFmzyWZ2cjCDxHUUdZq0gCsiSGJmSWIkN04n4XOkpX2t6nHVORhb?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption><p>Блок № 3</p></figcaption></figure>

**Блок №4.** Відобразити доступні дати бронювання

print\_dates - використайте функцію, щоб отримати доступні дати бронювання для вибраної послуги

print\_dates - додайте рядок «Повернутися до списку послуг» до масиву дат, якщо хочете, щоб ця кнопка відображалася разом із датами.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXeNbqnf6RHcvKlt8ECsxm7uUQpLClSJ2kVgW9HPi35Pmq5XtsAR_yXWCxHr_0CYwJ4whUQfdof71uxnPt8BHxobfYJdxGeDhmf3BXd5NHAPyC12RT6cRIzn8g_Kda70WRAhjYhJ85Vfhi9i40aqUu-Kvg8E?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

Для стрілки, що повертає до попереднього кроку, встановіть вищий пріоритет, ніж у стрілки з #{checker}, оскільки #{checker} також містить умову «Повернутися до списку послуг».

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcuUIlqDrtiEGIX7Dk8d1YILa_s9F2bRzrgcgQ_eytukzhEe2IDatqW7VPPgyQeLfzOYqtY-vL2rdCaGYSf3PSRpe4JSXlHD68TJHrOHec6tBRvMOp_sIMs3bqWAQKX9jWPDsWjY-CGQnZEc8QPr2ZGikXQ?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

**Блок №5.**\
У блоці №5 ми зберігаємо дату, вибрану клієнтом. Це потрібно зробити в окремому блоці, тому що на наступних етапах під час повернення в Блок 6 змінна question уже не міститиме вибрану клієнтом дату.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfBnoXAoC-hwhm7MJk242wb1qbGz4qwZr-L180d271_eNanul0suKBZUdiYAy95nTZD7rVZv5bYgnB8dZ3u0pW75yMtdz2mQ6bzqTTAxEhVZAihD-VCj-45M9jldb6Ic_JuyDEWsvlodPlxY-2150k62HuW?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

**Блок №6.** Вибір і відображення доступних слотів для запису.

data - отримуємо доступні слоти.

Логіка така сама, як у Блоці №4 з виведенням доступних дат. Також важливо не забути налаштувати підвищений пріоритет у стрілки «Повернутися до вибору дати»

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdO4UUM3CyFvJN5lNulwUwHbEWQhng6kaW_YVmOrbkP-2VoQHB3Sg09TkpPv5joYo3EV_9iaFI68B4dfgzL49RveaMzZHQIOs7mKyzFgsA6PKrwrKM0oMKZVGMZjbyz2rxIi0kpaOZFZIStEzUvASiyunli?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

**Блок №7.** Збереження вибраного часу у змінну та спроба записати клієнта.&#x20;

choosed\_time - зберігаємо час

a - спроба записати клієнта

booking\_result - отримуємо результат виконання функції.&#x20;

Отримати результат необхідно, оскільки кілька людей можуть спробувати записатися на один і той самий час одночасно.&#x20;

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXczzYBOEvinNi3ixDewD_V6XrrfAwjChrujdPmo7MK1m1qV-8depW4IV8_-VxA6_u2RKwTBYifAi4q5kxN1OEG_6m9exNS-hAvtB2VH49kP-X5uuAboxpgb--ugGdit-JI6inwRHXMQtbPbqSy-oe3ZvLi_?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

**Блок №7.1.** Записати клієнта не вдалося.

Цей блок потрібен лише для повідомлення про помилку. Після надсилання повідомлення повертаємо клієнта до вибору часу для запису

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXflFxwu5IdfEsIzK1dpt4STbIc6GY2HDz-NvpW6vmG12aBRj5TWgaN2O_YWlLaCSN3B52bMDf8EIMo2kKofNkTzD_TqRWu7F5rEL1NiFrlPiJwLntEG9DgdSKYocFtNQMADKTMJFHADE4fPUgeFJJ5crM3y?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

**Блок №8.** Запис пройшов успішно.

Повідомляємо клієнту, що його записано на послугу, і відображаємо кнопку для оплати.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXebWZ4RSKanJHHLwJmqRzx_sQAwEqpnz7hMmMOqJziY9J4IpSAPevmApHRz_oR3GEIuceV_IOAi1XdpUMqNtgC5nI-vB75hIq_9NDudNSGzYESotA-rl-WCFjLtcVQA6kiFvcDvij0koA2ttg4NVvwwiQI?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

Приклад налаштування кнопок.&#x20;

Для налаштування використовуємо змінні, які ми отримали в блоці №3:

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcuWNRouJXZN4GcbOP_g5b2cBGtzMjW3t20fJDYvPqy02QHr_Mx7seJfSJSjnieOxRiuZ2eQ8F8iJEcBkllOYNYR4cXYGFfuK69jsVhnLUuq-3a2a5Lts8UXEJyP1m0DvNoEmyDiMcXXpLQX8srFEgvnSo?key=Gdkru5ZyRiCm0ujtl74quw" alt="" width="375"><figcaption></figcaption></figure>

**Блок №8.1.**

У цьому блоці підтверджуємо успішну оплату. Перехід у блок налаштовуємо відповідно до використовуваної платіжної системи

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcKwiimzQWaWQdY87DhVF0EHgXGIN1am1ybhpQIN2ZjubanvoORX4nF86oxQfeDUH0rSfPPLQp4BVRDYJh0wMWQRp-ko-Dm8PmWeBPyA9KvPiSwDt6GkzUrsFw9ITDDjH7-JsG97mxgwZ_8OtCMFVVkhPza?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

**Блок №8.2.** Клієнт не оплатив послугу. Скасування запису

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

or\_id - отримуємо id замовлення

cancel\_status - після виконання функції отримуємо відповідь, чи успішно виконано скасування.&#x20;

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXe0S7A8roVZ-cqy20A7SABHlZEH561HeUudCIFcTEmV19DibNgEWLoEqZ45pWtukMuEdaxuJ1KjsvAiR7hFeGCrNLIMBghZIglifArlGWnBA1O6uKfGoeHRyfYihmIH1EalHVrqOKJKW6AsvOraqTIM2k6j?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

У цьому прикладі клієнт потрапить у блок скасування через 5 секунд після отримання посилання на оплату, а в реальній ситуації ви можете встановити потрібну кількість часу, головне — не забудьте увімкнути перемикач «Скасувати, якщо покинув блок».

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXf4JnYF9gJdYh1IeHnh0KIP8TBthzNABp_TjejLyQXugQBBb_Xvz4yfoedExR9VJy6koxfpNqGkYe38fioTFrzuuioJjVVVp2HLB9w8gRt5LqMcFX5samcaj30aBLV69MVTCNrg2bEbnVaoxv5IuUidtB3Y?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

Повна схема:<br>

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXelLMX7_UQ0Op_QDn8S-GKMp68O-cJDYMFviZLju8TUjMMYKIMwyv9AePru93ccedeKajHSx4kP5e4t1XFfAtabSJBfluvE7q-VsZkx1rO3ICGBm0dvVUtEriaro8UXixY6XratDgILrSOMHfXIpfaHb8Y?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

### Демонстрація<br>

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcgQC7kI1xOkzZOYyijAdDELqmlgit1O615fU0RQjYF-g-ztgkNayFf2gaPupplvgiAoE1T_bOdSh-dLO4Oaqu2AVnmh-5uooWhCc3BOqqdIzgQh6gV4r3l86VJHRgXEOZTmKD3HqbXoTuRrpZ8qYJOj4Ol?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcMs9Sg7IOqKfcvVdL5ud1odnPrlHg0Acfa71bnpFAfmQ_7GP4AsKI7JI2GVzAQZV9a2d0jMGmFamGiuD_mMG00SsfAQZvje_aPGybcmsKBU0F2VpTbv5H9qPPA5gszFwQyZaaG3TH9HDutSZE19JzNo5nV?key=Gdkru5ZyRiCm0ujtl74quw" alt=""><figcaption></figcaption></figure>

## Callback про запис

У діалог із клієнтом після запису надходитиме колбек — сповіщення про запис — такого вигляду:

<figure><img src="/files/2b7ca7db94639174eafc4fb5ef575e9310669f7d" alt="" width="464"><figcaption></figcaption></figure>

<mark style="color:orange;">**new\_order\_in\_calendar**</mark> - незмінна частина колбека&#x20;

&#x20;<mark style="color:yellow;">**\[489046159]**</mark> - order\_id  ідентифікатор заявки&#x20;

<mark style="color:red;">**Додано запис дати\_та\_часу\_запису**</mark>

<mark style="color:purple;">**на 30 хвилин**</mark> - тривалість послуги&#x20;

<mark style="color:red;">**Об’єкту: Тест 30**</mark> - якому саме об’єкту додано запис

Вигляд самого колбека:

***`new_order_in_calendar: [489046159] Додано запис з 2025-06-01 14:00 до 2025-06-01 14:30 на 30 хвилин. Об’єкту: Тест 30`***

Налаштувати реакцію на колбек можна, вказавши значення в умові блоку:

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

У блоці можна прописати потрібне зворотне повідомлення клієнту.


---

# 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/booking/chatbot.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.
