Чатбот для онлайн-бронювання
Загальна інформація
Чат-бот для онлайн-бронювання — це набір функцій конструктора воронок, які дають змогу автоматизувати процес запису на послуги для вашої компанії.
Робота бота ґрунтується на послідовному виконанні функцій: отриманні даних для відображення клієнту, а потім передаванні цих даних далі для запуску нових функцій і отримання нових результатів.
Коли клієнт рухається воронкою, у кожен наступний блок слід передавати лише ті дані, що відповідають вибору клієнта, — використовуйте ці дані для налаштування наступних викликів функцій.
Завдяки можливості отримувати проміжні дані (наприклад, посади співробітників і категорії послуг) та передавати їх далі для фільтрації співробітників і послуг, ви можете гнучко налаштувати свою воронку й дати клієнту контроль над етапами її проходження.
Усі методи, описані в цій статті, повертають масив словників.
Для зручної роботи з ними рекомендуємо переглянути розділи Масиви і Словники.
Також, щоб використовувати функцію для формування дій користувача (вибір послуги, дати, бронювання), радимо звернути увагу на метод 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. Початок. Жодних спеціальних дій не потрібно
Блок №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
Налаштувати реакцію на колбек можна, вказавши значення в умові блоку:

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