Продажи через AI-агента

Если в workspace есть товары и хотя бы один из них видим агенту, агент автоматически получает commerce-tools — никакой настройки на стороне агента не требуется. Тот же агент при наличии услуг получает booking-tools, и оба набора работают вместе.

Продажи через AI-агента

Если в workspace есть товары и хотя бы один из них видим агенту, агент автоматически получает commerce-tools — никакой настройки на стороне агента не требуется. Тот же агент при наличии услуг получает booking-tools, и оба набора работают вместе.

LLM-tools

search_products

Поиск по каталогу с фильтрами.

search_products({
  query?: string,
  categorySlug?: string,
  tags?: string[],         // AND-match
  priceMin?: number,       // ₽
  priceMax?: number,       // ₽
  inStock?: boolean,
  sortBy?: 'relevance' | 'price_asc' | 'price_desc' | 'newest',
  limit?: number           // default 20, max 50
})

Поиск идёт по pg_trgm (тот же индекс, что и в админке) — на каталоге 5k+ SKU работает быстро. Видны только товары, доступные этому конкретному агенту в его workspace (учитывает product_agent_visibility).

create_order

Создание заказа прямо из чата.

create_order({
  items: [{ productId: string, variantId?: string, quantity: number }],
  customerEmail?: string,
  customerPhone?: string,
  customerName?: string,
  notes?: string
})

Если в истории сессии уже есть email клиента (например, бот спросил его раньше или клиент сам написал), агент берёт email из истории — не обязательно спрашивать заново. Yookassa-payment создаётся автоматически. Заказ привязывается к workspace, агенту, сессии и (если есть) к лиду CRM.

Маркеры в ответах

Чтобы UI красиво отрендерил результаты, агент использует маркеры в своём ответе. Сервер парсит их и заменяет на нужный UI-компонент.

МаркерЧто рендерится
[[products:id1,id2,id3]]Карусель карточек товаров в чат-окне. На сайте — 4 карточки на страницу с превью/ценой/описанием. В Telegram/VK — нумерованная inline-клавиатура.
[[pay:<orderId>]]Кнопка «💳 Оплатить» под сообщением — клиент кликает и попадает в чекаут (с embedded YooKassa, если она настроена).
[[my-orders]]Сервер резолвит в magic-link на /my?tab=orders с одноразовым кодом по email клиента — клиент видит все свои заказы и брони без логина.
[[my-bookings]]Зеркало [[my-orders]], но для броней. См. Услуги.

Системный промпт агента описывает, когда какой маркер ставить. Это дополняется автоматически — вам не нужно вписывать это в свой prompt.

Защита от вранья (phantom-claim guard)

LLM иногда «убеждена», что вызвала инструмент, хотя на деле нет. Например, написала «Готово, оплачивайте здесь: https://...», но create_order не дёргала. Это вранье клиенту — недопустимо в e-commerce.

Framix решает это в два шага:

  1. Phantom-claim guard. Если в ответе агента есть фраза вида «заказ оформлен / готов к оплате», а в этой сессии не было успешного вызова create_order или маркера [[pay:...]] — сервер подменяет ответ на стандартный текст-извинение, попросив клиента уточнить заказ.
  2. Auto-recover. Если бот поставил [[pay:<orderId>]], но забыл вызвать create_order — сервер пытается восстановить вызов сам (распарсить намерение из истории + дёрнуть create_order ровно с теми параметрами). Если получилось — клиент даже не замечает.

Цель — никаких «заказ создан» без реального заказа в базе.

Где в админке настраивается

/account/agents/[id] → блок «Каталог» или «Продажи»:

  • Какие товары видимы агенту (видимость берётся из product_agent_visibility).
  • Какой merchant_account обслуживает оплаты в чате этого агента (см. Мерчанты).
  • Дополнительные подсказки в системный промпт: «не предлагай товары вне категории X», «всегда уточняй размер при заказе одежды».

Как это выглядит в чате

Пример диалога:

Клиент: есть лёгкие куртки на весну до 8 тыс?

Бот: Нашёл три варианта в твоём бюджете: [[products:p1,p2,p3]]

(UI рисует карусель из 3 карточек)

Клиент: второй, размер M

Бот: Хорошо, оформляю. На какой email прислать подтверждение?

Клиент: kolya@example.com

Бот: Заказ оформлен на 5990 ₽. Оплати по кнопке ниже: [[pay:ord_abc123]]

И ниже сообщения — кнопка «💳 Оплатить». Клиент жмёт, открывается embedded-чекаут YooKassa прямо в чат-виджете или в /checkout/token.

После оплаты — webhook YooKassa, заказ переходит в paid, агент в той же сессии отправляет благодарность и [[my-orders]] для управления.

В Telegram/VK

Карусель [[products:...]] адаптируется в нумерованную inline-клавиатуру — Telegram не умеет горизонтальный скролл картинок. Кнопка [[pay:...]] превращается в обычную ссылку (redirect-режим, embedded в Telegram невозможно).

channelMeta.slotsView определяет рендер для каждого канала — это уже глубокая внутренняя деталь.

Биллинг для агента-продавца

Расход токенов любого вызова LLM (включая вызовы commerce-tools) пишется в ai_token_usage, списывается с баланса owner'а workspace, как обычные диалоги. Плата за сами заказы — обычная комиссия Framix с оборота (см. Мерчанты).

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

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