Интеграция SMS-сервиса MegaLabs с Asterisk
SMS-уведомления — хорошее рекламное средство для компании. С их помощью можно производить рассылку сообщений с предложениями на номера клиентов. Также, помимо рекламных целей, с помощью SMS можно получать уведомления о пропущенных звонках на свой телефон. Для того чтобы такие уведомления работали, нужно настроить интеграцию между сервером телефонии и SMS-сервисом. В данной статье будет рассмотрена возможность […]
SMS-уведомления — хорошее рекламное средство для компании. С их помощью можно производить рассылку сообщений с предложениями на номера клиентов. Также, помимо рекламных целей, с помощью SMS можно получать уведомления о пропущенных звонках на свой телефон. Для того чтобы такие уведомления работали, нужно настроить интеграцию между сервером телефонии и SMS-сервисом. В данной статье будет рассмотрена возможность интеграции сервера Asterisk с MegaLabs – SMS-сервисом от компании Мегафон.
Интеграция
Всю необходимую информацию по API можно узнать из документации к SMS-сервису.
Для данной интеграции у нас должен быть доступ к личному кабинету в Мегафон, а также данные для SMPP-линка. Здесь нам понадобятся имя отправителя, логин и пароль.
Приступим к самой интеграции. Выполнять её будем с помощью скрипта, написанного на PHP:
#!/usr/bin/php -q
<?php
$cid = $argv[1];
$did = $argv[2];
$fornum = 89998887766;
if (isset($did)){
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array(
"from" => "USER",
"message" => "На Ваш номер звонил: $cid",
"to" => $fornum,
))
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_USERPWD, "Login:Password");
curl_setopt($ch, CURLOPT_URL, 'https://API-serviсes/sms');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$out = curl_exec($ch);
curl_close($ch);
}
?>
Теперь подробно рассмотрим, что делает скрипт. В самом начале скрипта мы получаем из диалплана переменные $cid и $did (передача их из диалплана в скрипт будет рассмотрена ниже в настройке конфигурационного файла extension_custom.conf). Соответственно, $cid – кто звонил, $did – кому звонили. Также здесь присутствует переменная $fornum – номер, на который будем отправлять SMS-уведомление. Далее проверяем, не пуста ли переменная $did. Если она не пуста, инициируем подключение к SMS-сервису.
С помощью POST-запроса, передаём сервису параметры from, message и to (from – имя, с которого придёт сообщение, message – сообщение, to – номер, на который отправляем сообщение).
Указываем версию HTTP. В примере используется версия 1.1. Также возможно использование версии 1.0. Следующим шагом передаём логин и пароль, прописанные в данных для SMPP-линка, а также указываем ссылку на используемый сервис. Завершаем инициализацию подключения. Сохраняем скрипт и помещаем его на сервер. В нашем примере будет использоваться директория: /var/www/html/sms/. На текущем шаге интеграция с SMS-сервисом завершена. Проверить её можно, прописав в консоли следующую команду:
php -f /var/www/html/sms/smsml.php 101
где 101 – значение, которое для проверки мы передаём в переменную $cid. Результатом проверки будет сообщение, пришедшее на указанный в скрипте номер.
Перейдём в конфигурационный файл (/etc/asterisk/extensions_custom.conf) и пропишем следующий диалплан:
[sms-sender]
exten => s,1,NoOp(Sms sender for no answer)
same => n,System(/usr/bin/php -f /var/www/html/sms/smsml.php ${CALLERID(num)})
same => n,Macro(hangupcall,)
В диалплане, описанном выше, прописываем комментарий, который говорит о том, что был произведён переход в контекст sms-sender. Это сделано для быстрого поиска нужных строк в логе вызова. Далее ссылаемся на выполнение команды вызова скрипта smsml.php в системе Linux (в примере – CentOS 6.9) и передаём из диалплана номер звонящего.
Для того чтобы внесённые в диалплан изменения вступили в силу, в Asterisk CLI выполним команду:
dialplan reload
Далее необходимо разместить этот скрипт на внутреннем номере, очереди или IVR, при неответе в которых должно приходить SMS-уведомление. Для этого воспользуемся модулем Custom Destinations во FreePBX. Подробнее о работе модуля Custom Destinations можно прочитать в статье.
Во FreePBX переходим на вкладку Custom Destinations (Admin -> Custom Destinations) и создаём новое назначение. Для заполнения нам понадобятся 2 поля:
- Target – прописываем контекст, что вызываем и приоритет;
- Description – имя назначения.
Далее пустим входящие вызовы по неответу, занятости и недоступности на назначение sms-sender с внутреннего номера. Подробнее о внутренних номерах можно прочитать в статье.
Перейдём в Extensions (Applications -> Extensions) и раскроем нужный номер. На вкладке Advanced в Optional Destinations напротив No Answer, Busy и Not Reachable выберем назначение sms-sender.
После применения изменений во FreePBX позвоним на номер. Если никто не поднимет на нём трубку, вызов по истечению определённого времени уйдёт на созданный sms-sender. После этого на телефон поступит сообщение о том.
Пример работы
Теперь же рассмотрим следующую задачу: существует ряд внутренних номеров с переадресацией на мобильный номер. В качестве примера выделим из них номер 0008. Также имеется телефонная книга со значениями вида: внутренний номер -> имя. Здесь выделим номер 0009 с именем Иванов Иван. Внутренний номер 0009 звонит на 0008, срабатывает переадресация на мобильный номер, но ответа не происходит. Соответственно оператор связи передаёт на мобильный номер уведомление о том, что звонил кто-то с городского номера. Необходимо с помощью SMS-уведомления передать на мобильный номер, что звонил 0009 Иванов Иван. Однако задачу усложняет тот факт, что уведомления о пропущенных должны приходить следующим образом: при звонке на 0008 – сообщение на мобильный номер 0008, при звонке на 0009 – сообщение на мобильный номер 0009 и далее по списку.
Реализация
Создадим несколько файлов.php. В нашем примере: conf.php, exten.php и smsml.php. Файл conf.php будет содержать в себе переменную $nam, в которую в качестве массива будут переданы значения телефонной книги.
Conf.php:
#!/usr/bin/php -q
<?php
$nam = array(
'0009' => 'Иванов Иван',
. . .
'1111' => 'Андреев Андрей',
);
?>
Файл exten.php создаём по образу conf.php. Он будет содержать в себе переменную $mas, в которую массивом передаём связку внутренний номер -> мобильный номер. Таким образом в файле exten.php будут храниться номера, на которые должны будут приходить уведомления о пропущенных вызовах, если им звонили.
Теперь внесём изменения в ранее описанный скрипт smsml.php. В первую очередь в самом начале допишем:
require ('exten.php');
require ('conf.php');
Этим мы подключаем к скрипту smsml.php телефонную книгу и список мобильных номеров. Далее между объявлением переменных $cid и $ch впишем следующие строки:
if (isset($mas[$did])){
$fornum = $mas[$did];
$forname = (isset($nam[$cid])) ? $nam[$cid] : $cid;
. . .
}
Здесь проверяем, имеется ли значение переменной $did в массиве в файле exten.php. Если оно имеется, то в переменную $fornum передаётся мобильный номер, на который будет отправлено SMS-уведомление. Здесь же, в переменной $forname делаем проверку на наличие номера звонящего в файле conf.php. Если он имеется в массиве, то в переменную $forname возвращается имя звонящего. В противном случае возвращается номер звонящего.
В конечном счёте скрипт должен иметь следующий вид:
Далее переходим к правке диалплана. При учёте переадресации на мобильный номер, Custom Destination использовать не будем, т.к. уведомления в таком случае не будут приходить.
Подробнее о работе с модулем Follow Me можно прочитать в статье.
Приступим к написанию диалплана. Для этого перейдём в файл extensions_override_freepbx.conf (/etc/asterisk/ extensions_override_freepbx.conf). здесь необходимо произвести оверрайд контекста ext-local. Для этого пропишем:
[ext-local]
exten => h,1,NoOp(Sms sender for no answer)
same => n,Set(EXTNUM= ${IF($[${EXISTS(${FMGRP})}] ? ${FMGRP} : ${EXTTOCALL})})
same => n,System(/usr/bin/php -f /var/www/html/sms/smsml.php ${CALLERID(num)} ${EXTNUM})
same => n,GoTo(macro-hangupcall,s,1)
Рассмотрим подробно, что прописали в диалплане. Здесь мы изменили завершение вызова в стандартном контексте ext-local. Теперь при завершении вызова будет проверяться наличие Follow Me на внутреннем номере. Если Follow Me существует, то передаём мобильный номер, на который ушёл вызов, в переменную EXTNUM. В противном случае передаём внутренний номер, на который был осуществлён вызов. Далее вызываем скрипт, в который передаём номер звонящего и номер, который был возвращён в переменную EXTNUM.
Теперь при звонке будут происходить следующие действия: номер, на который был осуществлён вызов, будет проверяться в файле exten.php. Если он там имеется, то на мобильный номер, «привязанный» к внутреннему номеру, будет отправлено SMS-уведомление. Соответственно, если номер найден не будет, SMS-уведомление не придёт.
В качестве примера осуществим вызов с 0009 на 0008. По логу видно, что мы перешли в контекст ext-local, где было вызвано выполнение скрипта smsml.php.
В течение некоторого времени также пришло SMS-уведомление о том, что звонил 0009 Иванов Иван.
Статья по интеграции Asterisk с SMS-сервисом MegaLabs завершена.
Остались вопросы?
Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.