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

Последовательные переадресации через 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>";
}
Общий вид
Общий вид
Направление на контекст переадресации должно быть выставлено заранее.

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

Демонстрация
Демонстрация

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

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

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

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