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

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

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

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

Получение информации о сотрудниках
Если вам нужно предоставить информацию о сотрудниках филиала, используйте функцию 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
Параметры:
company_id (обязательно)
Идентификатор филиала, ожидаемый формат — целое число;
service_ids (необязательно)
ID услуги или список ID услуг, ожидаемый формат — целое число или список целых чисел в квадратных скобках, разделенный запятыми, например [844, 845]
job_title_id (необязательно)
ID должности, ожидаемый формат — целое число;
service_category_id (необязательно)
Идентификатор категории услуги, ожидаемый формат — целое число;
Примечание:
Если вы хотите получить всех сотрудников филиала, оставьте значения 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)
Пример использования:
Вызов функции в кодовом блоке:

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

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

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

Получение доступных слотов записи
Чтобы получить список доступных слотов записи, используйте get_slots_for_booking .
Функция проверит наличие свободного времени на выбранную дату и вернет список свободных слотов в формате «часы:минуты», например [“09:00”, “11:00”, “14:30”, “16:00”].
Порядок параметров следующий:
company_id -> service_ids -> employee_id -> slot_interval
Параметры:
company_id (обязательно)
идентификатор филиала, ожидаемый формат — целое число;
service_ids (необязательно) -
список идентификаторов услуг для записи, ожидаемый формат — целое число или список целых чисел (например, 842 или [842, 843]);
date (необязательно) -
дата для проверки слотов, ожидаемый формат — строка в виде «день.месяц.год», например “01.01.2024”;
employee_id (необязательно)
идентификатор сотрудника, ожидаемый формат — целое число. Если значение параметра оставить пустым или передать пустую строку, функция будет искать свободные слоты в расписаниях всех сотрудников, работающих в выбранную дату и предоставляющих полный набор услуг из списка service_ids;
slot_interval (необязательно)
интервал в минутах между доступными слотами, ожидаемый формат — целое число, значение по умолчанию — 30 (минут);
Пример использования:
Вызов функции в блоке:
Пример возвращаемых данных:
Создание записи
Чтобы создать онлайн-запись, используйте 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
Параметры:
company_id (обязательно)
идентификатор филиала, ожидаемый формат — целое число;
service_ids (обязательно)
список идентификаторов услуг для записи, ожидаемый формат — целое число или список целых чисел (например, 5 или [5, 10, 15]);
booking_date (обязательно)
дата записи, ожидаемый формат — строка в виде «день.месяц.год», например “15.01.2024”;
booking_time (обязательно)
время записи, ожидаемый формат — строка в виде «часы:минуты», например “12:30”;
employee_id (необязательно)
идентификатор сотрудника, ожидаемый формат — целое число. Если значение параметра оставить пустым или передать пустую строку “”, функция запишет к случайному сотруднику, который предоставляет полный набор услуг из списка service_ids, если они доступны на указанную дату и время;
Пример использования:
Вызов функции в блоке:
Пример успешного ответа на запись:
При создании записей и последующем повторном запросе доступных слотов вы заметите, что списки сократились. Например, на 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).
Параметры:
client_id (необязательно)
client ID, req — этот параметр обязателен, если вы хотите получить записи конкретного клиента; по умолчанию используется ID клиента из чата с ботом.
Пример использования:
Вызов функции в блоке:
Пример возвращаемых данных:
Изменение даты и времени записи
Клиент может самостоятельно изменить дату и время записи. Для этого ему нужно перейти в блок воронки, где вызывается modify_booking_time функция.
Если операция выполнена успешно, функция вернет статус операции (status) со значением True и сообщение (message) «Время записи изменено» в формате «ключ: значение».
Порядок параметров:
order_id -> new_date -> new_time
Параметры:
order_id (обязательно)
идентификатор записи, ожидаемое значение — целое число;
new_date (обязательно)
новая дата записи, ожидаемый формат — строка в виде «день.месяц.год», например “16.01.2024”;
new_time (обязательно)
новое время записи, ожидаемый формат — строка в виде «часы:минуты», например “14:30”;
Пример использования:
Вызов функции в блоке:
Ответ бота при успешной операции:
Ранее занятый слот 16:00 теперь снова доступен для записи, а новую запись на те же услуги теперь можно сделать только с 11:00
В информации о записи клиента вы также увидите обновленное время записи:
Отмена записи
Клиент может самостоятельно отменить существующую запись. Для этого ему нужно перейти в блок, где вызывается cancel_booking функция.
При успешной отмене будет возвращен статус операции (status) со значением True и сообщение (message) «Запись удалена» в формате «ключ: значение».
Порядок параметров:
pipeline_id -> order_id
Параметры:
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
Настроить реакцию на колбек можно, прописав значение в условии блока:

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