Продажи через 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 решает это в два шага:
- Phantom-claim guard. Если в ответе агента есть фраза вида «заказ оформлен / готов к оплате», а в этой сессии не было успешного вызова
create_orderили маркера[[pay:...]]— сервер подменяет ответ на стандартный текст-извинение, попросив клиента уточнить заказ. - 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 с оборота (см. Мерчанты).