Запись на услугу через AI-агента
LLM-tools для броней, как агент выбирает слот в чате, виджет day-picker, маркер «мои записи».
Запись на услугу через AI-агента
Если в workspace есть услуги и они видимы агенту (service_agent_visibility), агент автоматически получает booking-tools — никакой настройки не нужно. Эти tools комбинируются с commerce-tools: один и тот же агент может в одном диалоге и продать товар, и записать на массаж.
LLM-tools
search_services
Поиск по каталогу услуг с фильтрами.
search_services({
query?: string,
tags?: string[],
categorySlug?: string,
limit?: number // default 20
})
Возвращает только услуги, доступные этому конкретному агенту в workspace (учитывает service_agent_visibility + isActive).
get_available_slots
Получение свободных слотов на диапазон дат.
get_available_slots({
serviceId: string,
from: string, // ISO date, max 14 дней до to
to: string, // ISO date
resourceId?: string // конкретный мастер (если хочет клиент)
})
- Max 14-дневный диапазон в одном запросе.
- До 30 слотов в ответе.
- Учитывает lead-часы, horizon-дни, capacity, buffer'ы, time-off — всё, что и публичный slot-picker.
book_appointment
Создание брони.
book_appointment({
serviceId: string,
startAt: string, // ISO datetime UTC
customerName: string,
customerEmail?: string, // нужен один из контактов
customerPhone?: string,
resourceId?: string,
notes?: string
})
Если услуга платная — агент получает в ответ ссылку на чекаут, отдаёт её клиенту через маркер [[pay:<orderId>]]. Если бесплатная — бронь сразу confirmed, агент пишет «всё, ждём вас 25 марта в 15:00».
В feedback'е модели документированы коды ошибок (slot_taken, too_soon, contacts_required и т.д.) с инструкцией, как объяснить клиенту и что делать дальше. Цель — чтобы модель сама перестраивала диалог при ошибке, а не сваливала «техническую» формулировку клиенту.
Маркеры
| Маркер | Что рендерится |
|---|---|
[[my-bookings]] | Magic-link на /my?tab=bookings с одноразовым кодом по email клиента. Зеркало [[my-orders]]. |
[[pay:<orderId>]] | Кнопка «💳 Оплатить» — для платной брони (см. commerce/agent-selling). |
Day-picker в чате
Чтобы клиент мог быстро выбрать время, виджет агента поддерживает специальный режим day-picker:
- Карусель дней (горизонтальный скролл) — каждый день: число + день недели + статус (свободно/занято).
- Список времён выбранного дня.
- Клик по времени → подсвечивает + появляется плашка «Подтвердить запись на 15:00». Никакого автосенда — клиент должен явно подтвердить.
В Telegram/VK картинка горизонтального скролла не поддерживается, поэтому слоты рендерятся как inline-keyboard с callback'ами: ряд кнопок «25.03 →», «26.03 →», по клику — кнопки времён.
Промпт-блок
При наличии активных видимых услуг агенту автоматически добавляется блок в системный промпт с описанием доступных tools и правилами:
- собирать email или телефон до вызова
book_appointment(иначе ошибка); - предлагать ближайший слот сразу, не показывать «полотно» из 30 вариантов;
- честно сообщать о платных услугах: «Это запись на массаж за 4000 ₽ — оформим оплату сейчас или хотите по карте на месте?» (зависит от
requiresPaymentиprepaymentPercent).
Это дополняется автоматически — вам не нужно прописывать это в свой prompt.
Пример диалога
Клиент: хочу к массажисту на этой неделе вечером
Бот: Ок, у нас есть три варианта на ближайшие три дня:
- вт 18:00 — Маша
- ср 19:00 — Маша
- чт 18:30 — Аня
Какой подходит?
Клиент: ср 19:00
Бот: Записываю на среду 19:00 к Маше. На какое имя оформить и контакт для подтверждения?
Клиент: Николай, +7 999 ...
Бот: Готово. Часовой массаж, 4000 ₽. Оплачивайте по кнопке ниже — после оплаты бронь будет подтверждена. [[pay:ord_xyz]]
После оплаты клиенту приходит email с cancel-токеном; бронь в админке /account/bookings появляется в статусе confirmed.