Для того чтобы иметь возможность взаимодействовать с 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(),
) |
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= |
Существует два типа входящих запросов
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= |