Интеграция с операторской платформой
В этом примере показана интеграция операторской платформы с JAICP. Операторская платформа включает 2 компонента:
- Приложение для чатов, которое уже имеет интеграцию с разными каналами. Это приложение будет взаимодействовать с JAICP с помощью Chat API. Например, оно будет передавать сообщения пользователя в бота и отслеживать события в чате JAICP.
- Операторское приложение, которое будет взаимодействовать с JAICP по Operator API. Например, оно будет сообщать о доступных группах операторов и отправлять ответы операторов в JAICP. Операторское приложение должно быть связано с веб-сервером, который может отвечать на запросы Operator API.
-
Пользователь пишет в любой канал: мобильное приложение, мессенджер и т. д.
-
Приложение для чатов в вашей операторской платформе уже должно иметь интеграцию со всеми этими каналами. Запрос пользователя приходит в ваше приложение.
-
Приложение для чатов передает запрос в бота JAICP с помощью Chat API.
-
Бот обрабатывает запрос пользователя. При необходимости бот обращается к внешним ресурсам, например, к CRM или BI-системам.
Возможности бота
-
Далее возможны два сценария:
-
Перевод на оператора не требуется:
- Бот отправляет ответ в приложение для чатов.
- Приложение отправляет ответ пользователю в исходном канале.
-
Бот переводит диалог на оператора:
- Бот инициирует перевод на оператора через Operator API.
- Оператор получает сообщения через Operator API и отправляет ответы в бота.
-
Подготовка
-
Настройте интеграцию с Operator API:
- Создайте веб-сервер, который сможет отвечать на запросы Operator API.
- Подключите канал Operator API и получите вебхук, через который операторское приложение будет отправлять события в JAICP.
подсказкаСмотрите инструкции в статье Operator API.
-
Создайте канал Chat API. В поле Оператор выберите Operator API.
Обработка запроса через бота
-
Пользователь отправляет вопрос в канале, например, в мессенджере:
По какому графику вы работаете?
. Запрос передается в ваше приложение для чатов. -
Приложение для чатов отправляет запрос в бота через Chat API, например с помощью метода
POST /chatapi/{token}
:curl -X POST "https://bot.jaicp.com/chatapi/abcd:123456789" \
-H "Content-Type: application/json" \
-d '{
"query": "По какому графику вы работаете?",
"clientId": "user123"
}'подсказкаЗапрос в бота также можно отправить с помощью других методов:
GET /chatapi/{token}
илиPOST /chatapi/{token}/async
. -
Бот обрабатывает запрос пользователя. Приложение для чатов получает ответ на запрос
POST /chatapi/{token}
— объектBotResponse
:{
"token": "abcd:123456789",
"clientId": "user123",
"questionId": "aaaaaaaa-1234-5678-9000-000000000000",
"data": {
"replies": [
{
"type": "text",
"text": "Мы работаем ежедневно с 09:00 до 18:00",
"state": "/WorkHours",
"lang": "ru"
}
],
"answer": "Мы работаем ежедневно с 09:00 до 18:00",
"newSessionStarted": true,
"transitionHistory": [
"/WorkHours"
],
"isNewClient": true,
"endSession": false
},
"timestamp": "2024-12-26T14:54:59.966",
"blockForm": false
} -
Приложение для чатов отправляет сообщение пользователю в мессенджер.
Обработка запроса с переводом на оператора
Шаг 1. Перевод на оператора
-
Пользователь отправляет запрос в канале, например, в мессенджере:
Хочу говорить с оператором
. Запрос передается в ваше приложение для чатов. -
Приложение для чатов отправляет запрос в бота через Chat API, например с помощью метода
POST /chatapi/{token}
:curl -X POST "https://bot.jaicp.com/chatapi/abcd:123456789" \
-H "Content-Type: application/json" \
-d '{
"query": "Хочу говорить с оператором",
"clientId": "user123"
}'подсказкаЗапрос в бота также можно отправить с помощью других методов:
GET /chatapi/{token}
илиPOST /chatapi/{token}/async
. -
Бот обрабатывает запрос и переводит диалог на оператора с помощью типа ответа
switch
. При этом в параметреcloseChatPhrases
должны быть указаны команды, с помощью которых пользователь сможет прекратить диалог с оператором и вернуться к диалогу с ботом:$response.replies.push({
"type": "switch",
"closeChatPhrases": ["/closeChat", "Закрыть диалог"]
});
Шаг 2. Выбор оператора
-
Бот через Operator API пытается получить список доступных групп операторов. Он отправляет на ваш веб-сервер запрос
GET {apiUrl}/getDestinations
. -
В ответе на запрос
GET {apiUrl}/getDestinations
ваше операторское приложение передает список доступных групп:{
"destinations":[
{
"destinationId":"1",
"name":"Группа операторов 1",
"hasOnline":true
},
{
"destinationId":"2",
"name":"Группа операторов 2",
"hasOnline":false
}
]
} -
Бот выбирает группу операторов. Он отправляет запрос
POST {apiUrl}/selectDestination
на ваш веб-сервер. -
Бот передает сообщение пользователя и данные о пользователе. Бот отправляет запрос
POST {apiUrl}/sendText
на ваш веб-сервер. -
Операторское приложение передает диалог оператору.
Шаг 3. Диалог с оператором
-
Оператор отправляет ответ с помощью запроса
POST /chatapi/webhook/operatorapi/{apiKey}
. Этот запрос нужно отправлять на вебхук JAICP, который вы получили при подключении канала Operator API.curl -X POST "http://bot.jaicp.com/chatapi/webhook/operatorapi/1234567-test-1234567-ABC-987654" \
-H "Content-Type: application/json" \
-d '{
"id": "12345",
"userId": "user123",
"type": "TextMessage",
"text": "Здравствуйте! Все верно, работаем каждый день с 09:00 до 18:00",
"employee": {
"employeeId": "agent1",
"firstName": "Ivan",
"lastName": "Ivanov",
"avatarUrl": "http://example.com/avatar.png"
}
}' -
Приложение для чатов запрашивает события чата с помощью
GET /chatapi/{token}/events
. Это позволяет приложению синхронизироваться с JAICP и убедиться, что ответ от оператора можно отправить в канал пользователю.curl -X GET "https://bot.jaicp.com/chatapi/abcd:123456789/events?clientId=user123&ts=2024-12-27T13:53:30.250"
-
Бот отправляет события чата в ваше приложение для чатов. Далее приложение извлекает ответ оператора из полученных данных:
{
"hasMore": false,
"events": [
{
"timestamp": 0,
"type": "humanResponse",
"event": {
"token": "abcd:123456789",
"clientId": "user123",
"questionId": "aaaaaaaa-1234-5678-9000-000000000001",
"data": {
"answer": "Здравствуйте! Все верно, работаем каждый день с 09:00 до 18:00"
},
"timestamp": "2024-12-27T13:56:53.371",
"blockForm": false,
"status": "SENT"
}
},
…
]
} -
Приложение для чатов отправляет ответ от оператора пользователю в мессенджер.
Далее пользователь может продолжать общаться с оператором. При этом будет следующая последовательность запросов:
Шаг 4. Завершение диалога с оператором
-
Пользователь отправляет запрос в канале, например, в мессенджере:
Закрыть чат
. Запрос передается в ваше приложение для чатов. -
Приложение для чатов отправляет запрос в бота через Chat API, например, с помощью метода
POST /chatapi/{token}
:curl -X POST "https://bot.jaicp.com/chatapi/abcd:123456789" \
-H "Content-Type: application/json" \
-d '{
"query": "Закрыть чат",
"clientId": "user123"
}' -
Бот обрабатывает запрос и определяет, что нужно закрыть чат с оператором. Бот отправляет запрос
POST {apiUrl}/closeChat
на ваш веб-сервер.
Следующие запросы от пользователя будут обрабатываться только через бота, пока пользователь опять не попросит перевести диалог на оператора.
Оператор может сам завершить диалог:
-
Оператор отправляет в бота запрос
POST /chatapi/webhook/operatorapi/{apiKey}
с типомClosed
. -
Приложение для чатов получает это событие с помощью
GET /chatapi/{token}/events
.