Интеграция по протоколу WSS
Интеграция по протоколу WSS
Для отображения карточки клиента в интерфейсе Вашей CRM в режиме real-time, Вам необходимо подключиться к серверу используя Web-сокеты, затем ожидать от сервера сообщения о входящем звонке.
Описание API Web Socket
Подключение и авторизация
Только авторизированные пользователи могут подписываться на команды от АТС или отправлять ей такие команды.
wss://<domain>/live/connector/v3/easy?domain=<domain>&apiKey=<apiKey>&subscriber=<subscriber> — подключение к Web-сокет серверу.
где,
domain — API сервер, другими словами домен вашей АТС (например, qwe rty.pbx.vega.ua);
apiKey — API ключ для подключения по API;
subscriber — внутренний номер/email сотрудника на события которого Вы хотите получить подписку.
Авторизационные данные (domain, apiKey, subscriber) можно получить открыв страницу «Настройки» и перейдя на вкладку «Интеграция», затем открыв раздел «Другая CRM система».
Пример
var _socket = new WebSocket('wss://qwerty.pbx.vega.ua/live/connector/v3/easy?domain=qwerty.pbx.vega.ua&apiKey=S 3Bvc2eNimuQmQWyJt5aEvNjbND1fz0X&subscriber=001');
Получение информации о входящем звонке
В момент звонка, если у менеджера открыта CRM и его браузер подписан на прием web-сокет сообщений, информацию о событиях звонка передается в браузер. Затем в CRM можно показать специальное всплывающее окно с карточкой клиента.
Параметры
Входящих параметров нет, все что необходимо это подписаться на сообщения от Socket сервера; var _socket = new WebSocket('...');
t._socket.onmessage = function(e) { ... }
Результат
Сообщение полученное с сервера, при звонке, имеет формат:
{
"event":"call.dial",
"uuid":"23-1453990999.41",
"parentUuid":null, "lgDirection":4, "leg": {
},
"leg2":null,
"otherLegs":[
{
"id":120,
"type": 1, "displayName":"Support Vega", "ext":"911"
"id":"29",
"name":"Тест", "num":"+380567777777",
}],
"companyName":"Рекламное агентство", "url":"https://qwerty.pbx.vega.ua/features/crm/contacts/edit.jsp#/?id=1", "priority":2
"dialAt":1473973200000,
"bridgeAt":null, "serverTime":"1473973201000", "trunkNum":"567850550", "trunkName":"567850550"
}
event — событие которое произошло с телефонной системой Тип: String
Возможные значения:
- call.dial (начало звонка);
- call.bridge (на звонок ответили);
- call.hangup (звонок или разговор был завершен);
- error (ошибка).
uuid — уникальный идентификатор звонка Тип: String
parentUuid — уникальный идентификатор родительского звонка. Если зв онок приходит на группу пользователей, затем в группе распределяется любому из сотрудников, тогда звонок сотруднику будет ссылаться на звонок в группу как на родительский звонок.
Тип: String
lgDirection - направление зв онка Тип: Number;
Возможные значения:
1 — внутренний звонок;
2 — исходящий звонок;
4 — входящий звонок;
32 — установка на паузу (нет на месте);
64 — снятие с паузы (есть на месте).
leg — данные пользователя (с отрудника компании) выполняющего звонок или принимающего звонок (в зависимости от значения поля lgDirection);
Тип: Object
leg.id — идентификатор сущности на которую пришел звонок или с которой он был совершен (если lgDirection=2 - звонок был совершен от пользователя, если lgDirection=4 — звонок был принят сущностью). Это поле может означать идентификатор пользователя (сотрудника компании), группы пользователей (отдела компании) или сценария (IVR меню). Какой тип сущности обозначает данный идентификатор, можно узнать из параметра leg.type;
Тип: Number
leg.type — тип сущности на которую пришел звонок или от лица которой он был совершен; Тип: Number
Возможные значения:
1 — пользователь (сотрудник);
2 — группа (отдел сотрудников);
4 — сценарий (IVR меню)
leg.ext — внутренний номер сущности на которую пришел звонок или с которой он был совершен. Это может быть внутренний номер пользователя или группы пользователей. В случае если leg обозначает сценарий, данный параметр будет равен null (так как у сценария нет внутреннего номера). Какой тип сущности обозначает данный параметр, можно узнать из параметра leg.type;
Тип: String
leg.displayName — имя сущности на которую пришел звонок или с которой он был совершен. Это может быть имя пользователя, название группы пользователей или сценария. Какой тип сущности обозначает данный параметр, можно узнать из параметра leg.type;
Тип: String
leg2 — данные пользователя (сотрудника компании) принимающего внутренний звонок. Данное поле всегда равняется null при исходящих и входящих звонках;
Тип: Object
leg2.id — идентифика тор сущности на которую пришел внутренний звонок (если это поле присутствует, тогда lgDirection=1). Это поле может означать идентификатор пользователя (сотрудника компании) или группы пользователей (отдела компании). Какой тип сущности обозначает данный идентификатор, можно узнать из параметра leg2.type;
Тип: Number
leg2.type — тип сущно сти на которую пришел внутренний звонок; Тип: Number
Возможные значения:
1 — пользователь (сотрудник);
2 — группа (отдел сотрудников)
leg2.ext — внутренний номер сущности на которую пришел внутренний звонок. Это может быть внутренний номер пользователя или группы пользователей. Какой тип сущности обозначает данный параметр, можно узнать из параметра leg2.type;
Тип: String
leg2.displayName — имя сущности на которую пришел внутренний звонок. Это может быть имя пользователя, название группы пользователей. Какой тип сущности обозначает данный параметр, можно узнать из параметра leg2.type;
Тип: String
otherLegs — детали о клиенте. Данное поле является списком, так как может быть подключено несколько CRM систем и в результате будет получен список деталей со всех подключенных CRM. Поля данного списка, приведены ниже.
Тип: Array
otherLegs[0].id — идентификатор клиента в CRM системе. null - если клиент не существует; otherLegs[0].name — имя клиента в CRM системе. null - если клиент не существует; otherLegs[0].num — номер телефона клиента в CRM системе;
otherLegs[0].companyName — название компании клиента в CRM системе. null - если клиент не существует или не указано название компании;
otherLegs[0].url — ссылка на существующий контакт в CRM, или на создание нового клиента;
otherLegs[0].priority — приоритет подключения по которому был получен контакт.
dialAt — время когда начал звонить телефон (количество милли секунд прошедших с 1970 года,
GMT+0)
Тип: Number
bridgeAt — время в которое ответили на звонок, null если ответа пока нет (количество миллисекунд прошедших с 1970 года, GMT+0)
Тип: Number
serverTime — время когда событие было отправлено с сервера ( количество миллисекунд прошедших с 1970 года, GMT+0)
Тип: Number
trunkNum - внешний номер, который используется для приема текущего входящего звонка или совершения исходящего звонка (в зависимости от значения поля lgDirection). Данное поле всегда равняется null при внутренних звонках;
Тип: String
trunkName - подпись д ля внешнего номера, который используется для приема текущего входящего звонка или совершения исходящего звонка (в зависимости от значения поля lgDirection); Тип: String
Пример
var _socket = new WebSocket('...');
_socket.onmessage = function(e) {
var data = JSON.parse(e.data); if(data["event"] == "call.dial") {
alert("Call from: " + data.otherLegs[0].num);
}
};