Реализация звонков через SIP

Dmitrii

New Member
Интересует возможность реализовать звонки, аналогичные примеру "click-to-phone", но с сокрытием данных для коннекта к SIP (click-to-phone они и скрыты, но находятся в конфиге, который не понятно в какой момент подцепляется).

Что уже сделано:
Зарегистрировано приложение с адресом, в нем зарегистрированы все возможные REST методы.
На клиенте (браузер) происходит коннект к WCS и попытка вызова session.createCall метода (/call/startup в REST API и /call в REST Hooks, насколько я понимаю).

Однако, если при вызове метода connect (т.е. createSession в JS API) не передать сразу всю конфигурацию SIP, в дальнейшем он никак подхватить конфиг не может: /call не позволяет изменять sipLogin, sipPassword и т.д., даже если их указать как overwrite.

connectStatusEvent их позволяет переписывать, но при дальнейшем вызове call метода они не подхватываются.


Существует ли какая-нибудь возможность не указывать sip-параметры на клиенте в момент соединения, а подставить в соответствующие REST вызовы позже? Как это сделано в приложении click-to-call, но я так и не разобрался, в какой момент и каким образом оно подхватывает конфиг из account.xml
 

Dmitrii

New Member
И вдогонку вопрос - можно ли произвести запись через stream/recording такого звонка?
 

Max

Administrator
Staff member
Добрый день.
Существует ли какая-нибудь возможность не указывать sip-параметры на клиенте в момент соединения, а подставить в соответствующие REST вызовы позже? Как это сделано в приложении click-to-call, но я так и не разобрался, в какой момент и каким образом оно подхватывает конфиг из account.xml
Да, такая возможность есть, именно с использованием REST hook. Пример Click-To-Call использует специальное приложение встроенного бэкенда clickToCallApp, которое проставляет необходимые поля, получив REST hook /connect при установке соединения.
Вы также можете использовать /connect, подставляя данные для звонка в Вашем приложении на бэкенде, например:
Code:
<?php

$api_method = array_pop(explode("/", $_SERVER['REQUEST_URI']));
$incoming_data = json_decode(file_get_contents('php://input'), true);

error_log($api_method);
//process method
switch($api_method) {
    case"connect":   
        $rest_client_config = json_decode(file_get_contents('rest_client_config.json'), true); 
        $incoming_data['restClientConfig'] = $rest_client_config;
        $incoming_data['sipLogin'] = "my_sip_login";
        $incoming_data['sipAuthenticationName'] = "my_sip_login";
        $incoming_data['sipPassword'] = "my_sip_password";
        $incoming_data['sipDomain'] = "my_sip_pbx_address";
        $incoming_data['sipOutboundProxy'] = "my_sip_pbx_address";
        $incoming_data['sipPort'] = "5060";
    break;
...
}
header('HTTP/1.1 200 OK', true, 200);
header('Content-Type: application/json');
echo json_encode($incoming_data);
?>
В этом случае Вам при создании звонка достаточно передать, например, только номер и параметры аудио и видео
Code:
/rest-api/call/startup
{
 "callId":"123456789",
 "callee":"7323322",
 "hasAudio":"true",
 "hasVideo":"false",
 "appKey":"myCallApp"
}
И вдогонку вопрос - можно ли произвести запись через stream/recording такого звонка?
Непосредственно звонок записать нельзя, но можно ретранслировать звонок в поток
Code:
/rest-api/call/startup
{
 "callId":"123456789",
 "callee":"7323322",
 "hasAudio":"true",
 "hasVideo":"false",
 "appKey":"myCallApp",
 "toStream":"call-123456789-stream"
}
затем этот поток найти
Code:
/rest-api/stream/find
{
 "name":"call-123456789-stream",
 "published":true
}
В ответ вернется mediaSessionId потока
Code:
{
 "name":"call-123456789-stream",
 ...
 "mediaSessionId":"5a072377-73c1-4caf-abd3"
}
С использованием этого параметра можно как поставить поток на запись
Code:
/rest-api/recorder/startup
{
 "mediaSessionId": "5a072377-73c1-4caf-abd3",
}
так и остановить запись потока
Code:
/rest-api/recorder/terminate
{
 "mediaSessionId": "5a072377-73c1-4caf-abd3",
}
См также подробное описание SIP as Stream и записи опубликованных потоков
 
Top