Отправка событий Websocket
Настройка
С помощью API происходит обмен информацией между сторонним сервисом и Sipuni.
События в телефонии (начало, перевод, завершение звонка,
ответ
оператора) передаются на сторонний сервис для дальнейшей обработки. В свою очередь, сторонний сервис также отправляет запросы в телефонию (заказ
вызова) с помощью API.
Чтобы
включить
услугу,
перейдите
в меню "Интеграции" - "API" и откройте закладку "События
на АТС". Нажмите
кнопку
«Подключить
услугу».

В настройках включите параметр “Использовать вебсокет-сервер”.
Нажмите кнопку «Сохранить».

Вебсокет сервер доступен для получения событий. Все запросы к серверу и ответы от него производятся в формате JSON.
Аутентификация
Для аутентификации используйте запрос:
{"type":"auth","body":{"key":"<код аутентификации>"}}
Пример:
{"type":"auth","body":{"key":"b3762fc77dd7ca44c643a7a730152bfb"}}
В
случае
успешной
авторизации
сервер
ответит:
{"action": "auth", "status": 1}
Теперь сервер будет присылать сообщения о событиях на АТС.
Серверу
высылаются запросы keepalive для поддержания соединения.
{"type":"keepalive"}
Оповещения от сервера
Оповещения передаются в формате JSON в виде:
{
"action": "notify", "request": {
<тело запроса>
}
},
Обязательные параметры для всех видов запросов:
event
–
тип
запроса.
call_id – уникальный идентификатор вызова (сохраняется неизменным при переводе), является строкой произвольного формата (с использованием URL кодировки).
src_num – адрес абонента инициализировавшего вызов (сохраняется при переводе).
src_type – тип адреса ( 1 - внешний, 2 - внутренний).
dst_num – адрес назначения – при запросе на «умную» переадресацию» допускается пустое значение.
dst_type – тип адреса назначения ( 1 - внешний, 2 - внутренний).
timestamp – время события (начала/завершения вызова, перевода, ответа), представляет собой Unix timestamp (UTC).
channel – канал, открываемый при ответе, либо генерируемый внешним вызовом. Этот параметр нужен был для API перевода вызова и завершения звонка в старой версии API.
Адрес (в определении параметров, перечисленных выше и далее по тексту в данном документе) является телефонным номером либо строкой. Адрес для внешних номеров обязательно номер, внутренний адрес допускается как номером, так и строкой произвольного формата в URL кодировке (например SIP аккаунт).
Виды запросов
Call
событие начала звонка event = 1
Событие генерируется при инициировании, либо при переводе вызова. При переводе сохраняется src_num и call_id текущего вызова. Как только вызов поступает на устройство, приходит event=1.
Для каждого события Call, используемого как оповещение о начале/переводе вызова должно обязательно генерироваться событие Hang-up.
Обязательные параметры:
is_inner_call – флаг определяет, пришел ли данный вызов из вне системы (например, с городского номера)
Hang-up
событие окончания звонка event = 2
Обязательные параметры
status:
ANSWER - вызов отвечен BUSY, - абонент занят
NOANSWER - абонент не ответил после определённого таймаута CANCEL, - вызов сброшен
CONGESTION - перегрузка сети
CHANUNAVAIL – абонент недоступен (например sip абонент не зарегистрирован в сети)
call_start_timestamp – время начала вызова
call_answer_timestamp – время ответа на вызов, в случае отсутствия ответа, значение данного параметра должно быть равно 0.
Дополнительные параметры:
call_record_link
–
URL
на
файл
записи
разговора
(в
URL
кодировке).
Answer
ответ на вызов event = 3
Событие посылается при ответе на вызов. Дополнительные параметры отсутствуют.
Secondary hang-up
промежуточное завершение вызова event = 4
Генерируется при переводе звонка с подсказкой. Переводящий номер кладёт трубку и звонок полностью уходит на переводимый номер.
Обязательные параметры
status:
ANSWER - вызов отвечен BUSY - абонент занят
NOANSWER - абонент не ответил после определённого таймаута CANCEL - вызов сброшен
CONGESTION - перегрузка сети
CHANUNAVAIL – абонент недоступен (например sip абонент не зарегистрирован в сети)
call_start_timestamp – время начала вызова
call_answer_timestamp – время ответа на вызов, в случае отсутствия ответа, значение данного параметра должно быть равно 0.
Дополнительные параметры
call_record_link – URL на файл записи разговора (в URL кодировке)
Примеры запросов
Внешний звонок:
Звонок пришел в систему
{
"call_id": "1429019739.49501",
"event": "1",
"dst_type": "1",
"dst_num": "4999678420",
"src_type": "1",
"src_num": "89104846817",
"timestamp": "1429019739",
"channel": "SIP/0123451004996479797-0000bcf9",
"treeName": "Тестирование CRM", "treeNumber": "000960393"
}
АТС направила звонок на короткий номер 262 (номер 262 звонит)
{
"call_id": "1429019739.49501",
"event": 1,
"dst_type": "2",
"dst_num": "0123453262",
"src_type": "1",
"src_num": "89104846817",
"timestamp": "1429019747",
"is_inner_call": true, // Это логика АТС
"channel": "SIP/0123451004996479797-0000bcf9",
"treeName": "Тестирование CRM", "treeNumber": "000960393"
}
Номер 262 поднял трубку.
{
"call_id": "1429019739.49501",
"event": "3",
"dst_type": "2",
"dst_num": "0123453262",
"src_type": "1",
"src_num": "89104846817",
"timestamp": "1429019750",
"channel": "SIP/012345262-0000bcfb", "treeName": "Тестирование CRM",
"treeNumber": "000960393"
}
Идёт перевод с консультацией на 261, идёт звонок на схему пользователя 261.
{
"call_id": "1429019739.49501",
"event": "1",
"dst_type": "2",
"dst_num": "012345261",
"src_type": "1",
"src_num": "89104846817",
"timestamp": "1429019769",
"channel": "Local/261@transfer_vats-000001e9;2", "treeName": "Тестирование CRM",
"treeNumber": "000960393"
}
АТС звонит на 261 (внутренняя обработка АТС).
{
"call_id": "1429019739.49501",
"event": 1,
"dst_type": "2",
"dst_num": "012345261",
"src_type": "1",
"src_num": "89104846817",
"timestamp": "1429019769", "is_inner_call": true,
"channel": "Local/000987601@vatsl-000001ea;2", "treeName": "Тестирование CRM",
"treeNumber": "000960393"
}
Номер 261 поднял трубку (сейчас идёт консультация, номер 261 говорит с номером 262, внешний номер 89104846817 на ожидании).
{
"call_id": "1429019739.49501",
"event": "3",
"dst_type": "2",
"dst_num": "012345261",
"src_type": "1",
"src_num": "89104846817",
"timestamp": "1429019776",
"channel": "SIP/039803261-0000bcfc", "treeName": "Тестирование CRM","treeNumber": "000960393"
}
Схема пользователя 261 ответила (это не важно).
{
"call_id": "1429019739.49501",
"event": "3",
"dst_type": "2",
"dst_num": "000987601",
"src_type": "1",
"src_num": "89104846817",
"timestamp": "1429019776",
"channel": "Local/000987601@vatsl-000001ea;1", "treeName": "Тестирование CRM",
"treeNumber": "000960393"
}
Промежуточное завершение - консультация завершена 262 повесил трубку. (Теперь говорят 261 и внешний номер)
{
"call_id": "1429019739.49501",
"event": "4",
"dst_type": "2",
"dst_num": "012345262",
"src_type": "1",
"src_num": "89104846817",
"timestamp": "1429019780",
"channel": "Transfered/SIP/0123451004996479797-0000bcf9", "treeName": "Тестирование CRM",
"treeNumber": "000960393"
}
Звонок завершен.
{
"call_id": "1429019739.49501",
"event": "2",
"dst_type": "2",
"dst_num": "012345261","src_type": "1",
"src_num": "89104846817",
"timestamp": "1429019790", "status": "ANSWER",
"call_start_timestamp": "1429019739",
"call_answer_timestamp": "1429019750",
"call_record_link": "<a href=" httрs://siрuni.com/api/crm/record">httрs://siрuni .com/api/crm/record</a>?
id=1429019739.49501&hash=abcdefghijklmnopqrstuvwxyzabcdef&user=012345", "channel": "Local/261@transfer_vats-000001e9;2",
"treeName": "Тестирование CRM", "treeNumber": "000960393"
}