Чаты

Процесс установки соединения

Инициализация соединения

Клиент инициирует 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

Закрытие диалога