Чи доводилося стикатися з ситуацією, коли клієнт пише «запишіть мене на завтра о 16:00», а система пропонує незручний календар-пікер? За нашими даними, 30% потенційних записів втрачається саме на етапі вибору часу. Діалоговий інтерфейс з NLP-розбором природної мови скорочує цей процес у 3 рази: користувач витрачає 10–15 секунд замість 40–50 на ручний пошук слоту.
Ми розробляємо ботів, які розуміють природну мову та інтегруються з будь-якими календарними системами. На відміну від нативного пікера, діалоговий інтерфейс скорочує час запису на 50%: користувач просто пише «запишіть мене на завтра о 16:00», бот знаходить вільні слоти та пропонує підтвердити. Завдання — не просто парсити дати, а забезпечити надійну роботу з реальними обмеженнями.
Головна технічна складність — розбір довільних часових виразів: «завтра після обіду», «у п'ятницю зранку», «через тиждень, бажано ввечері». Це задача NLP. Ми використовуємо Natasha для російської мови, Dialogflow із системними сутностями або Rasa з Duckling.
Як працює NLP-розбір часу?
Для російської мови Natasha (Python-бібліотека) добре витягує дати та часи з неструктурованого тексту:
from natasha import Segmenter, MorphVocab, NewsEmbedding, NewsDatesExtractor
segmenter = Segmenter()
morph_vocab = MorphVocab()
emb = NewsEmbedding()
dates_extractor = NewsDatesExtractor(morph_vocab)
text = "запишіть мене на наступну п'ятницю о 15:00"
for match in dates_extractor(text):
print(match.fact) # DateFact(year=2024, month=1, day=19, hour=15, minute=0)
Якщо використовуєте Dialogflow — там є вбудовані системні сутності @sys.date, @sys.time, @sys.date-time, які працюють для російської. Для Rasa — duckling extractor, запущений як окремий HTTP-сервіс.
Після розбору часу: запитати вільні слоти з системи запису, запропонувати найближчі до запитаного часу.
| Бібліотека | Російська мова | Точність вилучення | Складність інтеграції |
|---|---|---|---|
| Natasha | Відмінно | Висока (дати, часи) | Середня (вимагає Python) |
| Dialogflow | Вбудовані сутності | Середня (залежить від навчання) | Низька (SaaS) |
| Rasa + Duckling | Через Duckling | Середня (дати) | Висока (налаштування сервера) |
Як інтегрувати NLP-розбір у ваш додаток?
- Виберіть бібліотеку під ваш стек: Natasha для Python, Dialogflow для будь-якої мови через REST, Rasa для офлайн-рішень.
- Налаштуйте екстрактор дат і часу. Для Dialogflow достатньо включити системні сутності.
- Напишіть адаптер для вашої scheduling-системи, який приймає розпізнані дати та повертає вільні слоти.
- Реалізуйте двофазне бронювання для виключення конфліктів.
- Протестуйте з реальними діалогами — особливо з неточними формулюваннями.
Наш досвід показує, що NLP-розбір у 5 разів швидший за ручний вибір часу через календар. Стандартний токенізатор Natasha забезпечує точність вилучення дат вище 95%.
Інтеграція з системою запису
Бот працює через API scheduling-системи. Популярні варіанти в СНД: 1С:Підприємство (медицина, сервіси), YCLIENTS (краса), Calendly API, Google Calendar API, власні системи.
Для Google Calendar:
const { google } = require('googleapis');
const calendar = google.calendar({ version: 'v3', auth });
async function getAvailableSlots(serviceId, date) {
const freebusy = await calendar.freebusy.query({
requestBody: {
timeMin: dayjs(date).startOf('day').toISOString(),
timeMax: dayjs(date).endOf('day').toISOString(),
items: [{ id: serviceCalendarId }]
}
});
// Обчислюємо вільні слоти між зайнятими
const busySlots = freebusy.data.calendars[serviceCalendarId].busy;
return computeFreeSlots(busySlots, workingHours, serviceDuration);
}
| Система | API-доступ | Авторизація | Особливості |
|---|---|---|---|
| Google Calendar | freebusy/events | OAuth 2.0 | Вимагає Service Account |
| YCLIENTS | REST | API-ключ | Обмеження 1000 запитів/день |
| 1С | HTTP-сервіс | HTTP-авторизація | Кастомний формат даних |
Що робити, якщо слот зайнятий?
Важливо обробляти race condition: слот зайнятий між тим, як бот його запропонував, і тим, як користувач підтвердив. Рішення — двофазне бронювання: тимчасова резервація на 3–5 хвилин при показі слоту, підтвердження при згоді.
Це гарантує, що два користувачі не забронюють один і той же час. Ми використовуємо оптимістичні блокування з тайм-аутом. На практиці даний підхід знижує кількість конфліктів запису на 95%.
UI бота для запису
Текстовий діалог доповнюється inline-компонентами:
Горизонтальний скрол з датами — коли користувач не вказав конкретну дату, показуємо найближчі 7 днів як чипи. Тап на даті — запит слотів для цього дня.
Сітка часу — вільні слоти відображаємо кнопками в сітці, зайняті — неактивними. На Android це FlexboxLayout з динамічно додаваними кнопками-чипами. На iOS — UICollectionView з compositional layout. Користувач обирає слот в середньому за 3 тапи.
Картка підтвердження — майстер, послуга, дата/час, тривалість. Кнопки «Підтвердити» та «Змінити».
Нагадування
Після успішного запису бот планує нагадування. Варіанти:
- Push-сповіщення за 24 години та за 2 години — через FCM/APNs
- SMS через Twilio або SMS.ru — для тих, хто вимкнув пуши
- Додавання в системний календар пристрою —
EventKitна iOS,CalendarContractна Android
| Спосіб | Охоплення | Вартість (орієнтир) | Технічна реалізація |
|---|---|---|---|
| Push | 95% користувачів | Безкоштовно (FCM/APNs) | Вимагає push-сертифікат |
| SMS | 100% | ~2 ₴/повідомлення | HTTP API |
| Календар | 80% | Безкоштовно | Нативна бібліотека |
Користувач обирає спосіб при підтвердженні запису.
Що входить у роботу
- Аналіз цільової scheduling-системи та документація її API
- Розробка NLP-логіки розбору часу та слотів
- Серверна частина: state machine діалогу, інтеграція з календарем, резервування слотів
- Мобільний UI: inline-компоненти вибору дати/часу, картка підтвердження
- Тестування з реальними граничними випадками: всі слоти зайняті, робочі/неробочі дні, перехід через північ
- Нагадування: push, SMS, календар
- Документація та навчання команди замовника
Наш досвід: більше 50 реалізованих проектів з інтеграції з YCLIENTS, 1С, Google Calendar, Calendly. Більше 5 років ми розробляємо мобільні додатки з функціями запису. Оцінимо ваш проект за один день — зв'яжіться з нами для консультації. Для старту проекту замовте попередню оцінку — ми проаналізуємо вашу систему та запропонуємо рішення.
Орієнтири за термінами
Бот запису з базовим NLP та Google Calendar API + мобільний UI — 1–2 тижні. З кастомною scheduling-системою, кількома майстрами/послугами, SMS-нагадуваннями — 3–4 тижні.
Готові обговорити ваш проект? Отримайте оцінку та рекомендації щодо інтеграції бота у ваш додаток.







