SMS

Продолжая серию публикаций о 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:

<action application="bind_meta_app" data="9 b s lua::smsinfo.lua ${cell}"/>

Я использую 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-ка пришла!

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

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

А вот и сам JavaScript:

К нам в офис все больше звонят с мобильных, и как было бы удобно по завершению звонка отправить клиенту полные контакты. Так и сделали. Для этого используем служебный сценарий обработки контента, который нужно указать в «Общих настройках» — «Служебный сценарий обработки контента»:

Проверяем прошла ли коммутация и первый ли раз к нам звонят. Отправляем SMS: «Спасибо за звонок в компанию АйТи-СФЕРА. Наши контакты: (032) 232-77-57, office@it-sfera.com.ua, www.it-sfera.com.ua».

В SQL запросе:

SELECT @CallCount = COUNT([AOutNumber])
  FROM [oktell].[dbo].[A_Stat_Connections_1x1]
  WHERE NOT ([BLineNum] = 'IVR') AND @CallerID = [AOutNumber]

Вот сам сценарий: PostCallContent

Oktell logoКак я описывал раньше, есть у меня SIP-GSM шлюз на базе Asterisk, который подключен к офисному серверу с Oktell. На модемы приходят разные SMS и пока они ложатся в файл на Linux сервере. В них бывает информация о балансе на карточках :). Идея — перенести все эти SMS в Oktell.

Для начала решил все SMS записывать в базу MySQL на сервере, а потом служебным сценарием забирать в Oktell. Создаю в MySQL пользователя, базу, и таблицу:

CREATE TABLE  `asterisk`.`gsm` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`date` DATETIME NOT NULL ,
`modem` VARCHAR( 10 ) NOT NULL ,
`callerid` VARCHAR( 16 ) NOT NULL ,
`msg` VARCHAR( 160 ) NOT NULL ,
`oktell` ENUM(  '0',  '1' ) NOT NULL DEFAULT  '0'
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci COMMENT =  'Входящие SMS'

Компания ZyXEL сообщает о начале поставок универсальной коммуникационной системы IP-телефонии X8004, специально разработанной для организаций, активно использующих информационные технологии с целью повышения эффективности бизнеса. X8004 реализует в одном компактном устройстве все функции традиционной и IP-АТС, контакт-центра и центра обработки вызовов, IVR и записи разговоров, факс-сервера, отправки почтовых, SMS- и IM-сообщений. Ключевые новшества системы — быстрая визуальная настройка телефонной сети предприятия и сценариев обработки телефонных вызовов, встроенный SQL-сервер, удобная интеграция с внешними базами данных и информационными системами, приложениями компьютерной телефонии и бизнес-процессами предприятия.

X8004 основана на промышленной платформе x86, выполнена в металлическом корпусе высотой 2 юнита для установки в 19-дюймовую стойку, спроектирована и протестирована для работы в условиях 24×7. Система избыточной вентиляции и функции мониторинга аппаратной части и состояния отдельных компонентов (в том числе жестких дисков) гарантируют бесперебойную работу. Для подключения к сетевой инфраструктуре предприятия и глобальной сети предусмотрены два порта Gigabit Ethernet. Для работы с сетями традиционной телефонии в X8004 может быть установлено до четырех транковых модулей с интерфейсами FXS, FXO или E1.

Ключевые новшества системы — быстрая визуальная настройка телефонной сети предприятия и сценариев обработки телефонных вызовов, встроенный SQL-сервер, удобная интеграция с внешними базами данных и информационными системами, приложениями компьютерной телефонии и бизнес-процессами предприятия.

Технические характеристики

Компания «S trans» работает на рынке Украины более 10 лет и является крупнейшим поставщиком запчастей (TIR) в Западной Украине. «S trans» располагает одним из крупнейших в Западном регионе мультибрендовым магазином-складом и сетью магазинов запасных частей (TIR), где представлено более 40 мировых производителей, которые в свою очередь являются поставщиками комплектующих на европейские заводы-производители грузовых автомобилей, прицепов и полуприцепов. В ассортименте компании более 10 тысяч наименований запчастей.

Основной задачей Компании сегодня является повышение эффективности обслуживания клиентов, а также снижение расходов на внутреннюю и международную телефонию. «Поскольку большая часть наших проектов в Украине реализованы совместно с нашим польским партнером, мы начали поиск решения, которое бы обеспечило нам постоянную и качественную, а главное недорогую связь», — отмечает директор львовского офиса «S trans» Владимир Карапинка.

Відбувся перший вебінар по Oktell IP ATC «Оптимізація телефонних витрат. Автоматизація пошуку та обслуговування клієнтів». Ви можете переглянути запис вебінару або скачати його разом із презентацією.
Дякую усім за участь!
[flashvideo file=»wp-content/uploads/2010/08/Oktell_IP-PBX.flv» /]