Web интерфейс к Tune

Материал из М-200 WIKI

Перейти к: навигация, поиск

Благодаря тому что MTA Group разработала несколько программ для ОС Linux, появилась возможность интегрировать их с различными сценариями

Ниже описан скрипт который представляет Web интерфейс для программыTune.

Для разработка и проверки использовались:

  • Debian Linux 5.03

Программное обеспечение

  • Apache2
  • perl
  • libapache2-mod-perl2

Для испытаний использовалась АТС М-200 с мотором 5.47.00, MTA GROUP рекомендует использовать АТС с мотором не ниже 5.58.00

Для написания сценария выбран язык программирования perl из-за распространенного класса Net::Telnet.

Настройка скрипта сводится к правке под себя следущих строк:

$obj = new Net::Telnet (Timeout => 10,
Prompt => '/RESULS/',
Host => 'localhost',
Port => '20001'
);

 Где localhost - IP адрес сервера с запущенной программой Tune, 20001 - порт серверной части программы Tune

Текст скрипта ниже сохранить в файл user_info_mod.cgi в Web директорию сервера.

У меня сценариям на языке perl разрешено выполняться в основной web директории, у вас это может быть cgi-bin. Это на ваше усмотрение.


#!/usr/bin/perl
print "Content-type: text/html\n\n";
print '<meta http-equiv="content-type" content="text/html;charset=utf-8">';
print '<html><title>M200 Управление Абонентом</title><body>';
use CGI qw(param); # Перехват значений из адресной строки
$page=param("page"); #имя страницы
$numer=param("numer"); #Номер абонента
$postcmd=param("postcmd");# Параметры после команды
$but1=param("but1"); # Состояние кнопки "Запросить Настройки"
$but2=param("but2"); # Состояние кнопки "Сохранить Настройки"
$ob_nastr=0;
$tip_svyaz=0;
$raz_dvo=0;
$sost_dvo=0;
#Ассоциативный массив значение gettune
%abconf = ("use", "Включен",
"aon", "Номер АОН",
"cat", "Категория АОН",
"redirect", "Номер переадресации",
"alarm", "Время пробуждения",
"pincode","PIN-код",
"priv","Уровень привилегий",
"cmn_tone","Тональный набор",
"cmn_outcome","Исходящая связь",
"cmn_income","Входящая связь",
"cmn_external","Внешние номера",
"cmn_payservice","Платные службы",
"cmn_8xxx","Междугородняя связь",
"cmn_10xxx","Международная связь",
"cmn_aon","Выдача АОНа",
"cmn_82xxx","Выход на 82 ",
"enb_flash","Разрешение Flash",
"enb_redirect","Разрешение переадресации",
"enb_alarm","Разрешение будильника",
"enb_pincode","Разрешение пинкода",
"enb_autodial","Автодозвон",
"enb_intercept","Вмешательство",
"enb_notification","Уведомление",
"enb_evilcall","Злонамеряный вызов",
"enb_callerid","Выдача CallerID ",
"dvo_redirect_always","Переадресация всегда",
"dvo_redirect_busy","Переадресация по занятости",
"dvo_redirect_silence","Переадресация по неответу",
"dvo_alarm","Состояние будильника",
"dvo_notification","Уведомление",
"dvo_nodisturb","Не беспокоить",
"dvo_pincode" , "PIN-код",
"dvo_clir","Сокрытие номера"
);

print "<form action='user_info_mod.cgi' method='get' target='_self' style='margin:1'>
<table width='100%' border='1' bgcolor='c6d4dc'>
<tr>
<td width='25%'>Номер абонента: <input type='text' name='numer' value=$numer size='9'></td>
<td width='15%'><input type='submit' name='but1' value='Запросить настройки' size='9'></td>
<td width='15%'><input type='submit' name='but2' value='Сохранить настройки' size='9'></td>
<td width='50'> </td>
<input type='hidden' name='page' value=$page>
</tr>
<tr>
<td colspan=4>";
use Net::Telnet ();
#Создаем объект
$obj = new Net::Telnet (Timeout => 10,
                                   Prompt => '/RESULS/',
                                   Host => 'localhost',
                                   Port => '20001'
                                      );
