Общая информация
Чат-бот для онлайн-записи — это набор функций воронки, которые позволяют автоматизировать процесс планирования услуг для вашей компании.
Работа бота основана на последовательном выполнении функций: получение данных для отображения клиенту, затем передача этих данных для запуска новых функций и получения новых результатов.
По мере продвижения клиента по воронке вы должны передавать в каждый последующий блок только те данные, которые соответствуют выбору клиента — используйте эти данные для настройки следующих вызовов функций.
Благодаря возможности получать промежуточные данные (например, должности сотрудников и категории услуг) и передавать их для фильтрации сотрудников и услуг, вы можете гибко настраивать свою воронку и давать клиенту контроль над шагами её прохождения.
Все методы, описанные в этой статье, возвращают массив словарей.
Для удобной работы с ними рекомендуем ознакомиться с разделами Массивы и Словари.
Также для использования функции генерации действий пользователя (выбор услуги, даты, записи) предлагаем рассмотреть метод tools_make_button_str_checker.
Ниже представлена схема работы бота, где каждый блок схемы представляет собой конкретный вызов функции, а стрелки указывают поток данных, передаваемых от блока к блоку. Информация, передаваемая в этих потоках, позволяет фильтровать запрашиваемые данные, а также создавать, отменять или изменять время записи.

Чтобы увидеть подробную схему настройки чат-бота онлайн-записи с используемыми функциями, обратитесь к разделу Пример реализации бота этой статьи.
Получение информации о филиалах
Для создания воронки онлайн-записи и получения информации о филиалах проекта используйте функцию get_companies_for_booking.
Функция возвращает список, содержащий данные для каждого филиала (воронки), у которого в настройках включена опция «Онлайн-запись».
Данные предоставляются в виде пар «ключ-значение» и включают идентификатор филиала (id), название (name) и адрес (address).
Функция не принимает никаких параметров.
Пример использования:
Вызов функции внутри блока:

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

Получение информации о должностях или категориях услуг
Функция get_categories_for_booking(company_id) позволяет получить список всех типов специалистов или категорий услуг для филиала.
Каждый элемент возвращаемого списка содержит идентификатор (id), название (name) и описание (description) должности или категории услуг. Данные представлены в виде пар «ключ-значение»:
Параметры:
Пример использования:
Пример вызова функции в блоке кода:

Получение информации о сотрудниках
Если вам нужно предоставить информацию о сотрудниках филиала, используйте функцию 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
Параметры:
Примечание:
Если вы хотите получить всех сотрудников филиала, оставьте значения для 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])
Чтобы отфильтровать сотрудников по должности, передайте идентификатор в параметр job_title_id и оставьте service_ids и service_category_id пустыми.
- Пример вызова: get_employees_for_booking(14275391, “”, 1021)
Чтобы получить сотрудников, предоставляющих услуги определённой категории, оставьте service_ids и job_title_id пустыми строками, а в service_category_id передайте идентификатор выбранной категории.
- Пример вызова: get_employees_for_booking(14275391, “”, “”, 1019)
Пример использования:
Вызов функции в блоке кода:

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

Получение информации об услугах
Чтобы получить информацию об услугах, предоставляемых филиалом, используйте функцию get_services_for_booking.
В результате вызова бот вернёт список, содержащий данные об услугах. Каждая запись об услуге включает идентификатор (id), название (title), описание (description), цену (price) и продолжительность услуги в минутах (duration).
Вы можете отфильтровать результирующий список по категории услуги, по сотруднику или одновременно по категории услуги и сотруднику. Для этого передайте дополнительные параметры service_category_id и/или employee_id при вызове функции.
Порядок параметров:
company_id -> service_category_id -> employee_id
Параметры:
Примечание к разделу «Параметры»:
Если вы хотите получить все услуги филиала, оставьте значения 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) - фильтрация по обоим параметрам;
Пример использования:
Вызов функции внутри блока:

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

