Web-интерфейс «Мультистатус»
В данной статье будет описан интерфейс и скрипт взаимодействия с API услуги «мультифон» предоставляемой оператором «Мегафон».
Что из себя представляет приложение
Оператор мегафон позволяет своим клиентом самостоятельно запрашивать баланс, получать и изменять направление звонка. На выбор предоставляются такие варианты распределения входящего звонка как:
1.Только на sim-карту
2.Только на sip-учётку
3.Паралельно и на sip и на sim
Управлять ими можно через HTTP запросы вида: https://sm.megafon.ru/sm/client/balance/[email protected]&password=PASSWORD
— запросить баланс на номере
https://sm.megafon.ru/sm/client/routing/[email protected]&password=PASSWORD
— запросить статус маршрутизации
https://sm.megafon.ru/sm/client/routing/[email protected]&password=PASSWORD&routing=0
— изменить статус маршрутизации
Подробнее и о других возможностях можно подробнее узнать на официальном сайте оператора или тут.
Мы же рассмотрим универсальный интерфейс взаимодействия, который не требует от пользователя особых знаний работы с HTTP запросами. Будет прост и интуитивно понятен.
Он представляет из себя простую страницу, содержащую список номеров и два селектора в той же строке. Первый назван «маршрутизация», второй «баланс». Выбрав необходимые пункты остается лишь нажать «запрос». Скрипт автоматически соберёт необходимую ссылку, выполнит отправку, получит и распарсит результат в удобный и понятный вид. Пример работы можно рассмотреть выше на скрине.
Процесс установки и настройки
Установка ограничивается лишь распаковкой архива приложения в корневую директорию web-сервера или в любое другое место, главное чтобы была возможность получить доступ из браузера по ссылке.
На примере будет рассмотрен способ с указанием отдельной директории с привязкой порта.
После распаковки перейдём к настройке. Она так же не затруднительна: нам понадобится список номеров и паролей занести в файл ../multistatus/settings.php. По умолчанию он имеет следующую структуру:
<?php
$numbers_list=[
«790*******8» => «e*******H»,
«792*******0» => «W*******v»,
]
?>
Нам необходимо заменить два имеющиеся примера на собственные и внести недостающие номера.
После чего можно открыть в браузере ссылку на приложение в нашем примере это: http://192.168.170.157:1526/multistatus/
Принцип работы
3.1.При переходе на страницу необходимо выполнить демонстрацию интерфейса с присутсивем настроенных номеров и триггеров для запроса. Что и делаем следующим кодом:
$content=»;
Создаем переменную с пустым содержимым, чтобы избежать предупреждений php-интерпретатора.
foreach($numbers_list as $trunk => $secret){
Выполняем проход по всему массиву (а ведь именно его мы заполняли в файле settings.php и именно поэтому важно не нарушать структуру примера)
$chk1=(isset($_POST[‘rout’]) && array_key_exists($trunk,$_POST[‘rout’]))?’checked’:»;
$chk2=(isset($_POST[‘balance’]) &&array_key_exists($trunk,$_POST[‘balance’]))?’checked’:»;
Восстанавливаем триггеры согласно переданному массиву POST, чтобы значения отображаемые на странице не сбрасывались каждый раз при обновлении страницы.
$content .=»
<tr>
<td>$trunk</td>
<td><input type=’checkbox’ name=’rout[$trunk]’ value=’$secret’ $chk1 /></td>
<td><input type=’checkbox’ name=’balance[$trunk]’ value=’$secret’ $chk2 /></td>
</tr>»;
}
Заполняем предопределенную переменную строками с соответствующими триггерами.
echo »
<form action=» method=’post’>
<table border=’1′ width=’100%’>
<tr>
<th width=’60%’>Номер</th>
<th width=’20%’>Маршрутизация</th>
<th width=’20%’>Баланс</th>
</tr>
$content
<tr>
<td colspan=’3′>
<button name=’send’ value=’ok’ class=’bt_long’>Запрос</button>
</td>
</tr>
</table>
</form>»;
После чего выводим на страницу форму, внутри которой содержится таблица с номерами, триггерами и кнопкой отправки.
Через отправку POST-запроса на сервер может у нас имеется два обработчика: для баланса и маршрутизации соответственно.
1. Обработка запроса баланса заключается в следующем:
$content3=»;
$balance_color=»;
if(isset($_POST[‘send’],$_POST[‘balance’])){
Проверяем наличие данных в POST запросе о балансе
foreach($_POST[‘balance’] as $trunk => $secret){
Выполняем проход по всем переданным данным относящимся к балансу
$result_balance=@simplexml_load_string(file_get_contents(«https://sm.megafon.ru/sm/client/balance/[email protected]&password=$secret»));
Формируем HTTP-запрос, выполняем его и тут же производим дешифровку XML в массив, для удобства обработки.
//echo “https://sm.megafon.ru/sm/client/balance/[email protected]&password=$secret <br />”; //сheckar($result_balance);
Строки закомментированные относятся к мониторингу и тестированию, поэтому можно оставить так или удалить.
if($result_balance && $result_balance->balance!=’Error!’){
$balance_color=(strpos($result_balance->balance,»-«,0) !== false)?’red’:’green’;
Проверяем массив на пустоту и на наличие ошибки в возвращенном результате. Если всё хорошо, переходим к следующему шагу. В зависимости от знака полученного числа меняем цвет текста на красный (отрицательный) или зелёный (положительный).
$content3 .=»
<tr>
<td>$trunk</td>
<td><font color=’$balance_color’>».$result_balance->balance.»</font></td>
</tr>»;
}
И заполняем переменную которая будет выведена на страницу.
Else{
$content3 .=”
<tr>
<td>$trunk</td>
<td>Не удалось получить</td>
</tr>”;
}
Если хорошо не всё, тоже заполняем, но уже уведомлением об ошибке.
Sleep(0.5); // Даем передышку в полсекунды, чтобы нас не сочли DDoS’ом
}
Комментарий в коде
echo »
<table border=’1′ width=’100%’>
<tr>
<th width=’60%’>Номер</th>
<th width=’40%’>Баланс</th>
</tr>
$content3
</table>»;
}
После чего выводим всё отдельной таблицей ниже основной.
2. Обработка маршрутизации в целом аналогична. Но имеет ряд отличий:
$content2=»;
$rout_replace=»;
if(isset($_POST[‘send’],$_POST[‘rout’])){
Проверяем в POST-запросе информацию по маршрутам
foreach($_POST[‘rout’] as $trunk => $secret){
Выполняем проход по всем полученным данным
$result_routing=@simplexml_load_string(file_get_contents(«https://sm.megafon.ru/sm/client/routing/[email protected]&password=$secret»));
Отправляем запрос, получаем результат и преобразуем в массив.
//echo “https://sm.megafon.ru/sm/client/routing/[email protected]&password=$secret <br />”;
if($result_routing) switch($result_routing->routing){
case «0»: $rout_replace=’Только sim-карта’;
break;
case «1»: $rout_replace=’Только sip-транк’;
break;
case «2»: $rout_replace=’Паралельно SIP и SIM’;
break;
}
После чего заменяем индексные значения в понятные, если результат есть
else{
$rout_replace=’Не удалось получить’;
}
И оповещаем об ошибке, если его нет
$content2 .=»
<tr>
<td>$trunk</td>
<td>$rout_replace</td>
</tr>»;
sleep(0.5); // Даем передышку в полсекунды, чтобы нас не сочли DDoS’ом
}
После чего выводим таблицу в конец страницы
echo »
<table border=’1′ width=’100%’>
<tr>
<th width=’60%’>Номер</th>
<th width=’40%’>Машрутизация</th>
</tr>
$content2
</table>»;
}
Остались вопросы?
Я - Кондрашин Игорь, менеджер компании 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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.