Запись на услугу через 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.

Связанные разделы

На этой странице