Получение доступных дат для записи
После того как клиент выбрал услуги для записи, ему необходимо получить список доступных дат для записи.
Для создания этого списка используйте функцию get_dates_for_booking.
Функция проверит наличие доступных временных слотов и вернёт список подходящих дат в формате «день.месяц.год».
Порядок параметров следующий:
company_id -> service_ids -> employee_id -> days_limit
Параметры:
Пример использования:
Вызов функции внутри блока:

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

Получение доступных слотов для записи
Чтобы получить список доступных слотов для записи, используйте функцию get_slots_for_booking.
Функция проверит наличие свободного времени на выбранную дату и вернёт список свободных слотов в формате «часы:минуты», например [“09:00”, “11:00”, “14:30”, “16:00”].
Порядок параметров следующий:
company_id -> service_ids -> employee_id -> slot_interval
Параметры:
Пример использования:
Вызов функции в блоке:

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

Создание записи
Чтобы создать онлайн-запись, используйте функцию create_booking.
В случае успешной записи функция вернёт информацию о статусе операции (status) со значением True и детали записи (booking) в формате «ключ: значение».
Данные новой записи включают:
- идентификатор (id),
- дату (booking_date),
- время (booking_time),
- названия услуг (services),
- продолжительность записи (service_duration),
- общую стоимость (total_cost),
- имя назначенного сотрудника (employee_name) и его должность (job_title),
- название филиала (company_name) и адрес филиала (company_address)
в формате «ключ: значение».
Порядок параметров:
company_id -> service_ids -> booking_date -> booking_time -> employee_id
Параметры:
Пример использования:
Вызов функции в блоке:

Пример ответа при успешной записи:

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

Получение информации о предстоящих записях клиента
Вы можете просмотреть текущие записи клиента, вызвав функцию get_bookings_info.
В ответ будет возвращён список активных записей с подробной информацией по каждой записи.
Информация о записи предоставляется в формате «ключ: значение» и включает:
- идентификатор записи (booking_id),
- дату (booking_date),
- время (booking_time),
- идентификаторы (service_ids) и названия (service_names) выбранных услуг,
- продолжительность записи (booking_duration),
- общую стоимость услуг (total_cost),
- идентификатор (employee_id) и имя (employee_name) назначенного сотрудника, а также его должность (job_title),
- идентификатор филиала (company_id)
- название филиала (company_name) и адрес (company_address).
Параметры:
Пример использования:
Вызов функции в блоке:

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

Изменение даты и времени записи
Клиент может самостоятельно изменить дату и время записи. Для этого ему нужно перейти в блок воронки, где вызывается функция modify_booking_time.
В случае успешного выполнения операции функция вернёт статус операции (status) со значением True и сообщение (message) «Booking time modified» в формате «ключ: значение».
Порядок параметров:
order_id -> new_date -> new_time
Параметры:
Пример использования:
Вызов функции в блоке:

Ответ бота при успешной операции:

Ранее занятый слот 16:00 теперь доступен для записи, и создание новой записи на те же услуги теперь возможно только с 11:00

В информации о записи клиента вы также увидите обновлённое время записи:

Отмена записи
Клиент может самостоятельно отменить существующую запись. Для этого ему нужно перейти в блок, где вызывается функция cancel_booking.
Успешная отмена вернёт статус операции (status) со значением True и сообщение (message) «Booking deleted» в формате «ключ: значение».
Порядок параметров:
pipeline_id -> order_id
Параметры:
Пример использования:
Вызов функции в блоке:

Ответ бота при успешной отмене:

После отмены слоты «09:00» и «10:00» снова доступны для записи:

Пример реализации бота
Настройки чат-бота
Блок №1. Старт. Никаких специальных действий не требуется

