◆ Sapport для разработчиков Справочник API Каталог ошибок OpenAPI
Разделы

#Чат с ИИ-продажником: обзор

Статус: Доступно / Планируется. Виджет одной строкой и клиентский Chat API — Доступно. Серверный API диалогов: чтение — Доступно, запись — Планируется. JS API виджета и параметры виджета v2 — Планируется. Статус каждого способа указан в таблицах ниже.

Назначение: объяснить, что умеет чат с ИИ-продажником, какими тремя способами его встроить в свой сайт, приложение или мессенджер и какой способ выбрать.

#Содержание

  1. Что делает чат
  2. Три способа встроить
  3. Как выбрать
  4. Схема потоков данных
  5. Адреса ячеек
  6. Деньги и пределы
  7. Персональные данные и согласие
  8. Куда читать дальше
  9. Открытые вопросы

#Что делает чат

ИИ-продажник — собеседник на вашем сайте (или в вашем канале), который ведёт посетителя от вопроса к заявке.

ВозможностьКак это работаетСтатус
Отвечает по базе знаний арендатораОтвет строится по материалам, которые вы загрузили в базу знаний своего арендатора, и по настройкам агентаДоступно
Знает, на какой странице находится посетительВиджет передаёт адрес, заголовок и тип страницы; модель получает их в промпте как данные браузера, не как инструкции (Страница, источник и UTM)Доступно
Передаёт разговор операторуОператор в кабинете берёт диалог; пока он ведёт его, ИИ не отвечает. Суточный предел ответов ИИ тоже передаёт диалог оператору. В своём канале запрос на передачу приходит событием conversation.handoff_requestedДоступно (в своём канале — Планируется)
Создаёт лид с атрибуциейКогда в диалоге набирается достаточно сведений, платформа заводит контакт и лид; у лида сохраняется источник визитаДоступно
Принимает файлыИзображения и документы до 10 МБДоступно (с ограничением: клиентский Chat API)
Работает в своём канале (мессенджер, приложение, CRM)Серверный API: вы передаёте реплики клиента, ответ ИИ приходит асинхронно (202 и операция conversation.ai_reply, либо вебхук message.created), реплики оператора приходят вебхукомПланируется

Что чат не делает: не показывает другим посетителям чужие диалоги, не выполняет инструкции, спрятанные в заголовке или адресе страницы, не обещает ответа, если суточный предел ИИ исчерпан (в этом случае диалог переходит к оператору).

#Три способа встроить

Способ 1. ВиджетСпособ 2. Свой интерфейсСпособ 3. Свой канал
СутьОдна строка <script> на странице: кнопка и окно чата готовыВы рисуете чат сами и обращаетесь к клиентскому Chat API из браузера или приложенияВаш сервер вызывает серверный API: клиент общается в вашем мессенджере, ИИ и оператор отвечают через платформу
СтатусДоступноДоступно (с ограничением по CORS, см. ниже)Планируется
Что нужноИдентификатор канала web_chat и домен сайта в списке арендатораИдентификатор канала web_chatКлюч API (права conversations:*, ai_seller:invoke) и канал api, созданный в кабинете вместе с интеграцией; идентификатор канала возвращает GET /me
Ключи и секретыНе нужны. channel_id публиченНе нужны. channel_id публичен; токен сессии выдаёт серверСекретный ключ только на вашем сервере
Кто рисует интерфейсПлатформаВыВы (мессенджер)
ОплатаИз кошелька арендатора за ответы ИИТо жеТо же, с резервированием, предельными тратами и суточным пределом канала api, как у виджета
СтраницаВстраивание виджетаКлиентский Chat APIСерверный API диалогов, руководство

Дополнительно к способу 1 планируется JS API виджета (Sapport.open(), Sapport.on(), identify и др.) — JS API виджета, статус Планируется.

Важно про способ 2. Маршруты клиентского Chat API (messages, history, poll, events, upload) не отдают заголовки CORS. Из браузера они доступны со страниц, которые открыты на домене самой ячейки, а со стороннего домена браузер заблокирует чтение ответа. Рабочие варианты — в разделе «Известные ограничения» страницы про клиентский API.

#Как выбрать

