Чат-бот для онлайн-записи

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

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

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

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

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

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

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

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

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

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

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

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

Для создания воронки онлайн-записи и получения информации о филиалах проекта воспользуйтесь функцией get_companies_for_booking.

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

Данные представлены в виде пары “ключ: значение” и состоят из идентификатора филиала (id), его наименования (name) и адреса (address).

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

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

Вызов функции в блоке:

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

Получение информации о должностях или категориях услуг

Функция get_categories_for_booking дает возможность получить список данных о всех типах специалистов или о категориях услуг филиала.

Каждый элемент полученного списка состоит из идентификатора (id), наименования (name) и описания (description) должности или категории услуг. Данные представлены в виде пар “ключ: значение”.

Порядок следования параметров:

company_id -> job_titles

Параметры:

company_id (обязательный)

идентификатор филиала, ожидаемый формат - целое число;

job_titles (опциональный)

индикатор фильтрации должностей сотрудников. Ожидаемый формат - любое непустое, ненулевое значение (строка, напр. “yes”, или число, напр. 1 ) . Если не передать параметр, передать 0 (ноль) или пустую строку “”, функция вернет данные о категориях услуг;

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

Вызов функции в блоке:

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

Получение информации о сотрудниках

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

идентификатор или список идентификаторов услуг, ожидаемый формат - целое число или список целых чисел в квадратных скобках через запятую, напр [844, 845]

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

Параметры:

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 до 14, так как общая длительность процедур равна 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 (опциональный)

идентификатор клиента, ожидаемый формат - целое число. Данный параметр нужен, если вы хотите получить записи интересующего вас клиента, по умолчанию - идентификатор клиента в чате с ботом.

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

Вызов функции в блоке:

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

Изменение даты и времени записи

Клиент может самостоятельно изменить дату и время записи. Для этого ему необходимо попасть в блок воронки, где происходит вызов функции modify_booking_time.

При успешной операции, функция вернет информацию о статусе совершения операции (status) со значением True и сообщение (message) “Booking time modified” в формате “ключ: значение”.

Порядок следования параметров:

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) “Booking deleted” в формате “ключ: значение”.

Порядок следования параметров:

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

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

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

Last updated