FreeSWITCH

Решил я поучаствовать в проекте 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");
            }
    }

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

FreeSWITCHЯ описывал, как можно отправить SMS-визитку после звонка в Oktell. Пришла очередь сделать аналогический функционал на FreeSWITCH! Для этого я создаю в MySQL базе на сервере отдельную табличку, где буду хранить информацию о том, кому уже отправил визитку. В качестве языка написания сценария я выбрал JavaScript. Сценарий проверяет в табличке была ли отправлена уже SMS-визитка (на 1 номер должна только 1 уходить SMS), если нет, тогда смотрим код оператора (я смотрю украинских операторов) и для каждого из операторов создаем SMS. Отправляем через нашего SMS-провайдера.

А вот и сам JavaScript:

FreeSWITCHСегодня у нас есть FreeSWITCH с подключенными телефонами и отдельно у менеджеров установлен Terrasoft CRM. Необходимо обеспечить возможность определения имени из Terrasoft CRM звонящего абонента на SIP-телефонах. Для этого я написал PHP-скриптик:

Задача следующая: поступает вызов на один наш особый номер (только на этот номер) от абонента группе наших сотрудников. Сотрудник отвечает, общается с абонентом и абонент кладет трубку. Теперь начинается самое интересное, тот кто из группы поговорил с абонентом, надо коммутировать на руководителя отдела. Конечно, сотрудник может и сам потом перезвонить руководителю — но нет, его надо туда перевести 🙂 Вот как это можно решить на FreeSWITCH (99051000114579 — наш особый номер, 2000 — это номер группы, а 1000 — это номер руководителя отдела):

<extension name="in_extensions">
   <condition field="destination_number" expression="^(99051000114579)$">
       <action application="export" data="exec_after_bridge_app=transfer" />
       <action application="export" data="exec_after_bridge_arg=1000 XML features" />
       <action application="bridge" data="2000 XML default" />
    </condition>
</extension> 

Один из наших клиентов (очень большая компания в России) не может пользоваться Skype для звонков к нам в офис (политика безопасности), а на стационарный — дорого. Единственный вариант для него — Google Talk. А мне хочется что бы этот звонок отображался в единой статистике с возможностью прослушать его запись. Давайте объединим пожелания клиента с нашими!

Будем использовать FreeSWITCH. Необходимо включить модуль Dingaling. В файле conf/jingle_profiles/client.xml

  
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
  

Для входящих в dialplan добавляем:


     
         
         
     
   

Все! Теперь звонок будет поступать на номер 1000

И принимать звонок в Oktell

Наш адрес GTalk для звонков: it.sfera.com