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

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


