Чаты
Процесс установки соединения
Инициализация соединения
Клиент инициирует HTTP-запрос с заголовками Upgrade для перехода на WebSocket-протокол
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: <генерируется клиентом>
Origin: https://yoursite.com
Примечание
Origin это URL-адрес размещения чата.
Ответ сервера:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: <хеш ключа>
Подтверждение соединения
После установки WebSocket-соединения сервер отправляет первое сообщение.
{
"action": "connect",
"action_id": "9257eda2-8a65-41b8-bddb-6a49aac7ccbe",
"obj": "OmniWebChatWSMember",
"code": 200,
"notifies": null
}
Аутентификация
Для авторизации в системе клиент отправляет сообщение с токеном сессии. Запрос аутентификации (от клиент серверу):
{
"obj": "OmniWebChatWSMember",
"action_id": "9257eda2-8a65-41b8-bddb-6a49aac7ccbe",
"action": "auth",
"params": {
"session_token": "<токен сессии>"
}
}
Ответ сервера:
{
"action": "auth",
"action_id": "9257eda2-8a65-41b8-bddb-6a49aac7ccbe",
"obj": "OmniWebChatWSMember",
"code": 200,
"notifies": null
}
Подписка на каналы событий
После успешной аутентификации клиент подписывается на канал для получения уведомлений о диалогах. Запрос на подписку (от клиент серверу):
{
"obj": "OmniWebChatWSMember",
"action_id": "ecee-ec4b-630f-bfaf",
"action": "subscribe",
"params": {
"name": "omni|customer|dialog"
}
}
Наименование |
Тип |
Описание |
|---|---|---|
action |
StringType |
Подписка |
name |
StringType |
Имя канала (omni, customer или dialog) |
Ответ сервера:
{
"action": "subscribe",
"action_id": "ecee-ec4b-630f-bfaf",
"obj": "OmniWebChatWSMember",
"code": 200,
"notifies": [],
"body": null
}
Управление диалогами
Получение списка диалогов
Запрос на получение последних диалогов пользователя:
{
"obj": "DOCDialog",
"action": "list",
"params": {},
"limit": 5,
"offset": 0,
"sort": { "id": "-" },
"action_id": "a566-3feb-89c8-46dc"
}
Наименование |
Тип |
Описание |
|---|---|---|
limit |
IntType |
Лимит количества записей |
offset |
IntType |
Смещение для пагинации |
id |
StringType |
+ для возрастания, - для убывания |
Ответ сервера:
{
"action": "list",
"action_id": "a566-3feb-89c8-46dc",
"obj": "DOCDialog",
"code": 200,
"notifies": [],
"list": [],
"total_count": 0,
"offset": 0,
"limit": 5,
"sort": { "id": "-" },
"filter": null
}
Создание нового диалога
Запрос на создание:
{
"obj": "DOCDialog",
"action": "append",
"params": {},
"action_id": "06a4-a153-4aea-3b78"
}
Ответ сервера:
{
"action": "append",
"action_id": "06a4-a153-4aea-3b78",
"obj": "DOCDialog",
"code": 200,
"notifies": [],
"body": {
"id": 93966,
"customer_id": 17256,
"create_dt": 1774245951.855549,
"update_dt": 1774245951.855587,
"close_dt": null,
"channel_id": 35,
"channel_model_id": 5,
"customer_channel_id": 73037,
"status": 0,
"chatplan_id": 42,
"owner_id": null,
"theme_id": null,
"result_id": null,
"data": {}
}
}
Наименование |
Тип |
Описание |
|---|---|---|
id |
IntType |
Уникальный идентификатор диалога |
customer_id |
IntType |
Уникальный идентификатор клиента |
create_dt |
FloatType |
Время создания |
create_dt |
IntType |
Статус диалога |
owner_id |
IntType |
Уникальный идентификатор владельца чата (если нет владельца, то значение - null) |
Получение информации об операторе
Запрос на получение:
{
"obj": "DOCDialog",
"action": "get_agents",
"params": {
"dialog_id_list": [93966]
},
"action_id": "f520-73e1-e5c4-39bb"
}
Ответ сервера:
{
"action": "get_agents",
"action_id": "f520-73e1-e5c4-39bb",
"obj": "DOCDialog",
"code": 200,
"notifies": [],
"body": {
"489": {
"name": "Дарья",
"surname": "Карпычева"
}
}
}
Работа с сообщениями
Получение истории сообщений
Запрос на получение:
{
"obj": "DOCDialogMessage",
"action": "list",
"sort": { "create_dt": "+" },
"limit": 1000,
"filter": {
"field_list": [
{
"field": "dialog_id",
"condition_type": 0,
"value": 93966
}
],
"type": 0
},
"action_id": "141e-3ecd-7bc0-d874"
}
Наименование |
Тип |
Описание |
|---|---|---|
field |
StringType |
Фильтр по dialog_id |
condition_type |
IntType |
|
value |
StringType |
Значение |
type |
IntType |
0 — AND, 1 — OR |
Ответ сервера:
{
"action": "list",
"action_id": "141e-3ecd-7bc0-d874",
"obj": "DOCDialogMessage",
"code": 200,
"notifies": [],
"list": [
{
"id": 2832406,
"dialog_id": 93966,
"create_dt": 1774245956.794839,
"sender": -2,
"recipient": -1,
"status": 0,
"message": {
"model_name": "DOCRMDuplicateByEmail",
"params": {
"subject_template": 231,
"html_template": 155,
"txt_template": 153,
"send_customer": true,
"recipient_list": []
}
}
}
],
"total_count": 6,
"offset": 0,
"limit": 1000
}
Значения sender/recipient:
Наименование |
Описание |
|---|---|
-3 |
Система/бот |
-2 |
Оператор |
-1 |
Клиент |
> 0 |
ID пользователя |
Отправка сообщения
Индикация набора текста (Typing Indicator):
{
"action": "append",
"obj": "DOCDialogMessage",
"params": {
"sender": -1,
"recipient": -3,
"dialog_id": 93966,
"message": {
"model_name": "DOCHMTypes",
"params": {}
}
},
"action_id": "ad9b-6b9b-18d7-c9b3"
}
Запрос на предварительный просмотр текста
Запрос на просмотр:
{
"action": "append",
"obj": "DOCDialogMessage",
"params": {
"sender": -1,
"recipient": -3,
"dialog_id": 93966,
"message": {
"model_name": "DOCHMSimpleTextPreview",
"params": {
"value": "Здравствуйте"
}
}
},
"action_id": "8182-c566-4b92-4e29"
}
Отправка финального сообщения
Отправка завершающего чат сообщения:
{
"action": "append",
"action_id": "e3ab-e7b6-b0ff-e16a",
"obj": "DOCDialogMessage",
"params": {
"sender": -1,
"recipient": -3,
"dialog_id": 93966,
"message": {
"model_name": "DOCHMSimpleText",
"params": {
"value": "Здравствуйте, есть ли у вас розетки с защитой от детей ?"
}
}
}
}
Ответ сервера:
{
"action": "append",
"action_id": "e3ab-e7b6-b0ff-e16a",
"obj": "DOCDialogMessage",
"code": 200,
"notifies": [],
"body": {
"id": 2832495,
"dialog_id": 93966,
"create_dt": 1774246154.469636,
"sender": -1,
"recipient": 489,
"status": 0,
"message": {
"model_name": "DOCHMSimpleText",
"params": {
"value": "Здравствуйте, есть ли у вас розетки с защитой от детей ?"
}
}
}
}
Отметка сообщений как прочитанных
Отметка прочитанных:
{
"action": "status_update",
"action_id": "ce2e1991-19df-4b74-bd5d-3c8d10d49478",
"obj": "DOCDialogMessage",
"params": {
"dialog_id": 93966,
"id": 2832495,
"status": 2
}
}
Здесь «Значения статуса»:
0 - Не прочитано;
2 - Прочитано.
Heartbeat (Keep-Alive)
Для поддержания соединения сервер периодически отправляет ping-сообщения:
{
"action": "ping",
"action_id": null,
"obj": "WebSocketMember",
"params": {
"dt": "2026-03-23T06:09:15.002302+0000"
}
}
Pong-сообщение от клиента в ответ:
{
"action": "pong",
"obj": "WebSocketMember",
"params": {
"dt": "2026-03-23T06:09:15.002302+0000"
},
"action_id": "e1d9-65c8-b610-f549"
}
Примечание
Клиент должен копировать значение dt из запроса в ответ для корректного измерения задержки.
Типы сообщений (model_name)
Наименование |
Назначение |
|---|---|
DOCHMSimpleText |
Текстовое сообщение (финальное) |
DOCHMSimpleTextPreview |
Предварительный просмотр текста (печатание) |
DOCHMTypes |
Сигнал начала/окончания набора текста |
DOCRMDuplicateByEmail |
Уведомление о дублировании по email |
DOCRMMenu |
Интерактивное меню с вариантами |
DOCRMMultiLegChoice |
Выбор варианта в меню |
DOCRMQueue |
Постановка в очередь |
DOCRMQueueAttemptAccept |
Принятие вызова из очереди |
DOCRMQueueAttemptCancel |
Отмена ожидания в очереди |
DOCRMClose |
Закрытие диалога |