Для того чтобы иметь возможность взаимодействовать с API колл-центра, необходимо открыть websocket-соединение до proxy-сервера.

Proxy-сервер это nodejs-приложение которое доступно после установки пакета ecss-cc-ui, доступно по  wss://<ecss-cc-ui_ip>:<ecss-cc-ui_port>.

Порт задается при установке пакета ecss-cc-ui, по умолчанию 8091.

Например, используя реализацию rxjs/webSocket, это можно сделать так:

this.ws = webSocket(this.url)
this.ws.subscribe(
    (response: EltexResponse<any>) => this.fullDataStream.next(response),
    () => this._reconnectStream.next(),
    () => this._reconnectStream.next(),
)
JS

Pcap такого вызова выглядит следующим образом:

GET / HTTP/1.1
Host: 192.168.116.130:8091
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Upgrade: websocket
Origin: 192.168.116.130:4200
Sec-WebSocket-Version: 13
Accept-Encoding: gzip, deflate, br
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: csrftoken=use5JWejQXZB1tx9lYKfsZzOXOHTnbs0YtkcOBxQZDIbkyn7BRdC6SHxpOGH2Vey; JSESSIONID=node0zeowgwu8yiu618sgj0akvjq771.node0; wcf_sid=quvcn3kzptuaqd8signl09uuh0mul5ec
Sec-WebSocket-Key: A6Ljrs3D5xFKKQcym5R9Yw==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
 
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: /8tybArQZvyYCIM+33XZ37yw/Rw=
XML

Протокол общения

Существует два типа входящих запросов

  1. Запрос-ответ
  2. Запрос-ответ для подписки на уведомления + после такого запроса приходят уведомления по подписке

Входящие запросы

interface EltexRequest {
    /**
     * Имя команды (url).
     */
    action: string
    /**
     * Идентификатор запроса, должен быть уникальным значением, равен или больше нуля.
     */
    requestId: number
    /**
     * Дополнительные параметры запроса
     */
    payload: object
}

Ответы на запросы

interface EltexResponse<T> {
    /**
     * Имя команды, идентично запросу, либо неизвестное ранее значение для уведомлений или критических ошибок
     */
    action: string
    /**
     * Идентификатор запроса, либо 0 для уведомлений
     */
    requestId: number
    /**
     * Полезная нагрузка, объект, строка, или null
     */
    payload: T
    /**
     * Статус: 200 ОК, 401 неверные авторизационные данные, 500 для ошибок и 403 если сервер закрыл сессию пользователя
     */
    status: number
}

Для большинства запросов требуется предварительная авторизация.

Команды не требующие авторизации:  login, auth, profile.

Уведомления по подписке присылаются с requestId = 0.

Параметры для запроса передаются в  payload  в виде вложенных объектов.

Сразу после login ecss-cc-ui-api открывает webcosket для получения данных от сервера и передачи команд от пользователя.

GET /dom1/service/cc/arm/websockets HTTP/1.1

Sec-WebSocket-Version: 13

Sec-WebSocket-Key: wP+FlPkzHDC0bA/mzkrkFQ==

Connection: Upgrade

Upgrade: websocket

Cookie: token=064803c90ec3b72b; Version=1; Path=/

Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

Host: 10.25.64.21:8086



HTTP/1.1 101 Switching Protocols

connection: Upgrade

upgrade: websocket

sec-websocket-accept: w3h/LIiEKYiZDyFqIiH2Lk8HEHI=
XML