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

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

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

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

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

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

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

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

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

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