Александр Мисюрин
06.11.2019
115

Последовательные переадресации через custom destination. Веб-интерфейс управления

В предыдущей статье рассматривали способ реализации последовательных переадресаций, с помощью базы данных AstDB и модуля custom destination. В данной статье рассмотрим вариант реализации веб-интерфейса управления данным функционалом. Создаем таблицу в базе asteriskcdrdb: Записываем функции получения номеров в func_odbc.conf Перегружаем конфигурации системы core reload’ом В самом контексте заменяем ссылки к базе: Итак мы перенесли нахождение номеров […]

В предыдущей статье рассматривали способ реализации последовательных переадресаций, с помощью базы данных AstDB и модуля custom destination.

В данной статье рассмотрим вариант реализации веб-интерфейса управления данным функционалом.

Для тестирования использовалась система: CentOS 6.9, FreePBX 13, Asterisk 13 собранный с ODBC
Для наглядности ниже приведу контекст переадресаций.
Для наглядности ниже приведу контекст переадресаций.
К сожалению корректно вывести базу на страницу не выйдет, поскольку записи first и second являются отдельными ключами, в таком случае базу необходимо перенести в Mysql и написать функцию обработки.

Создаем таблицу в базе asteriskcdrdb:

create table extsfailover (
exten varchar(5) NOT NULL,
numfirst varchar(5) NOT NULL,
numsecond varchar(5) NOT NULL,
PRIMARY KEY `exten` (`exten`)
) DEFAULT CHARSET=utf8 ENGINE=InnoDB;

Записываем функции получения номеров в func_odbc.conf

[firstnum]
dsn=asteriskcdrdb
readsql=select numfirst from extsfailover where exten=${EXTEN};

[secondnum]
dsn=asteriskcdrdb
readsql=select numsecond from extsfailover where exten=${EXTEN};

Перегружаем конфигурации системы core reload’ом

И проверяем наличие нужных функций
И проверяем наличие нужных функций

В самом контексте заменяем ссылки к базе:

[failover-exts-manager]
exten => _X.,1,NoOp(== ${ODBC_firstnum()} - ${ODBC_secondnum()} ==)
same => n,ExecIf($["${ODBC_firstnum()}"!=""]?Dial(Local/${ODBC_firstnum()}@ext-local,20,Ttr))
same => n,ExecIf($["${ODBC_secondnum()}"!=""]?Dial(Local/${ODBC_secondnum()}@ext-local,20,Ttr))
same => n,Goto(check-callstate,s-NOANSWER,1)

Итак мы перенесли нахождение номеров для переадресации в Mysql, теперь реализуем веб-интерфейс конфигурации.

Указываем функцию подключения к БД (пользователь должен иметь доступ к чтению созданной таблицы):

function bd_bridge($db,$q){
                $link = @mysqli_connect('localhost','user','password',$db) or die("Error: ".@mysqli_connect_error($link));
                $rs = @mysqli_query($link, $q) or die("Error: ".@mysqli_error($link));
                if($rs){
                        return $rs;
                        @mysqli_free_result($rs);
                }
                else{
                }
                mysqli_close($link);
        }

Выводим форму с текущими записями :

echo "<form action=''  method='post'>
<table border=1>
<tr>
	<td>ExtenNum</td>
	<td>ForwardNumFirst</td>
	<td>ForwardNumSecond</td>
	<td>Удалить</td>
</tr>";

$result = bd_bridge('asteriskcdrdb',"select exten, numfirst, numsecond from extsfailover;");
while ($row = mysqli_fetch_array($result))
{
	$ExtenNum = $row[0];
	$ForwardNumFirst = $row[1];
	$ForwardNumSecond = $row[2];

	echo "<tr>
			<td>$ExtenNum</td>
			<td>$ForwardNumFirst</td>
			<td>$ForwardNumSecond</td>
			<td><input type='checkbox' name='temp_arr[]' value='$row[0]' id='$row[0]' /></td>
		</tr>";

}

Формы ввода новых значений, кнопки удаления и добавления/изменения:

echo "</table>
<p><input type='submit' name='delete' value='Удалить'/></p></form>";
echo "<form action=''  method='post'>
Номер назначения:<input name=exten type=text pattern='[0-9]{3,5}' required>
Первая переадресация:<input name=first type=text pattern='[0-9]{3,5}'>
Вторая переадресация:<input name=second type=text pattern='[0-9]{3,5}'>
	<p><input type='submit' name='change' value='Добавить/Изменить'/></p>
</form>";

Обработчики добавления:

if(isset($_POST['change'])){
	$request = mysqli_fetch_array(bd_bridge("asteriskcdrdb","REPLACE INTO extsfailover VALUES ('".$_POST['exten']."','".$_POST['first']."','".$_POST['second']."');"));
	echo "<script language='JavaScript' type='text/javascript'>window.location.replace('index.php')</script>";
}

Обработчик удаления:

if(isset($_POST['delete'])){
	foreach ($_POST[temp_arr] as $value){
		$request = mysqli_fetch_array(bd_bridge("asteriskcdrdb","DELETE FROM extsfailover WHERE exten='".$value."';"));
		
	}
	echo "<script language='JavaScript' type='text/javascript'>window.location.replace('index.php')</script>";
}
Общий вид
Общий вид
Направление на контекст переадресации должно быть выставлено заранее.

!Направление на контекст переадресации должно быть выставлено заранее.

Демонстрация
Демонстрация
 
avatar
  Подписаться  
Уведомление о

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

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

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

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

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

ONLINE

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices