FS: Отправляем SMS о пропущенном звонке
Интересной функцией для офисной АТС может стать отправка 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 = ' \\ " 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' 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.. "
5. О, sms-ка пришла!