Ваша ситуацияВыбор
Нужен чат на сайте, дизайн не критичен, хватает цвета, приветствия и позицииСпособ 1 (виджет)
Сайт на Bitrix или WordPressМодуль коннектора ставит загрузчик, а он подключает виджет (Загрузчик)
Нужен собственный дизайн чата в приложении или на странице ячейкиСпособ 2 (клиентский Chat API)
Нужен чат в вашем мессенджере, виджете другой системы или сквозной канал со своей CRMСпособ 3 (серверный API; пока проект)
Нужно открывать чат по своей кнопке «Задать вопрос»Сегодня: свой скрипт не может открыть окно виджета (JS API нет) — временные способы. После выхода JS API: Sapport.open()

#Схема потоков данных

#Способ 1. Виджет

 Страница сайта-хозяина                       Ячейка Sapport
 ┌──────────────────────────┐
 │ <script src=…/widget.js  │   POST /api/widget/init (CORS *)
 │   data-channel=…>        │ ───────────────────────────────►  название, цвет, приветствие,
 │                          │ ◄───────────────────────────────  форма перед чатом, согласие
 │  [кнопка 60 px]          │
 │      │ клик              │
 │      ▼                   │   iframe: /widget/<channel_id>?page=…&title=…&ft=…
 │  ┌─────────────────┐     │ ───────────────────────────────►  страница чата (наш домен)
 │  │ iframe 380×560  │     │
 │  │  (наш домен)    │ ─── POST /api/widget/messages ───────►  ИИ-продажник
 │  │                 │ ◄── ответ, session_token ────────────   │  ├─ база знаний
 │  │                 │ ◄── SSE /events (или /poll) ─────────   │  ├─ контакт, лид, атрибуция
 │  └─────────────────┘     │                                    │  └─ оператор в кабинете
 │   ▲ postMessage          │
 │   └ sapport:new-message  │
 │     sapport:close        │
 └──────────────────────────┘

#Способ 2. Свой интерфейс

 Ваш интерфейс (страница на домене ячейки или ваш прокси)    Ячейка Sapport
 ┌──────────────────────┐   POST /api/widget/init            ┌─────────────────┐
 │ ввод, список реплик, │ ──────────────────────────────────►│ канал web_chat  │
 │ индикатор набора     │   POST /api/widget/messages        │ ИИ-продажник    │
 │                      │ ──────────────────────────────────►│ оператор        │
 │ хранит session_token │ ◄── response + session_token       │                 │
 │                      │   GET /history /poll /events       │                 │
 │                      │ ◄──────────────────────────────────│                 │
 └──────────────────────┘                                    └─────────────────┘

#Способ 3. Свой канал (Планируется)

 Клиент ──► ваш мессенджер ──► ваш сервер                      Ячейка Sapport
                                  │  POST /conversations          ┌────────────────────┐
                                  │  POST …/messages              │ канал «api»        │
                                  │  (Idempotency-Key, Bearer)    │ ИИ-продажник       │
                                  │ ─────────────────────────────►│ оператор           │
                                  │ ◄── 202 + operation ──────────│ кошелёк арендатора │
                                  │     (GET /operations/{id})    │                    │
                                  │ ◄── вебхук message.created ───│ outbox → доставка  │
                                  │     (ответ ИИ, ответ оператора)└────────────────────┘
 Клиент ◄── ваш мессенджер ◄──────┘

#Адреса ячеек

Три независимые ячейки. Каналы, ключи и данные принадлежат одной ячейке; используйте адрес той, где заведён ваш арендатор (Ячейки и данные).

ЯчейкаБазовый адрес
RUhttps://formula-cream.pro
ENhttps://wfacademy.org
IDhttps://wfacademy.id

Скрипт виджета: https://<домен ячейки>/widget.js. Клиентский Chat API: https://<домен ячейки>/api/widget/…. Серверный API: https://<домен ячейки>/api/public/v1.

#Деньги и пределы

Подробные таблицы — на странице Клиентский Chat API.

#Персональные данные и согласие

#Куда читать дальше

ЗадачаСтраница
Поставить виджет, настроить внешний вид, скопировать готовый блокВстраивание виджета
Управлять виджетом из кода страницы (открыть, отправить, подписаться на события)JS API виджета (Планируется)
Понять, откуда лид и на какой странице был клиентСтраница, источник и UTM
Построить свой интерфейс чатаКлиентский Chat API
Управлять диалогами с сервераСерверный API диалогов (чтение — Доступно, запись — Планируется)
Подключить свой мессенджерИИ-продажник в своём канале (Планируется)
Работать с ошибками, повторами, пределамиСоглашения
Получать события вместо опросаВебхуки

Готовые файлы для копирования лежат в каталоге examples/.

#Открытые вопросы