Mod_verto лёгкая Javascript сигнализация для freeswitch или как заменить тяжелый SIP на что то более простое

Многие наверно пользовались JS библиотеками, которые реализуют протокол SIP. На слуху simpl, jssip, sipjs. Когда мне доводилось ими пользоваться меня всегда немного напрягало то, что это полный SIP стэк с соответствующим огромным  количеством кода и очень частые проблемы несовместимости в реализации этого протокола между разными реализациями. И вот как то раз я наткнулся на mod_verto, модуль, которые из коробки есть в freeswitch. Модуль слушает веб-сокет  и осуществляет сигнализацию между клиентом и сервером с помощью JSON данных. Ясно, что без протокола SDP тут дело не обходится, но сам по себе диалог гораздо проще.

Например регистрация:

Запрос:

[{
"jsonrpc":      "2.0",
"method":       "login",
"params":       {
"login":        "100@example.com",
"passwd":       "password",
"loginParams":  {},
"sessid":       "86b75f77-8d75-e53f-6250-3475e8a8a0c9"
},
"id":   3
}]

Ответ:

[{
"jsonrpc":      "2.0",
"id":   3,
"result":       {
"message":      "logged in",
"sessid":       "86b75f77-8d75-e53f-6250-3475e8a8a0c9"
}
}]

Круто, правда?

Теперь, как это чудо поднять. Есть неплохая страница на wiki проекта FreeSWITCH. Не буду наниматься копипастой, а просто намечу путь.

  1. Сгенерировать сертификаты для хоста (документация говорит нам, что необходим WSS, на самом деле это не так, прекрасно работает через WS, но все же SSL он такой SSL)
  2. Отредактировать $CONFDIR/autoload_configs/verto.conf.xml
  3. Убедиться, что загружены следующие модули: mod_verto, mod_opus, mod_rtc, mod_vp8 (или mod_vpx, это зависит от версии)
  4. Добавить разрешения для mod_verto в домен или в конкретного пользователя:
<params>
    <param name="jsonrpc-allowed-methods" value="verto"/>
    <param name="jsonrpc-allowed-event-channels" value="demo,conference,presence"/>
</params>

После этого должны заработать исходящие вызовы. Для тестов можно использовать WebRTC verto demo phone. Там можно нажать кнопку «LogOut» и ввести свои параметры freeSWITCH.

  1. Обозначить как другие пользователи могут звонить пользователю mod_verto. В документации показано 3 способа. Я пользовался первым. Просто добавил ",${verto_contact ${dialed_user}@${dialed_domain}}" в <param name="dial-string">

Неочевидное но вероятное

Есть моменты, про которые в документации ни слова.

Передача сообщений. Не знаю на сколько так делать правильно, но это работает. Изменяем /usr/local/freeswitch/conf/chatplan/default.xmlследующим образом:

&lt;context name="default"&gt;
    &lt;extension name="demo"&gt;
        &lt;condition field="to" expression="^(.*)$"&gt;
            &lt;action application="send" data="verto"/&gt;
            &lt;action application="send" data="sip"/&gt;
        &lt;/condition&gt;
    &lt;/extension&gt;
&lt;/context&gt;

Firefox и клиентская js либа (verto.js). В chrome все отлично, а вот в firefox звонок разрывается после одного Ring если создавать звонок без поддержки видео но при этом пользователь даст разрешение на использование камеры.

Если мы создаем звонок так:

var call = this.verto.newCall({
            destination_number: num,
            caller_id_name: caller,
            caller_id_number:  caller,
            useVideo: true,
            useStereo: false
	    });

Права на камеру нужно давать так (тоесть никак):

Полезные команды

freeswitch@internal&gt; verto status
                     Name          Type                                       Data      State
=================================================================================================
                     mine       profile                            ws:0.0.0.0:8081      RUNNING
                     mine       profile                           wss:0.0.0.0:8082      RUNNING
mine::100@example.net       client                           127.28.14.53:53968      CONN_REG (WS)
mine::100@example.net       client                        127.176.193.134:60073      CONN_REG (WS)
mine::100@example.net       client                        128.176.193.134:59986      CONN_REG (WS)
=================================================================================================
1 profile , 3 clients

 

Запись опубликована в рубрике ЧАВО. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>