Блок №2. В этом блоке мы получаем данные, которые будут предоставлены клиенту.
Описание содержимого калькулятора:
- comp_id - идентификатор сервисного блока, который можно найти в разделе «Услуги»;
- data - информация о предоставляемых услугах
- res - словарь с данными, необходимыми для генерации кнопок и установки условий
- numbered_list - может быть полезен, если список услуг нужно продублировать в текстовом виде
- buttons - массив кнопок, сгенерированный из данных об услугах
- checker - массив названий услуг, используемый для установки условий перехода к следующему блоку

Блок №3. Получение и отображение данных о выбранной услуге.
title - в массиве словарей data найдите словарь, где ключ title равен question. Из этого словаря получите значение для того же ключа title
description - аналогично получите значение для ключа description
price - аналогично получите значение для ключа price
serv_id - аналогично получите значение для ключа id
b - создайте массив строк, которые будут отображаться как кнопки под сообщением
res - из массива b создайте массив словарей, как в предыдущем блоке
buttons - получите массив для отображения кнопок
Теперь у нас есть переменные, содержащие название, описание и цену услуги, выбранной клиентом

Блок №4. Отображение доступных дат для записи
print_dates - используйте функцию для получения доступных дат записи для выбранной услуги
print_dates - добавьте строку «Вернуться к списку услуг» в массив дат, если вы хотите, чтобы эта кнопка отображалась вместе с датами.

Для стрелки возврата к предыдущему шагу установите более высокий приоритет, чем для стрелки с #{checker}, потому что #{checker} также содержит условие «Вернуться к списку услуг».

Блок №5.
В блоке №5 мы сохраняем выбранную клиентом дату. Это нужно сделать в отдельном блоке потому, что на следующих этапах при возврате в Блок 6, переменная question уже не будет содержать в себе выбранную клиентом дату.

Блок №6. Выбор и отображение доступных ячеек для записи.
data - получаем доступные ячейки.
Логика такая же, как в Блоке №4 с выводом доступных дат. Также важно не забыть настроить повышенный приоритет у стрелки «Вернуться к выбору даты»

Блок №7. Сохранение выбранного времени в переменную и попытка записать клиента.
choosed_time - сохраняем время
a - попытка записать клиента
booking_result - получаем результат выполнения функции.
Получить результат необходимо, так как несколько человек могут попытаться записаться на одно время в один момент.

Блок №7.1. Записать клиента не удалось.
Этот блок нужен только для сообщения об ошибке. После отправки сообщения возвращаем клиента на выбор времени для записи

Блок №8. Запись прошла успешно.
Сообщаем клиенту, что он записан на услугу и отображаем кнопку для оплаты.

Пример настройки кнопок.
Для настройки используем переменные, которые мы получили в блоке №3:

Блок №8.1.
В этом блоке подтверждаем успешную оплату. Переход в блок настраиваем в соответствии с используемой платежной системой

Блок №8.2. Клиент не оплатил услугу. Отмена записи
Если клиент не оплатил вовремя услугу, мы можем отменить запись, если это необходимо.
or_id - получаем id заказа
cancel_status - после выполнения функции получаем ответ, успешно ли выполнена отмена.

В этом примере клиент попадет в блок отмены через 5 секунд после получения ссылки на оплату, в реальной же ситуации вы можете установить необходимое количество времени, главное не забудьте включить переключатель «Отменить, если покинул блок».

Полная схема:

Демонстрация


Callback о записи
В диалог с клиентом после записи будет приходить колбек — уведомление о записи — следующего вида:

new_order_in_calendar - не изменяемая часть колбека
[489046159] - order_id идентификатор заявки
Добавлена запись даты_и_время_записи
на 30 минут - длительность услуги
Объекту: Тест 30 - какому именно объекту добавлена запись
Вид самого колбека:
new_order_in_calendar: [489046159] Добавлена запись с 2025-06-01 14:00 до 2025-06-01 14:30 на 30 минут. Объекту: Тест 30
Настроить реакцию на колбек можно прописав значение в условии блока:

В блоке можно прописать необходимое обратное сообщение клиенту.


