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

## Общая информация

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

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

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

Благодаря возможности получать промежуточные данные (например, должности сотрудников и категории услуг) и передавать их дальше для фильтрации сотрудников и услуг, вы можете гибко настраивать свою воронку и давать клиенту контроль над шагами ее прохождения.

{% hint style="info" %}
Все методы, описанные в этой статье, возвращают массив словарей.

Для удобной работы с ними рекомендуем ознакомиться с разделами [Массивы](broken://pages/aa63354aaf415693abe2ef06ca6a29640e0b9fd5) и [Словари](broken://pages/03d07140dbf7b9e91f6f99e959e4e2dd5f84195f).&#x20;

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

Ниже приведена схема работы бота, где каждый блок диаграммы представляет собой отдельный вызов функции, а стрелки показывают поток данных, передаваемых из блока в блок. Информация, передаваемая в этих потоках, позволяет фильтровать запрашиваемые данные, а также создавать, отменять или изменять время записи.

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

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

## Получение информации о филиалах

Чтобы создать воронку онлайн-записи и получить информацию о филиалах проекта, используйте функцию get\_companies\_for\_booking.

Функция возвращает список, содержащий данные по каждому филиалу (воронке), у которого в настройках включена «Онлайн-запись».

Данные представлены в виде пар «ключ-значение» и включают идентификатор филиала (id), название (name) и адрес (address).

Функция не принимает параметров.

### Пример использования:

Вызов функции внутри блока:

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

Пример возвращаемых данных:

<figure><img src="/files/6d7f18f8ee3c38e8bc5c782f9eb50f32820b0d03" 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/aaa4b21394cb9900bde8753dc8746bc3bf104d2a" 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>ID услуги или список ID услуг, ожидаемый формат — целое число или список целых чисел в квадратных скобках, разделенный запятыми, например [844, 845]</td></tr><tr><td>job_title_id (необязательно)</td><td>ID должности, ожидаемый формат — целое число;</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)

Чтобы отфильтровать сотрудников по списку ID услуг, передайте список вторым параметром, а 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/a8c42fcf8abc275f21fec65f636997652f615b23" alt=""><figcaption></figcaption></figure>

Пример возвращаемых данных:

<figure><img src="/files/cf004896cb4ea8f98efb37dbdb99ad1cfbf7ce2b" 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/56697d5941eefaa41aeb6ec5b4d06ee48605fa10" alt=""><figcaption></figcaption></figure>

Пример возвращаемых данных:

<figure><img src="/files/2a0525caa065d608ffd48e438cb967007722a05b" 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/0d4784597ba76c6fef317f7f94507e3e2f2e476d" alt=""><figcaption></figcaption></figure>

Пример возвращаемых данных:

<figure><img src="/files/94275d84cf7b6f830d865fd4154fbccd94a5dd17" 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 — этот параметр обязателен, если вы хотите получить записи конкретного клиента; по умолчанию используется 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/658c325340ebf155c2944146ed3fe1c0c2cf545f" 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/9e8e990259432043ddf70518905145c03dacf522" 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/ru/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.
