artem
05.12.2018
2373

Web-интерфейс «Мультистатус»

В данной статье будет описан интерфейс и скрипт взаимодействия с API услуги «мультифон» предоставляемой оператором «Мегафон».

1.Что из себя представляет приложение

Оператор мегафон позволяет своим клиентом самостоятельно запрашивать баланс, получать и изменять направление звонка. На выбор предоставляются такие варианты распределения входящего звонка как:

1.Только на sim-карту

2.Только на sip-учётку

3.Паралельно и на sip и на sim

Управлять ими можно через HTTP запросы вида: https://sm.megafon.ru/sm/client/balance/?login=PHONE@multifon.ru&password=PASSWORD

— запросить баланс на номере

https://sm.megafon.ru/sm/client/routing/?login=PHONE@multifon.ru&password=PASSWORD

— запросить статус маршрутизации

https://sm.megafon.ru/sm/client/routing/set?login=PHONE@multifon.ru&password=PASSWORD&routing=0

— изменить статус маршрутизации

Подробнее и о других возможностях можно подробнее узнать на официальном сайте оператора или тут.

Мы же рассмотрим универсальный интерфейс взаимодействия, который не требует от пользователя особых знаний работы с HTTP запросами. Будет прост и интуитивно понятен.

Рис. 1

Он представляет из себя простую страницу, содержащую список номеров и два селектора в той же строке. Первый назван «маршрутизация», второй «баланс». Выбрав необходимые пункты остается лишь нажать «запрос». Скрипт автоматически соберёт необходимую ссылку, выполнит отправку, получит и распарсит результат в удобный и понятный вид. Пример работы можно рассмотреть выше на скрине.

2.Процесс установки и настройки

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

На примере будет рассмотрен способ с указанием отдельной директории с привязкой порта.

После распаковки перейдём к настройке. Она так же не затруднительна: нам понадобится список номеров и паролей занести в файл ../multistatus/settings.php. По умолчанию он имеет следующую структуру:

<?php
$numbers_list=[
               «790*******8» => «e*******H»,
               «792*******0» => «W*******v»,
]

?>

Нам необходимо заменить два имеющиеся примера на собственные и внести недостающие номера.

После чего можно открыть в браузере ссылку на приложение в нашем примере это: http://192.168.170.157:1526/multistatus/

Рис. 23.Принцип работы

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_contentshttps://sm.megafon.ru/sm/client/balance/?login=$trunk@multifon.ru&password=$secret«));

Формируем HTTP-запрос, выполняем его и тут же производим дешифровку XML в массив, для удобства обработки.

               //echo “https://sm.megafon.ru/sm/client/balance/?login=$trunk@multifon.ru&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_contentshttps://sm.megafon.ru/sm/client/routing/?login=$trunk@multifon.ru&password=$secret«));

Отправляем запрос, получаем результат и преобразуем в массив.

               //echo “https://sm.megafon.ru/sm/client/routing/?login=$trunk@multifon.ru&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>»;
}

Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.