Приходилось сталкиваться с ситуацией, когда клиент пишет «запишите меня на завтра в 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 недели.
Готовы обсудить ваш проект? Получите оценку и рекомендации по интеграции бота в ваше приложение.







