Канал Пользовательский
канал
Настройка Endpoint и добавление канала API
Для создания канала API в BPMSoft:
- Перейдите в раздел «Настройка чатов BPMSoft OCC» в «Дизайнере системы».
-
Нажмите
на детали «Каналы» страницы раздела «Настройка чатов BPMSoft OCC», чтобы добавить новый канал.
Рисунок 1 — Деталь «Каналы»

- В открывшемся окне выберите «Пользовательский канал» и заполните поля.
Рисунок 2 — Окно «Добавление канала API»

Для добавления этого канала введите адрес Пользовательского канала в формате «адрес_custom_channel/Home/InputJSON» (Например, «https://devcustom-customchannel.ru/Home/InputJSON»), который будет принимать ответы операторов и ботов из BPMSoft. После добавлении канала происходит отправка тестового hook на адрес, указанный в форме добавления. Используйте полученный id в запросах к API.
Формат тестового Hook
Таблица 1 — Описание полей тестового Hook
| Name | Description | Data type | Comments |
| id | Идентификатор канала в BPMSoft | Guid | — |
В базе данных коннектора появится запись добавленного Custom Channel. Выполните скрипт для просмотра AppId и ChannelId (Id из таблицы Channel) из таблицы:
select * from Channel as c where c."Type" = 'Custom'; 996902C5-CA62-4C8D-8CBE-C7AED80C2893 - AppId из SQL dev3 [BPMSoftOCC-dev-connector].[dbo].[Channel] EB996270-D3DE-4928-BEB3-5B8EFAC213B2 - Id из SQL dev3 [BPMSoftOCC-file-share].[dbo].[Channel]
Рисунок 3 — Результат выполнения скрипта
На среде, где настроен Custom channel (например, «https://devcustom-customchannel.ru/»), необходимо поменять в C:\папка_приложения_CustomChannel\appsettings.json строку подключения к коннектору:
connectorUrl(адрес_коннектора)/api/v1.0/sendmessage/AppId/channelId
"DefaultURI": "https://devcustom-customchannel.ru/api/v1.0/sendmessage/996902C5-CA62-4C8D-8CBE-C7AED80C2893/EB99627...;,
Рисунок 4 — Замена строки

После завершения настройки прикрепите к добавленному каналу оператора и нажмите кнопку «Актуализировать». Подробнее: Привязка оператора к каналу
Рисунок 5 — Добавление оператора

Отправка сообщения
Для того чтобы сервис мог отправлять сообщения в BPMSoft, необходимо наделить сервис функцией отправки этих сообщений в JSON-формате.
В качестве хоста указывается адрес коннектора, который используется при общении из BPMSoft. Это значение находится в системной настройке BPMSoftOCCOperatoHost.
Параметр type определяет тип отправляемого сообщения: text, image, file, location. Если type == 'text', то поле text должно быть заполнено. Аналогично и для остальных типов.
SendMessage
Таблица 2 — Поля
| Описание | Интерфейс для отправки сообщения в BPMSoft |
| Путь | {HOST}/api/v1.0/sendmessage/{Appid}/{ChannelId} |
| Тип метода | POST |
AppId — секретный ключ.
ChannelId — guid, пришедший в тестовом hook.
Спецификация запроса
Таблица 3 — Описание полей
| Name | Description | Data type | Required | Comments |
| sender | Отправитель | Sender | yes | — |
| message | Сообщение | Messagee | yes | — |
| clientId | Идентификатор пользователя | string | no | — |
Структура класса Sender
Таблица 4 — Структура класса Sender
| Name | Description | Data type | Required | Comments |
| id | Идентификатор пользователя (сеанса) | string | yes | — |
| name | Имя пользователя | string | yes | — |
| avatar | Ссылка на аватар пользователя | string | no | — |
Структура класса Message
Таблица 5 — Структура класса Message
| Name | Description | Data type | Required | Comments |
| type | Тип отправляемого сообщения | string | yes | Возможные значения: text, image, file, location |
| text | Текст сообщения | string | — | — |
| attachment | Приложение | Attachment | — | — |
Структура класса Attachment
Таблица 6 — Структура класса Attachment
| Name | Description | Data type | Required | Comments |
| image | Ссылка на изображение | string | — | — |
| location | Местоположение | Location | — | — |
| file | Файл | File | — | — |
Структура класса Location
Таблица 7 — Структура класса Location
| Name | Description | Data type | Required | Comments |
| lat | Широта | string | — | — |
| lng | Долгота | string | — | — |
Структура класса File
Таблица 8 — Структура класса File
| Name | Description | Data type | Required | Comments |
| name | Название файла | string | — | — |
| size | Размер файла | long | — | В байтах. Пока не используется |
| url | Ссылка на файл | string | — | — |
{
"sender":
{
"id": "4",
"name": "Test User",
"avatar":
"{+}https://media.fox9.com/media.fox9.com/photo/2018/03/02/5%20P%20MISSING%20DOG%20FOUND%20DEAD_00.00.06.04_1520042792006.png_5029487_ver1.0_640_360.jpg+"
},
"message":
{
"type": "text",
"text": "Test text"
}
}
Если запрос прошел успешно, то возвращается 200 ОК с телом, например,
{
"ok": true
}
Если прошел с ошибками, то в теле ответа будет указан текст ошибки, например,
{
"ok": false,
"error": "hook.message.attachment.image can't be empty"
}
Получение сообщений
Для получения сообщений из BPMSoft необходимо реализовать сервис, принимающий POST запросы. В теле POST запроса — JSON с информацией о полученном сообщении.
На данный момент поддерживается несколько типов сообщений: с кнопками, без кнопок, файл, картинка, местоположение. Тип указан в параметре type. В случае, если тип сообщения — кнопочное, оно может также содержать текст, который идет перед кнопками.
Спецификация запроса
Таблица 9 — Спецификация запроса
| Name | Description | Data type | Comments |
| channel_id | Идентификатор канала в BPMSoft | string | — |
| receiver_id | Идентификатор пользователя, который получает сообщение в канале | string | — |
| type | Тип присылаемого сообщения | string | text, buttons, file, image, location, operator_info |
| content | Присланные кнопки | Content | — |
Структура класса Content
Таблица 10 — Спецификация класса Content
| Name | Description | Data type | Comments |
| text | Текст, идущий перед кнопками | string |
Если тип сообщения файл или картинка, то ссылка на файл или картинку. Если тип сообщения местоположение, то на объект location (Таблица 11) |
| buttons | Тексты кнопок сообщений | string[] | Массив кнопок. Сообщение может содержать несколько кнопок |
| operatorInfo | Информация об операторе | OperatorInfo | Если тип запроса operator_info |
Структура класса Location
Таблица 11 — Спецификация класса Location
| Name | Description | Data type | Comments |
| lat | Latitude | string | — |
| lng | Longtitude | string | — |
Структура класса OperatorInfo
Таблица 12 — Спецификация класса OperatorInfo
| Name | Description | Data type | Comments |
| OperatorPhotoLink | Ссылка на фото оператора | string | — |
| OperatorName | Имя оператора | string | — |
Для корректной работы необходимо возвращать 200 ОК на каждый запрос к вашему Endpoint.
В случае если в настройках канала проставлена галочка «Отправлять информацию об операторе», то при смене оператора будет приходить сообщение с типом operator_info.
{ "channel_id" : "28528776-3130-4C66-E811-08D55CEAB346",
"receiver_id" : "123",
"type" : "text",
"content" :
{
"text" : "test",
"buttons" : []
},
"operatorInfo": ""
}