Author: Vitaly Kovalyshyn

IT-SFERA and Webitel
Managing Partner

Web: kovalyshyn.pp.ua

Сегодня стартует новый этап в жизни: от интегратора до вендора!

Сегодня, официально мы уже не партнеры Oktell. За время партнерства случалось много разного… Мы собрали множество регалий: от дилера до внедренческого центра, лучший партнер, 5 звезд… Мой сценарий проверки голосовой почты попал в коробку с Oktell. Не одну статью написал на страницах этого блога…

Сегодня, мы запускаем 1.0 релиз продукта Terrasoft Webitel CallManager. Мы выходим на новую для нас стезю производителя решения. Да, у нас есть Terrasoft Press — но это нечто другое, новое, интересное. Вся наша команда вот уже не первый месяц работает… Хочется верить, что Вы полюбите Webitel так, как мы!

Что же нас ждет завтра?

Сегодня у нас рубрика: письмо в студию. Собственно, текст:

Друзья, хочу рассказать Вам одну историю из жизни под громким, или не очень, названием «Как Webitel CallManager помогает в обычных жизненных ситуациях».

Итак, пишу Вам с Ipad сидя на лестничной клетке своей квартиры.

Все произошло очень банально, как и любая ситуация, которая вызывает к самому себе только эмоции сожаления и фразу «ну ты и дурак»… 🙂

Планирую во вторник (20.11.2012) провести вебинар, на котором расскажу о функциональных возможностях нашего нового продукта Terrasoft Webitel CallManager. Если Вам интересно, что он из себя представляет — регистрируйтесь на вебинар. Так же, можете задавать вопросы в комментариях к данному посту.

Меня спрашивают: где новый подкаст?

Рассказывают: последний месяц очень интенсивно идут работы по запуску нового продукта от нашей Компании на платформе Terrasoft. Много еще надо успеть, поскольку планируем показать миру beta-версию уже на этой партнерской конференции (9-10 ноября). Так что, звиняйте 😉
Что это за продукт и как прошла конференция — расскажу уже после оной в следующем подкасте!

P.S. ах, и да, если есть вопросы к подкасту — задавайте 🙂

Установил на своем SIP-телефоне последнюю прошивку от Yealink (v.61) и увидел новый пункт меню: MulticastIP. Проверим как он работает! В диалплан FreeSWITCH добавлю новый пункт с Multicast Paging группой, на который звонить будет по номеру 7243:

 <action application="answer"/>
 <action application="esf_page_group" data="224.168.168.168 34567"/>

В Yealink можно прописать 10 Multicast групп. Прописываем нашу группу «Селектор» на объявленный в диалплане IP 224.168.168.168 и порт 34567:

Звоним и любуемся (и говорить не забываем): Прошивка 61 — англоязычная, если для Вас это помеха, тогда ждем скорого выхода (в ноябре обещали) русскоязычной версии 70 от IP.Matika.

Softswitch — Выпуск #04 от 15.09.2012

После перерыва в 3 недели я записал 4 выпуск!
Из новостей. Обновились: YATE, 3CX, Asterisk. Мысли о безопасности программных IP АТС.
Практика отправки SMS, FAX и как пропустить 30 звонков через канал в 0,5 Mbps
Встречаем новый кодек Opus. Когда уже наступит эра HD телефонии???
У нас есть первый победитель!
Жду Ваших вопросов!

Продолжая серию публикаций о SMS, сегодня хочу рассказать о еще одной удобной функции, которую легко реализовать в АТС. Типовая ситуация: менеджер звонит на мобильный клиента, а тот просит sms-кой скинуть свои контакты… Мы уже говорили о SMS-визитках, но это же исходящий звонок, здесь наш сценарий не сработает! Как быть? Просто, воспользуемся уже знакомым bind_meta_app application. В dialplan, когда звоним на мобильные, добавим вызов вот такого action:

В самом JavaScript сценарии у меня будет простенькая визиточка, но Вы сможете делать даже личные sms для каждого менеджера! Вот пример кода для моего провайдера:

use("CURL");

var CallerID = session.destination;
var SMS = " \
 \
Nashy kontakty: (044)591-92-81, (032)232-77-57, office@it-sfera.com.ua, www.it-sfera.com.ua" ;

console_log("info","Send SMS Card: \n" + SMS + "\n");
var curl = new CURL();
curl.run("POST", "http://sms.it-sfera.com/websend/", SMS);

