PBX

Сегодня поговорим о безопасных разговорах 🙂 Вы конечно же поняли: шифрование в SIP. Хочу научить FreeSWITCH использовать TLS (вместо UDP) и шифровать голос по SRTP (с помощью ZRTP), в качестве клиента будет телефон Yealink.

Я искал модуль, который бы мог воспроизводить и записывать MP3 в FreeSWITCH и нашел. Но, как оказалось Mod_shout не только это умеет, а еще и воспроизводить потоковое вещание (Интернет-радио), которое можно подключить вместо Music On Hold. Вот простой пример диалплана:

<extension name="RadioRocks">
     <condition field="destination_number" expression="^0000$">
       <action application="answer"/>
       <action application="playback" data="shout://online-radioroks.tavrmedia.ua:7000/RadioROKS"/>
       <action application="hangup"/>
     </condition>
   </extension>

Послушать радио можно через эту кнопку »

Звонок с сайта«.

После публикации «Звонок с сайта«, ко мне обращались несколько человек с одним вопросом: «Можно вместо CallerID подставить IP-адрес звонящего?» Отвечаю: Можно! 🙂 Просто добавьте в Ваш диалплан:

<action application=“set” data=“effective_caller_id_number=${network_addr}”/>
<action application=“set” data=“effective_caller_id_name=Site Call”/>

Получите:

Буквально вчера мы наблюдали начало тестирования последнего обновления Oktell, где была добавлена поддержка работы SIP-сервера за NAT. Решил и я проверить, как оно все работает 🙂

Для чистоты эксперимента, я нахожусь дома, где все устройства работают за WiFi-роутером. И для начало, что бы не играться с пробрасыванием портов, я включу DMZ на своем роутере для ноутбука с установленным Oktell:

DMZ
DMZ

В этом году на Партнерской Конференции Oktell многих заинтересовал вопрос «звонка с сайта», о котором я упомянул в своем докладе. Что же, опишу более подробно, как каждый может это реализовать у себя.

1. Устанавливаем FreeSWITCH
Для начало необходимо установить FreeSWITCH. Именно его мы будем использовать как транспорт с сайта на oktell. Вы можете устанавливать на том же сервере (тогда не забудьте сменить стандартный порт SIP) или на любом другом. Главное, не забудьте собрать и включить модуль RTMP!

Неоднократно приходись делать объединение офисной АТС на базе Asterisk с call-центром Oktell или просто интегрировать два номерных плана удаленных офисов на Oktell IP PBX и Asterisk. В общем, нет ничего сложного, посмотрим как это все работает на простом примере.

У нас есть 2 офиса: в одном прекрасно работает Oktell IP PBX (номерной план 1хх и 2хх), а в другом со своей задачей отлично справляется Asterisk (номерной план 3хх и 4хх). У каждой из АТС имеются свои городские номера, только еще на Asterisk установлен GSM-шлюз. Каждая из АТС имеет белый внешний адрес (или VPN между офисами). Задача сделать прозрачное объединение двух номерных планов, что бы сотрудник не задумываясь набирал номер, а так же дать возможность сотрудникам за Oktell звонить через GSM-шлюз. Рассмотрим как это решается.

Решил я поучаствовать в проекте iNUM. Зарегистрировал номер +883 (5100) 0902-4100 в формате E.164 (15 цифр). Номер не привязан к стране, основная идея в бесплатности звонка на этот номер из любой точки мира. Вот только я пока не нашел в Украине оператора, который пропустил бы звонок на этот номер. Удалось только позвонить со skype (звонок платный) и с GTalk (бесплатный) на наш номер.

Что же, ждем звонка на наш новый глобальный номер 🙂

FreeSWITCHЯ уже описывал, как в Oktell организовать сценарий Callback для сотрудников (звонок за счет офисной АТС). Теперь рассмотрим как такое же реализовать с помощью FreeSWITCH.

Для этой функции я выделил отдельный городской SIP-номер (благо, у меня их 10 шт.). Пускай Вас не смущает, что придется звонить с мобильного на городской, мы сделаем все возможное отправим в trunk SIP 183 Session Progress Message, что бы сотрудник не потерял и копейки. Вот таким будет наш диалплан:

    <extension name="380322320000">
    <condition field="destination_number" expression="^(380322320000)$">
            <action application="pre_answer"/>
            <action application="read" data="3 12 'tone_stream://%(10000,0,350,440)' digits 20000 #"/>
            <action application="set" data="api_hangup_hook=jsrun callback.js ${caller_id_number} ${digits}"/>
            <action application="hangup" data="CALL_REJECTED"/>
    </condition>
    </extension>

Поступил звонок, отправили Session Progress и гудок. Ждем ввода номера, после чего завершаем соединение. А вот уже после завершения запускаем JavaScript callback.js, где на вход отправляем номер звонящего и набранные цифры. Вот код скрипта callback.js:

    if ( ['0636150000','0939230000'].indexOf(argv[0]) != '-1' ) {
    console_log("info","Callback to " + argv[0] + "\n");
    session = new Session("{ignore_early_media=true}sofia/gateway/gsm/" + argv[0]);
    while (session.ready()) {
            session.execute("execute_extension", argv[1]+ " XML default");
            }
    }

Здесь все просто: проверяем номер ли нашего сотрудника, дозваниваемся ему и соединяем с набранным ранее абонентом.