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

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

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

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

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

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

circle-info

Все методы, описанные в этой статье, возвращают массив словарей.

Для удобной работы с ними рекомендуем ознакомиться с разделами Массивы и Словари.

Также для использования функции генерации действий пользователя (выбор услуги, даты, запись) рекомендуем обратить внимание на метод tools_make_button_str_checker.

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

схема чат-бота
circle-info

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

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

Чтобы создать воронку онлайн-записи и получить информацию о филиалах проекта, используйте функцию 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. Старт. Специальных действий не требуется

Блок 1.

Блок №2. В этом блоке мы получаем данные, которые будут предоставлены клиенту.

Описание содержимого калькулятора:

  • comp_id — идентификатор блока услуг, который можно найти в разделе «Услуги»;

  • data — информация о предоставляемых услугах

  • res — словарь с данными, необходимыми для генерации кнопок и задания условий

  • numbered_list — может пригодиться, если список услуг нужно продублировать в текстовом виде

  • buttons — массив кнопок, сформированных из данных об услугах

  • checker — массив названий услуг, используемый для задания условий перехода к следующему блоку

Блок № 2

Блок №3. Получаем и отображаем данные о выбранной услуге.

title -в массиве словарей data, найдите словарь, где ключ title равен question. Из этого словаря получите значение по тому же ключу title

description — аналогично получите значение по ключу description

price — аналогично получите значение по ключу price

serv_id — аналогично получите значение по ключу id

b — создаем массив строк, которые будут отображаться в виде кнопок под сообщением

res — из массива b, создаем массив словарей, как в предыдущем блоке

buttons — получаем массив для отображения кнопок

Теперь у нас есть переменные, содержащие название, описание и цену услуги, выбранной клиентом

Блок № 3

Блок №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

Настроить реакцию на колбек можно, прописав значение в условии блока:

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

Последнее обновление