Теперь менеджер во время разговора с клиентом может просто нажать *0 на SIP-телефоне и клиент получает SMS-визитку на свой телефон. Удобно, вчера дважды сам воспользовался этой функцией!

FreeSWITCHДумаю, что многие используют переадресацию звонков на мобильный, когда вне офиса. Да, это очень удобная функция современной АТС: уходишь, включил переадресацию на мобильный (или по расписанию) и принимаешь важные звонки… Но, одним из неудобных моментов такой переадресации — отсутствие понимания с какого номера пришел звонок (у нас то всегда отображается офисный номер!). Для себя я решил этот вопрос следующим образом: приходит переадресованный звонок, разговариваю, надо узнать номер звонящего — нажимаю *9 и получаю SMS. Как это работает? В предыдущем посте я описал как отправить SMS о пропущенном звонке, так что останавливаться на самом SMS не буду. Все, что нужно, это добавить в dialplan, когда срабатывает переадресация, вызов вот такого action:

&lt;action application=&quot;bind_meta_app&quot; data=&quot;9 b s lua::smsinfo.lua ${cell}&quot;/&gt;

Я использую application bind_meta_app, который позволяет привязывать в уже отвеченном разговоре на заданную комбинацию DTMF запуск разных сценариев. Вот я и запускаю на *9 Lua скрипт с отправкой SMS:

local CallerName = session:getVariable("caller_id_name")
local CallerNumber = session:getVariable("caller_id_number")

function urlencode (s)
 return (string.gsub (s, "%W",
        function (str)
                return string.format ("%%%02X", string.byte (str) )
        end ))
end

local SMS = '<?xml version="1.0" encoding="UTF-8" ?> \
<request method="send-sms" login="login" passw="password"> \
<msg id="1" phone="' ..cell.. '" sn="IT-SFERA" encoding="cyr">Абонент: ' ..CallerName.. ' \
Номер: ' .. CallerNumber.. '&lt;/msg>&lt;/request>'

if (cell) then
        api = freeswitch.API();
        local response = api:execute("curl", "http://sms.it-sfera.com/websend/ post " ..urlencode(SMS) )
        freeswitch.consoleLog("DEBUG","Here's response:\n" .. response .. "\n")
end

И получаем SMS:

Абонент на линии
Абонент на линии

FreeSWITCHИнтересной функцией для офисной АТС может стать отправка SMS сотруднику о пропущенном звонке. Я опишу, как реализовать этот функционал на FreeSWITCH.

1. Формат SMS
Мой SMS провайдер принимает сообщения через HTTP XML API. Мне необходимо будет сформировать XML файл и передать его методом POST на URL шлюза. Использовать будем модуль mod_curl. Здесь проблем нет. Только нужна будет функция для преобразования XML в urlencode…

2. Когда и куда отправлять
Что бы ответить на вопрос куда отправить, в directory я к регистрации каждого сотрудника добавил переменную cell с мобильным. Теперь из скрипта можно будет получить эту информацию. А когда отправлять? Здесь 2 проверки:
1. причина разрыва коммутации «ORIGINATOR_CANCEL»
2. возможно абонент Вам оставил голосовое сообщение?

3. Как вызвать скрипт?
Из dialplana 🙂 Просто добавьте вот такой action в extension с локальными пользователями:

4. А теперь сам скрипт на Lua

local send = false
local cell = env:getHeader("cell")
local hangup_cause = env:getHeader("hangup_cause")
local bridge_channel = env:getHeader("bridge_channel")
local CallerName = env:getHeader("Caller-Caller-ID-Name")
local CallerNumber = env:getHeader("Caller-Caller-ID-Number")

function urlencode (s)
 return (string.gsub (s, "%W",
        function (str)
                return string.format ("%%%02X", string.byte (str) )
        end ))
end

local SMS = ' \
 \
'

if (hangup_cause == "ORIGINATOR_CANCEL" and cell) then
        SMS = SMS.. "Вам звонили: " ..CallerName.. " " .. CallerNumber
        send = true
end

if (bridge_channel == "loopback/voicemail-a" and cell) then
        SMS = SMS.. "Новое сообщение от " ..CallerName.. " " .. CallerNumber
        send = true
end

if (send) then
        SMS = SMS.. ""
        api = freeswitch.API();
        local response = api:execute("curl", "http://sms.it-sfera.com/websend/ post " ..urlencode(SMS) )
        freeswitch.consoleLog("DEBUG","Here's response:\n" .. response .. "\n")
end

5. О, sms-ка пришла!

У Вас пропущенный звонок!
У Вас пропущенный звонок!