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

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

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

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

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

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

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

Также для использования функции генерации действий пользователя (выбор услуги, даты, записи) предлагаем рассмотреть метод 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

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

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