Chat API
Краткое руководство по ChatAPI.
- Соглашения
- Управление адаптерами
- Список адаптеров
- Создание адаптера
- Редактирование адаптера
- Удаление адаптера
- Каналы чатов
- Список каналов
- Подключение адаптера
- Список подключений
- Создание подключения
- Изменение подключения
- Удаление подключения
- Chat API
- Аутентификация адаптера в Chat API
- Методы Chat API
- Обратные вызовы
- Работа с каналом типа
waba
- История изменений
Соглашения
- Личный кабинет - веб-приложение находящееся в домене go.comagic.ru или go.uiscom.ru
- Рабочее место оператора (РМО) - приложение, позволяющее сотрудникам вести диалоги с клиентами.
- Адаптер - пользовательский сервис реализующей при помощи вызовов методов Chat API и обработки обратных вызовов собственную реализацию РМО.
- Канал чатов - подключенный канал чатов (Чат на сайте, Telegram, Viber, и т.д.) в аккаунте клиента.
- Аккаунт адаптера - подключение адаптера клиентом личного кабинета
- Канал адаптера - подключение канала чата в адаптере
- Обратный вызов - HTTP-запрос, который ChatAPI отправляет адаптеру в случае изменения сущностей, происходящих без непосредственного участия самого адаптера (например создание чата или отправка сообщения посетителем, отправка системных сообщений и прочее).
Управление адаптерами
Для начала работы необходимо зарегистрировать интеграционный адаптер. Это можно сделать ~~через личный кабинет, либо~~ отправив запрос в основной API чатов, доступный по адресу https://chats-prod-logic.uiscom.ru/. Доступ к API имеют только авторизованные пользователи личного кабинета. Для получения аутентификационного токена необходимо отправить запрос
POST https://go.uiscom.ru/api/auth/json_rpc?method=login
{
"jsonrpc": "2.0",
"id": "0",
"method": "login",
"params": {
"login": "username",
"password": "password",
"project":"uis2" # uis2 если для входа используется go.uiscom.ru
# comagic если для входя используется go.comagic.ru
}
}
Аутентификация запросов в основном API чатов выполняется с использованием токена, переданного в заголовке.
POST https://chats-prod-logic.uiscom.ru/v1/
Authorization: Bearer <token>
Адаптер в API представлен сущностью Adapter
{
"id": 0,
"type": "string",
"name": "string",
"status": "active",
"supported_channel_types":
"comagic",
"telegram",
"auto_ru",
"avito",
"realty_yandex",
"facebook",
"viber",
"telegram_private",
"whatsapp",
"instagram",
"vkontakte_groups",
"waba",
"sms"
],
"owner": 0,
"visibility_status": "private",
"login": "string",
"password": "string",
"webhook_url": "string",
"webhook_version": "string",
"webhook_token": "string",
"webhook_auth": {
"type": "Bearer",
"token": "string",
},
"webhook_kwargs": {}
}
Название параметра | Тип | Описание |
---|---|---|
id |
int |
Идентификатор адаптера |
type |
str |
Уникальная мнемоника адаптера, соответствует регулярному выражению ^[a-z0-9_]+$
|
name |
str |
Название адаптера |
status |
enum |
Статус адаптера. Допустимые значения: active , disabled
|
supported_channel_types |
enum |
Список мнемоник каналов. Допустимые значения: comagic , telegram , auto_ru , avito , realty_yandex , facebook , viber , telegram_private , whatsapp , instagram
|
owner |
int |
Идентификатор владельца адаптера. Может принимать значение null , в этом случае адаптер является системным |
visibility_status |
enum |
Статус видимости адаптера, для пользовательских адаптеров принимает только значение private
|
login |
str |
Логин для авторизации адаптера |
password |
str |
Пароль для авторизации адаптера |
webhook_url |
str |
Адрес для обратных вызовов из Chat API |
webhook_version |
str |
Версия обратных вызовов. Доступные версии: v1 , v2 ; по-умолчанию используется версия v1 . |
webhook_token |
str |
Токен для аутентификации Chat API используемый для обратных вызовов. Не допускается совместное использование с webhook_auth . |
webhook_auth |
object |
Конфигурация аутентификации Chat API для обратных вызовов. Не допускается совместное использование с webhook_token . |
webhook_kwargs |
dict[str, Any] |
Ассоциативный массив с дополнительными аргументы для обратных вызовов. Допустимые ключи timeout со значением типа float , для управления временем ожидания ответа от адаптера; ассоциативный массив дополнительных заголовков headers , вида {"name": "value"}
|
Объект webhook_auth
задает способ аутентификации для обратных вызовов. Позволяет использовать аутентификацию с токеном:
{
"type": "Bearer",
"token": "string"
}
либо c парой логин-пароль
{
"type": "Basic",
"login": "string",
"password": "string"
}
Список адаптеров
GET /v1/integration/adapter
Возвращает список сущностей типа Adapter
, среди которых возвращаются как адаптеры,
добавленные пользователями, так и системные адаптеры. Отличительной особенностью
системных адаптеров является значение null
в атрибуте owner
. Управлять системными
адаптерами запрещено.
Создание адаптера
POST /v1/integration/adapter
{
"type": "string",
"name": "string",
"login": "string",
"password": "string",
"webhook_url": "string",
"webhook_token": "string",
"webhook_auth": {
"type": "Bearer",
"token": "string",
},
"supported_channel_types": [
"comagic",
"telegram",
"whatsapp"
],
}
В результате возвращается сущность Adapter
Редактирование адаптера
PATCH /v1/integration/adapter/{adapter_id}
{
"name": "string",
"login": "string",
"password": "string",
"status": "active",
"webhook_url": "string",
"webhook_token": "string",
"webhook_auth": {
"type": "Bearer",
"token": "string",
},
"webhook_kwargs": {},
"supported_channel_types": [
"comagic"
]
}
Метод позволяет менять следующие атрибуты сущности: name
, login
, password
, status
, webhook_url
, webhook_token
, webhook_auth
, supported_channel_types
.
Удаление адаптера
DELETE /v1/integration/adapter/{adapter_id}
Адаптер можно удалить только в том случае, если он не используется.
Каналы чатов
Сущность Channel
представляющая подключенный канал чатов в аккаунте клиента.
{
"id": 0,
"type": "comagic",
"name": "string",
"is_removed": true,
"status": "string",
"status_reason": "string"
}
Название параметра | Тип | Описание |
---|---|---|
id |
int |
Идентификатор канала |
type |
enum |
Мнемоника канала |
name |
str |
Название канала |
is_removed |
bool |
Флаг логического удаления |
status |
enum |
Статус |
status_reason |
str |
Причина смены статуса |
Список каналов
GET /v1/integration/channel
Возвращает список сущностей типа Channel
.
Подключение адаптера
Подключение адаптера представлено сущностью Account
.
{
"name": "string",
"adapter_id": 0,
"channels": [
0
],
"context": {},
"id": 0,
"status": "string"
}
Название параметра | Тип | Описание |
---|---|---|
id |
int |
Идентификатор аккаунта |
adapter_id |
int |
Идентификатор адаптера |
name |
str |
Название аккаунта |
channels |
list[int] |
Список идентификаторов каналов |
context |
dict[str, Any] |
Ассоциативный массив с дополнительными параметрами. Допустимые ключи: is_chat_integration_scenario_created со значение булева типа, позволяет управлять автоматическим прикреплением сценария "Переадресация в CRM" для подключаемых каналов |
status |
enum |
Статус подключения. Допустимые значения active , disabled
|
Список подключений
GET /v1/integration/account
Возвращает список сущностей типа Account
.
Создание подключения
POST /v1/integration/account
{
"name": "string",
"adapter_id": 0,
"channels": [
0
],
"context": {}
}
Изменение подключения
PATCH /v1/integration/account/{account_id}
{
"name": "string",
"channels": [
0
],
"context": {}
}
Метод позволяет изменять следующие атрибуты сущности: name
, channels
, context
.
Удаление подключения
DELETE /v1/integration/account/{account_id}
Chat API
Сервис доступен по адресу https://chat-integration-api-prod.uiscom.ru/
Сущности
Account
- представляет подключение адаптера клиентом.
{
"id": 0,
"name": "string",
"adapter_id": 0,
"client_id": 0,
"context": {},
"status": "active"
}
Название параметра | Тип | Описание |
---|---|---|
id |
int |
Уникальный идентификатор аккаунта |
name |
str |
Название аккаунта |
adapter_id |
int |
Идентификатор адаптера |
client_id |
int |
Идентификатор внутренней сущности, всегда принимает значение 1
|
context |
dict[str, Any] |
Дополнительные параметры, всегда содержит ключ app_id с идентификатором клиента, подключившего адаптер |
status |
enum |
Статус адаптера. Возможные значения active , disabled
|
Channel
- представляет подключение канала чата в аккаунте.
{
"id": 0,
"name": "string",
"type": "comagic",
"account_id": 0,
"context": {},
"status": "active"
}
Название параметра | Тип | Описание |
---|---|---|
id |
int |
Уникальный идентификатор канала |
account_id |
int |
Уникальный идентификатор аккаунта |
name |
str |
Название канала |
type |
enum |
Мнемоника канала чатов. Возможные значения comagic , telegram , auto_ru , avito , realty_yandex , facebook , viber , telegram_private , whatsapp , instagram
|
context |
dict[str, Any] |
Дополнительные параметры. Всегда содержит ключи app_id с уникальным идентификатором клиента, выполнившего подключение, а так же chat_channel_id - уникальный идентификатор подлюченного канала чатов |
status |
enum |
Статус канала. Возможные значения active , disabled
|
Аутентификация адаптера в Chat API
Все запросы к Chat API должны содержать заголовок Authorization
:
Authorization: Bearer <token>
Для получения токена адаптер должен выполнить запрос:
POST /v1/adapter/login
Content-Type: application/x-www-form-urlencoded
username={adapter_login}&password={adapter_password}
Ответ будет содержать токен, тип и unix-timestamp указывающий на окончание времени жизни токена:
{
"access_token": "string",
"token_type": "bearer"
"expires_at": 0,
}
По истечении времени жизни токена требуется повторить процедуру аутентификации.
Методы Chat API
Создание чата
Создание чата из адаптера возможно только для каналов, позволяющих начать коммуникацию первым.
В данный момент только канала чата с мнемоникой whatsapp
поддерживает такую функцию.
POST /v1/adapter/chat
{
"account_id": 0,
"channel_id": 0,
"visitor_phone": "string",
"operator_id": 0,
"initiator": "operator",
"created_at": "2023-01-01T00:00:00.000Z"
}
Описание сущности Chat
Название параметра | Тип | Описание |
---|---|---|
account_id |
int |
Идентификатор аккаунта |
channel_id |
int |
Идентификатор канала |
operator_id |
int |
Идентификатор оператора. Оператор должен быть заведен в личном кабинете и иметь соответствующие привилегии |
initiator |
enum |
Мнемоника инициатора. Возможные значения: operator , visitor , autoinvite , chat_channel . Допустимые значения: operator
|
visitor_phone |
str |
Номер телефона пользователя, с которым будет вестись диалог |
created_at |
str |
Дата и время в формате ISO 8601
|
В ответе вернется отправленная сущность с атрибутами chat_id
, являющимся идентификатором обращения, и visitor_id
, являющимся идентификатором пользователя с которым ведется диалог. Оба параметра в дальнейшем должны использоваться при отправке сообщений в чат.
Завершение чата
POST /v1/adapter/chat/close
{
"context": {},
"account_id": 0,
"channel_id": 0,
"chat_id": 0,
"operator_id": 0,
"reason": "closed_by_timeout"
}
Название параметра | Тип | Описание |
---|---|---|
reason | enum |
Причина завершения. Возможные значения: closed_by_timeout , invite_rejected , closed_by_operator , closed_by_visitor , visitor_banned , external_window_closed , visitor_disconnected , visitor_session_expired , closed_by_scenario . Допустимые значения: closed_by_operator
|
operator_id | int |
Идентификатор оператора. Параметр является опциональным, необходимо передавать его, если в значении параметра reason передается closed_by_operator
|
Трансфер чата
POST /v1/adapter/chat/transfer
{
"context": {},
"account_id": 0,
"channel_id": 0,
"chat_id": 0,
"from_operator_id": 0,
"to_operator_id": 0
}
Название параметра | Тип | Описание |
---|---|---|
from_operator_id | int |
Идентификатор текущего оператора чата |
to_operator_id | int |
Идентификатор оператора, на которого будет назначен чат |
Отправка сообщения
Для передачи сообщения в чат нужно знать идентификатор чата chat_id
, который может быть получен при создании чата либо при получении обратного вызова при создании чата.
POST /v1/adapter/message
{
"account_id": 0,
"channel_id": 0,
"chat_id": 0,
"operator_id": 0,
"reply_to_id": 0,
"text": "string",
"created_at": "2023-01-01T00:00:00.000Z",
"source": "system",
"resource": {
"id": 0,
"token": "string",
"type": "photo",
"name": "string",
"size": 0
}
}
Описание сущности Message
Название параметра | Тип | Описание |
---|---|---|
account_id |
int |
Идентификатор аккаунта |
channel_id |
int |
Идентификатор канала |
chat_id |
int |
Идентификатор чата |
operator_id |
int |
Идентификатор оператора |
reply_to_id |
int |
Опциональный идентификатор сообщения для цитирования |
text |
str |
Текст сообщения |
created_at |
str |
Дата и время в формате ISO 8601
|
source |
enum |
Мнемоника отправителя сообщения. Допустимые значения: operator
|
resource |
Resource |
Объект Resource с описанием ресурса (файла), прикрепленного к сообщению |
context |
Optional[dict[str, Any]] |
Опциональный объект с дополнительной информацией |
Добавление ресурса
POST /v1/adapter/resource
Content-Type: multipart/form-data
...
Форма должна содержать следующие атрибуты
Название параметра | Тип | Описание |
---|---|---|
account_id |
int |
Идентификатор аккаунта |
channel_id |
int |
Идентификатор канала |
type |
enum |
Тип ресурса. Возможные значения photo , video , audio , voice , document
|
file |
bytes |
Передаваемый файл |
В ответе возвращается сущность Resource
Название параметра | Тип | Описание |
---|---|---|
id |
int |
Идентификатор ресурса |
token |
str |
Токен ресурса |
type |
enum |
Тип ресурса. Возможные значения photo , video , audio , voice , document
|
name |
str |
Название файла |
size |
int |
Размер файла в байтах |
Получение данных ресурса
GET /v1/adapter/resource/{account_id}/{channel_id}/{resource_id}/{resource_token}/payload
Обратные вызовы
Обратные вызовы отправляются в ответ на взаимодействие с сущностями чата, выполненными на адрес webhook_url
, указанный в конфигурации адаптера.
Данные для аутентификации передаются в заголовке Authorization
:
Authorization: {Type} {Credentials}
В случае, когда при создании адаптера указан атрибут webhook_token
, заголовок Authorization
формируется следующим образом:
Authorization: Bearer {webhook_token}
Создание аккаунта
Доступно в версиях:
v1
,v2
POST /account
{
"id": 0,
"name": "string",
"adapter_id": 0,
"client_id": 0,
"context": {},
"status": "active"
}
Изменение аккаунта
Доступно в версиях:
v1
,v2
PATCH /account/{account_id}
{
"id": 0,
"name": "string",
"adapter_id": 0,
"client_id": 0,
"context": {},
"status": "active"
}
Удаление аккаунта
Доступно в версиях:
v1
,v2
DELETE /account/{account_id}
{
"id": 0,
"name": "string",
"adapter_id": 0,
"client_id": 0,
"context": {},
"status": "active"
}
Создание канала
Доступно в версиях:
v1
,v2
POST /channel
{
"id": 0,
"name": "string",
"type": "comagic",
"account_id": 0,
"context": {},
"status": "active"
}
Изменение канала
Доступно в версиях:
v1
,v2
PATCH /channel/{channel_id}
{
"id": 0,
"name": "string",
"type": "comagic",
"account_id": 0,
"context": {},
"status": "active"
}
Удаление канала
Доступно в версиях:
v1
,v2
DELETE /channel/{channel_id}
{
"id": 0,
"name": "string",
"type": "comagic",
"account_id": 0,
"context": {},
"status": "active"
}
Новый чат
Доступно в версиях:
v1
,v2
POST /chat
{
"context": {},
"account_id": 0,
"channel_id": 0,
"chat_id": 0,
"visitor_id": 0,
"visitor_phone": "string",
"operator_id": 0,
"initiator": "operator",
"created_at": "2023-01-01T00:00:00.001Z"
}
Обновление чата
Доступно в версиях:
v2
PATCH /chat
{
"context": {},
"account_id": 0,
"channel_id": 0,
"chat_id": 0,
"operator_id": 0,
}
Завершение чата
Доступно в версиях:
v1
,v2
POST /chat/close
{
"context": {},
"account_id": 0,
"channel_id": 0,
"chat_id": 0,
"operator_id": 0,
"reason": "closed_by_timeout"
}
Параметр operator_id
опциональный.
Закрепление чата за оператором
Доступно в версиях:
v1
POST /chat/operator
{
"context": {},
"account_id": 0,
"channel_id": 0,
"chat_id": 0,
"operator_id": 0
}
Новое сообщение
Доступно в версиях:
v1
,v2
POST /message
{
"context": {},
"account_id": 0,
"channel_id": 0,
"id": 0,
"chat_id": 0,
"source": "system",
"operator_id": 0,
"reply_to_id": 0,
"text": "string",
"created_at": "2023-01-01T00:00:00.001Z",
"status": "accepted",
"resource": {
"id": 0,
"token": "string",
"type": "photo",
"name": "string",
"size": 0
},
"system_message_mnemonic": "string"
}
Параметр status
может принимать следующие значения: accepted
, delivered
, read
, sent
, error
Обновление сообщения
Изменение статуса сообщения
Доступно в версиях: v1
, v2
Копировать
POST /message/status
{
"context": {},
"account_id": 0,
"channel_id": 0,
"chat_id": 0,
"message_id": 0,
"status": "accepted"
}
Обновление информации о посетителе
Доступно в версиях: v1
, v2
Копировать
POST /visitor/card
{
"context": {},
"account_id": 0,
"channel_id": 0,
"visitor_id": 0,
"visitor_card": {}
}
Описание объекта visitor_card
:
Доступно в версиях: v1
, v2
POST /message/status
{
"context": {},
"account_id": 0,
"channel_id": 0,
"chat_id": 0,
"message_id": 0,
"status": "accepted"
}
Доступно в версиях: v1
, v2
POST /visitor/card
{
"context": {},
"account_id": 0,
"channel_id": 0,
"visitor_id": 0,
"visitor_card": {}
}
visitor_card
:Название параметра | Тип | Описание |
---|---|---|
name |
str |
Имя |
company |
str |
Компания |
comment |
str |
Комментарий |
phones |
list[str] |
Список номеров телефонов |
emails |
list[str] |
Список адресов электронной почты |
Переход с версии обратного вызова v1
на v2
Основные отличия v2
от v1
:
- вместо обратного вызова закрепление чата за оператором используется вызов обновление чата.
- добавлен обратный вызов обновления сообщения
Работа с каналом типа waba
Отличительными особенностями канала типа waba
является ограничение на создание исходящих коммуникаций только посредством предустановленных шаблонов, а так же возможность вести диалог только в рамках "временно окна", открывающегося с момента ответа посетителем на сообщение оператора.
Информация о доступных для использования шаблонов (а так же их изменения) передается в обратных вызовах связанных с каналом, в атрибуте context["message_templates"]
типа list[MessageTemplate]
.
Для полноценной работы с шаблонами waba
адаптер должен реализовать поддержку версии обратных вызовов v2
.
Структура шаблона сообщения MessageTemplate
:
Название параметра | Тип | Описание |
---|---|---|
id |
int |
Идентификатор шаблона |
name |
str |
Наименование шаблона |
content |
MessageTemplateContent |
Содержимое шаблона |
createdAt |
datetime |
Дата и время создания шаблона |
Структура содержимого шаблона MessageTemplateContent
:
Название параметра | Тип | Описание |
---|---|---|
text |
str |
Текст сообщения |
header |
MessageTemplateContentHeader |
Заголовок |
footer |
MessageTemplateContentFooter |
Сноска |
keyboard |
MessageTemplateContentKeyboard |
Кнопки меню |
Структура заголовка сообщения MessageTemplateContentHeader
:
Название параметра | Тип | Описание |
---|---|---|
text |
Optional[str] |
Текст заголовка |
headerType |
Optional[enum] |
Тип заголовка. Допустимые значения: TEXT , VIDEO , IMAGE , DOCUMENT
|
headerExampleMediaUrl |
Optional[str] |
Структура сноски сообщения MessageTemplateContentFooter
:
Название параметра | Тип | Описание |
---|---|---|
text |
Optional[str] |
Текст сноски |
Структура объекта MessageTemplateContentKeyboard
:
Название параметра | Тип | Описание |
---|---|---|
rows |
list[MessageTemplateContentKeyboardRow] |
Список объектов типа MessageTemplateContentKeyboardRow
|
Структура объекта MessageTemplateContentKeyboardRow
:
Название параметра | Тип | Описание |
---|---|---|
buttons |
list[MessageTemplateContentButton] |
Список объектов типа MessageTemplateContentButton
|
Структура объекта MessageTemplateContentButton
:
Название параметра | Тип | Описание |
---|---|---|
text |
str |
Текст кнопки |
buttonType |
enum |
Тип кнопки. Допустимые значения: QUICK_REPLY , URL , PHONE
|
payload |
str |
Текст ответа. Применимо только для кнопок типа QUICK_REPLY
|
url |
str |
Ссылка. Применимо только для кнопок типа URL
|
phone ] |
str |
Номер телефона. Применимо только для кнопок типа PHONE
|
Отправка сообщения с использованием шаблона
Для отправки сообщения с шаблоном используется метод отправки сообщения. Шаблон передается в атрибуте context[template]
в следующем формате:
Название параметра | Тип | Описание |
---|---|---|
id |
int |
Идентификатор шаблона |
text |
str |
Текст сообщения |
header |
MessageTemplateContentHeader |
Заголовок |
footer |
MessageTemplateContentFooter |
Сноска |
keyboard |
MessageTemplateContentKeyboard |
Кнопки меню |
Информация о временном окне передается в обратных вызовах новое сообщение и обновление сообщения в атрибуте context["conversation_frame_ts"]
типа int
.
Значением атрибута является unix timestamp, указывает время окончания временного окна. Если атрибут или его значение отсутствуют, то считается что временное окно закрыто.
История изменений
1.7.0 (2024-12-09)
- добавлена информация о новой версии обратных вызовов
v2
- расширен список типов каналов, которые может использовать адаптер
- добавлена информация о работе с каналом типа
waba
1.6.0 (2024-10-01)
- добавлена информация о новом атрибуте адаптера
webhook_auth
1.5.1 (2024-09-26)
- в разделе Соглашения добавлена информация об обратных вызовах.
1.5.0 (2024-04-11)
- добавлена информация о версионировании обратных вызовов.
- добавлена реализация метода завершения чата
- добавлен новый метод для трансфера чата
1.4.0 (2023-09-18)
Добавлена информация о получении токена аутентификации (вход в личный кабинет).
1.3.0 (2023-09-18)
У события нового сообщения удален избыточный атрибут visitor_id
.
1.2.0 (2023-09-14)
У всех событий удалены избыточные атрибуты app_id
и site_id
.
1.1.0 (2023-09-13)
Обновлена информация об аутентификации.
1.0.0 (2023-09-12)
Первоначальная версия.