#Если строка номера не пуста
#и если нажата первая кнопка, то формируем запрос
if (($numer!="") && ($but1 eq "Запросить настройки")) { #начало if "Запрос настроек"
        @lines = $obj->cmd(String => "gettune $numer");
#Разберем вывод по строкам
   $size_lines = scalar @lines; #Вычислим рамер массива
   for ($i=2;$i<$size_lines;$i++) #Печатаем до конца последнего элемента
          { # начало печати массива @lines
# Результат впишем в переменные $peredeq ( 'напр. use=on
# т.е $peredeq=use, $posleeq=on)
$peredeq=substr(@lines[$i],0,index(@lines[$i],"="));
$posleeq=substr(@lines[$i],(index(@lines[$i],"="))+1,index(@lines[$i],"\n"));

#################################################
# Начало цикла перебора массива %abconf
foreach $sovpad (keys %abconf) {
if ( $sovpad eq $peredeq ){ #начало if

# Выдираем из $peredeq начало строки (напр. cmn_tone то
# $uslugi="cmn";
$uslugi=substr($peredeq,0,index($peredeq,"_"));
#если cmn то печатаем строку таблицы ТИПЫ СВЯЗИ

if (($uslugi eq "cmn" ) && ($ob_nastr==0)){
print "<tr><td colspan=4><center><b>Типы связи</b></center></td></tr>"; $ob_nastr=1;
}
#если enb то печатаем строку таблицы РАЗРЕШЕНИЕ НА ДВО
if (($uslugi eq "enb" ) && ($raz_dvo==0)){
print "<tr><td colspan=4><center><b>Разрешение на ДВО</b></center></td></tr>"; $raz_dvo=1;
}
#если dvo то печатаем строку таблицы СОСТОЯНИЕ ДВО
if (($uslugi eq "dvo" ) && ($sost_dvo==0)){
print "<tr><td colspan=4><center><b>Состояние ДВО</b></center></td></tr>"; $sost_dvo=1;
}
#если ни одно из верхних условий то Общие настройки
if (($uslugi ne "cmn" ) && ($uslugi ne "enb") && ($uslugi ne "dvo") && ($ob_nastr==0) )
{
print "<tr><td colspan=4><center><b>Общие Настройки</b></center></td></tr>"; $ob_nastr=1;
}
print "<tr><td colspan=2>",$abconf{$sovpad},"</td>";
if ($posleeq eq "on\n"){
print "<td bgcolor='green' colspan=2> <INPUT TYPE=RADIO NAME=$peredeq VALUE='on' checked>Да
<INPUT TYPE=RADIO NAME=$peredeq VALUE='off'>Нет</td>";}
if ($posleeq eq "off\n"){
print "<td bgcolor='red' colspan=2><INPUT TYPE=RADIO NAME=$peredeq VALUE='on'>Да
<INPUT TYPE=RADIO NAME=$peredeq VALUE='off' checked>Нет</td>";}
if (($posleeq ne "on\n") && ($posleeq ne "off\n")) {
print "<td colspan=2><input type='text' size='9' name=$peredeq value=$posleeq></td>";}

print "</tr>";

} # конец if
} #конец foreach
#Конец цикла перебора цикла %abconf
###################################################
} # конец печати @lines
} # конец if "Запрос настроек"
# Посылка настроек командой в TELNET
if (($numer!="") && ($but2 eq "Сохранить настройки"))
                 { # начало if "Сохранение настроек"
foreach $sovpad2 (keys %abconf) {
@llines=$sovpad2."=".param($sovpad2)." ";
$cmd="$cmd"."@llines";
}
$cmd="$numer"." "."$cmd";
$obj->cmd(String => "settune $cmd");
print "</br></br></br></br>";
print "<center><b>Наcтройки абонента $numer изменены!</b></center>";
print "</br></br></br></br>"; } # конец if "Сохранение настроек"
# Конец посылки
print '</td></tr>
</table></form></body></html>';

Результат работы смотрим на своем Вэб-сервере по ссылке http://localhost/user_info_mod.cgi

Категории