Александр Мисюрин
01.06.2020
387662

Настройка переадресаций и режима DND по списку из примонтированной директории

В данной статье рассмотрим возможность создания переадресаций с номеров операторов, а также режима «Не беспокоить», с помощью списка, помещаемого на примонтированную директорию. Для возможности редактировать подобные режимы без доступа в админ панель, либо через какую либо утилиту секретарем или супервайзером. Монтирование директории и создание файла из-под Windows Чтобы корректно указывать переадресации и постановку DND, необходимо […]

В данной статье рассмотрим возможность создания переадресаций с номеров операторов, а также режима «Не беспокоить», с помощью списка, помещаемого на примонтированную директорию. Для возможности редактировать подобные режимы без доступа в админ панель, либо через какую либо утилиту секретарем или супервайзером.

Для монтирования директории в Windows используем nfs. Следовательно, компоненты NFS для Windows должны быть включены.

Монтирование директории и создание файла из-под Windows

Чтобы корректно указывать переадресации и постановку DND, необходимо проверить какие данные меняются на АТС при включении этих режимов обычным способом.

DND & CF изменяют записи в базе, а также статус пира.

Соответственно необходимо будет менять devstate и запись в базе соответственно выбранному режиму.

При большом количестве операторов, следует запускать подобный скрипт в нерабочее время, либо ограничивать выполнение в цикле таймером (непример sleep 0.5).

Записи из файла будем получать скриптом, применять в нем же, по аналогии со статьей выше. Записи в файл необходимо вносить в формате: номер оператора — необходимое действие. (Для DND yes/no (да/нет), для CF просто номер переадресации).

Как пример:

101,74959898533

102,yes

103,nocf

104,no

Функцию перевода файла таблицы в строку приведем ниже:

function str_to_arr($str){
	$piece=array();
	$string=array();
	$arr=array();
	$j=0;
	$string = explode ("\n",$str);
	for($i=0;$i<count($string);$i++){
  	$piece=explode(",",$string[$i],2);
  	if (isset($piece[1])){
    	$arr[trim($piece[0])]=trim($piece[1]);
  	}
	}	
    return $arr;
  }
$strvars = file_get_contents('/usr/src/nfs/1.csv');
$arrayvars=str_to_arr($strvars);
Формат файла для корректной работы должен быть: csv UTF-8.

Для проверки заполнения будем использовать цикл с условиями, ниже тестовый вариант для наглядного вывода:

foreach ($arrayvars as $key => $value) {
            	if (preg_match("/[0-9]{3,4}/", $key))
            	{
                    	if ($value == "yes") {
                    	    	echo $key." - DND ON\r\n";
                    	} elseif ($value == "no")
                    	{
                           	echo $key." - DND OFF\r\n";
                    	} elseif ($value == "nocf")
                    	{
                           	echo $key." - CF SETUP OFF\r\n";
                    	} elseif (preg_match("/[78][3-9][0-9]{9}/", $value))
                    	{
                           	echo $key." - CF SETUP: $value\r\n";
                    	} else {echo "Неверный параметр: $value\r\n";}
            	} else { echo "Неверный оператор: $key\r\n"; }

Как видно выше, строки заполненные неверно не будут обработаны. Также желательно ограничить возможные для переадресации номера, чтобы не было возможности поставить МН направление, например. Ошибочные данные можно выводить в отдельный файл, если необходим анализ ошибок.

Проверка заполнения таблицы

Проверка реализована, теперь перейдем к заполнению необходимых данных.

Для обоих режимов (как DND так и переадресации), необходим статус пира «BUSY», выставляется он через консольную команду devstate change (CLI консоль asterisk). Также необходимо внести запись в AstDB, в соответствующий раздел.

Для DND:

devstate change Custom:DEVDND100 BUSY

devstate change Custom:DND100 BUSY

database put DND 100 yes

Для CF:

devstate change Custom:DEVCF100 BUSY

devstate change Custom:CF100 BUSY

database put CF 100 74959999999

Для снятия, необходимо выставить статус NOT_INUSE и удалить запись из базы.

Соответственно теперь, для каждой соответствующей строки нужно прописать команды.

foreach ($arrayvars as $key => $value) {
if (preg_match("/[0-9]{3,4}/", $key))
  {
	if ($value == "yes") {
	echo $key." - DND ON\r\n";
	$dndon1=`/usr/sbin/asterisk -rx "devstate change Custom:DEVDND$key BUSY"`;
	$dndon2=`/usr/sbin/asterisk -rx "devstate change Custom:DND$key BUSY"`;
	$dndon3=`/usr/sbin/asterisk -rx "database put DND $key yes"`;
	} elseif ($value == "no")
     {
      echo $key." - DND OFF\r\n";
      $dndoff1=`/usr/sbin/asterisk -rx "devstate change Custom:DEVDND$key NOT_INUSE"`;
      $dndoff2=`/usr/sbin/asterisk -rx "devstate change Custom:DND$key NOT_INUSE"`;
      $dndoff3=`/usr/sbin/asterisk -rx "database del DND $key"`;
     } elseif ($value == "nocf")
      {
       echo $key." - CF SETUP OFF\r\n";
       $cfoff1=`/usr/sbin/asterisk -rx "devstate change Custom:DEVCF$key NOT_INUSE"`;
	   $cfoff2=`/usr/sbin/asterisk -rx "devstate change Custom:CF$key NOT_INUSE"`;
	   $cfoff3=`/usr/sbin/asterisk -rx "database del CF $key"`;
      } elseif (preg_match("/[78][3-9][0-9]{9}/", $value))
       {
        echo $key." - CF SETUP: $value\r\n";
        $cfon1=`/usr/sbin/asterisk -rx "devstate change Custom:DEVCF$key BUSY"`;
       $cfon2=`/usr/sbin/asterisk -rx "devstate change Custom:CF$key BUSY"`;
        $cfon3=`/usr/sbin/asterisk -rx "database put CF $key $value"`;
      } else {echo "Неверный параметр: $value\r\n";}
} else { echo "Неверный оператор: $key\r\n"; }
}

Проверяем выполнив скрипт:

php -f cfdnd.php
Смена статусов и установка режимов
Смена статусов и установка режимов
Полная проверка

Далее скрипт можно поместить в крон на выполнение раз в сутки, либо запускать вручную с помощью телефонного номера.

Например утром, в 9 по будням:

0 9 * * 1-5 php -f /usr/src/cfdnd.php

Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments

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

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