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

Загальна інформація

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

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

Коли клієнт рухається воронкою, у кожен наступний блок слід передавати лише ті дані, що відповідають вибору клієнта, — використовуйте ці дані для налаштування наступних викликів функцій.

Завдяки можливості отримувати проміжні дані (наприклад, посади співробітників і категорії послуг) та передавати їх далі для фільтрації співробітників і послуг, ви можете гнучко налаштувати свою воронку й дати клієнту контроль над етапами її проходження.

Усі методи, описані в цій статті, повертають масив словників.

Для зручної роботи з ними рекомендуємо переглянути розділи Масиви і Словники.

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

Нижче наведено схему роботи бота, де кожен блок схеми відповідає певному виклику функції, а стрілки вказують на потік даних, що передається з блоку в блок. Інформація, що передається в цих потоках, дає змогу фільтрувати запитувані дані, а також створювати, скасовувати або змінювати час бронювання.

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

Щоб побачити детальну схему налаштування чат-бота онлайн-бронювання з використанням функцій, дивіться розділ Приклад реалізації бота цієї статті.

Отримання інформації про філії

Щоб створити воронку онлайн-бронювання та отримати інформацію про філії проєкту, використовуйте функцію get_companies_for_booking.

Функція повертає список із даними для кожної філії (воронки), у налаштуваннях якої ввімкнено «Online 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 (необов’язковий)

Ідентифікатор послуги або список ідентифікаторів послуг, очікуваний формат — ціле число або список цілих чисел у квадратних дужках, розділених комами, наприклад [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])

Щоб відфільтрувати співробітників за посадою, передайте 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 – Цей параметр є обов’язковим, якщо ви хочете отримати бронювання для конкретного клієнта; за замовчуванням використовується client 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

Налаштувати реакцію на колбек можна, вказавши значення в умові блоку:

У блоці можна прописати потрібне зворотне повідомлення клієнту.

Останнє оновлення