Chat API
JAICP предоставляет Chat API — REST API для интеграции бота в сторонние приложения. С помощью Chat API вы можете встроить чат с ботом, например, в мобильное приложение, сайт или игру.
Перед началом работы с Chat API необходимо подключить к проекту канал Chat API и получить из настроек канала его токен, который используется в запросах ко всем методам.
Методы API
Отправка запросов клиента в чат
Синхронная отправка
Предоставляются следующие методы для синхронной отправки запроса клиента:
-
Метод возвращает подробную информацию о запросе, в том числе
cid
.Опциональное поле
cid
— идентификатор соединения. Это произвольная строка, определяющая текущее соединение с чат-приложением. Она может быть далее использована при получении событий в чате, чтобы фильтровать только события во время данного соединения. -
Упрощенный метод, который возвращает несколько параметров запроса:
clientId
,query
иevent
.
Асинхронная отправка
Метод POST /chatapi/{token}/async
позволяет асинхронно отправлять запрос клиента или событие в чат-приложении.
В отличие от метода POST /chatapi/{token}
в ответ на запрос вы получите только идентификатор сообщения.
Остальная информация будет отправлена на вебхук, который вы можете указать в настройках канала Chat API.
С обытие будет отправлено на вебхук, если:
- Вы отправили асинхронный запрос.
- Вы провели рассылку.
- Клиент получил ответ от оператора.
- Время ожидания между ответами на запрос было превышено.
На вебхук придет массив JSON-объектов:
{
"token": "token",
"clientId": "test",
"questionId": "12345",
"data": {
"nlpClass": "/CatchAll",
"confidence": -0.010999999999999979,
"replies": [ // Сообщение бота
{
"type": "text",
"text": "Скажите боту что-то осмысленное",
"state": "/CatchAll"
}
],
"answer": "Скажите боту что-то осмысленное",
"newSessionStarted": false,
"debugData": [],
"endSession": false
},
"timestamp": "2022-09-28T12:32:13.262",
"blockForm": false
}
Расширение ответов настраиваемыми полями
Вы можете расширить ответ бота с помощью настраиваемых полей.
Используйте в сценарии объект $response
:
state: Example
script:
$response.foo = "bar";
Поле foo
и другие поля, которые вы зададите, будут доступны в ответе бота как вложенные в поле data
.
Получение асинхронных событий в чате
Метод GET /chatapi/{token}/events
предназначен для получения асинхронных событий от сервера, например:
- Ответ от оператора.
- Изменение состояния виджета на другой странице браузера.
- Запрос клиента, отправленный на другой странице.
- Ответ бота на запрос с другой страницы.
Максимальное количество событий в ответе на запрос — 250. Если нужно обработать больше, используйте метод для получения истории переписки.
Фильтрация событий
Параметр all
данного метода определяет, нужно ли выводить все события в канале или только ответы от оператора (поведение по умолчанию).
cid
метод может возвращать дубликаты сообщений.Параметр ts
задает время, начиная с которого нужно фильтровать события.
При его отсутствии запрашиваются все события с момента последнего обращения к серверу.
Получение истории переписки
Метод GET /chatapi/{token}/client/{clientId}/history
позволяет получить историю переписки с клиентом за указанный период либо за все доступное время.
Сохранение и загрузка состояния чат-приложения
Следующие методы позволяют сохранить и загрузить состояние чат-приложения во время диалога с клиентом:
POST
передается произвольный объект.
Последующий запрос к методу GET
вернет ранее переданный объект.
Его содержимое не проверяется.Управление статусами сообщений
Вы можете просматривать статусы сообщений, которые бот отправил в канале Chat API.
В Chat API поддерживаются следующие статусы сообщений:
Статус | Chat API |
---|---|
Отправлено | SENT |
Доставлено | DELIVERED |
Прочитано | READ |
Не отправлено | NOT_SENT |
Получение статуса сообщения
Метод GET /chatapi/{token}/client/{clientId}/message/{questionId}/status
позволяет получить статус сообщения.
Параметры:
token
— токен канала Chat API. Перейдите в раздел Каналы, выберите канал Chat API и нажмите → Редактировать. Сохраните токен.clientId
— идентификатор клиента. Вы можете найти идентификатор в разделе Аналитика → Клиенты. Выберите клиента и сохраните его ID.questionId
— идентификатор сообщения. Чтобы получить идентификатор, воспользуйтесь методомGET /chatapi/{token}/client/{clientId}/history
.
Обновление статуса сообщения
Метод POST /chatapi/{token}/client/{clientId}/message/{questionId}/status
позволяет изменить статус сообщения.
В теле запроса укажите новое значение для поля status
.
Обновление статусов сообщений
Метод POST /chatapi/{token}/client/{clientId}/message-statuses
позволяет изменить статусы нескольких сообщений.
В теле запроса укажите поле statuses
— массив JSON-объектов.
Получение количества непрочитанных сообщений
Метод GET /chatapi/{token}/client/{clientId}/message-not-read-count
позволяет узнать, сколько сообщений не прочитал клиент.