Добавление нового ключа в fwconsole, и создание fwconsole password.
В этой статье рассмотрим как добавляются новые ключи в утилиту fwconsole на примере простого вывода пароля от внутреннего номера (или группы внутренних номеров) в командной строке. Утилита fwconsole позволяет из командной строки управлять некоторыми процессами FreePBX, к примеру перезагружать, применять конфигурационные файлы, включать/отключать транки. Более подробно о возможностях fwconsole можно прочесть в статье Использование fwconsole […]
В этой статье рассмотрим как добавляются новые ключи в утилиту fwconsole на примере простого вывода пароля от внутреннего номера (или группы внутренних номеров) в командной строке.
Утилита fwconsole позволяет из командной строки управлять некоторыми процессами FreePBX, к примеру перезагружать, применять конфигурационные файлы, включать/отключать транки. Более подробно о возможностях fwconsole можно прочесть в статье Использование fwconsole во FreePBX 13.
Но, к сожалению, список таких параметров ограничен. В этой статье рассмотрим, как можно расширить параметры своими функциями.
Правки кода
В этом разделе рассмотрим, какие правки в код FreePBX необходимо внести для добавления новых ключей в fwconsole.
Большинство основных ключей fwconsole описаны классами в каталоге …/admin/libraries/Console/.
Создадим здесь новый файл Pass.class.php и откроем его в режиме редактирования.
Перед объявлением класса необходимо прописать пространство имён и всё, что по-стандарту используется:
namespace FreePBX\Console\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
Теперь переходим к описанию самого класса. В файл вставляем следующий код:
class Pass extends Command
{
…
}
Внутрь данного класса будем помещать методы и свойства.
Так как отображать пароли необходимо не только одного-двух внутренних номеров, но и целого диапазона, ограничим его ширину. Установим максимальную ширину одного диапазона — не более 1000 внутренних номеров. Для этого прописываем следующее свойство:
private $max_length_range = 1000;
Теперь объявим конфигурацию нашего ключа. Делается это следующим методом:
protected function configure()
{
$this->FreePBXConf = \FreePBX::Config();
$this->setName('pass')
->setAliases(array('password'))
->setDescription(_('Get secret of extensions'))
->setDefinition(array(
new InputArgument('args', InputArgument::IS_ARRAY, null, null),));
}
Здесь, в параметре setName указываем имя ключа, по которому будем обращаться; в setAliases указываем возможные алиасы (удобные для запоминания) имена; в setDescription указываем описание работы fwconsole с этим ключом. Массивы аргументов оставляем по умолчанию.
Перейдём к описанию метода выполнения. Объявляется он стандартно для большинства классов ключей fwconsole:
protected function execute(InputInterface $input, OutputInterface $output)
{
…
}
В тело данного метода помещается код, описывающий работу ключа. В нашем случае, код следующий:
$args = $input->getArgument('args');
foreach ($args as $ext)
{
if (strpos($ext, '-') !== false)
$this->getPassByRange($ext, $output);
else
{
$ext_info = \FreePBX::Core()->getDevice($ext);
if (empty($ext_info['secret']))
$ext_info['secret'] = 'Not found';
$output->writeln($ext . ' : ' . $ext_info['secret']);
}
}
Коротко рассмотрим код, описанный выше. Сперва, стандартным методом getArgument получаем список всех аргументов (внутренних номеров и диапазонов), пароль которых необходимо получить. Если данный аргумент является диапазоном, то вызываем метод getPassByRange (её описание рассмотрим ниже). Если данный аргумент является обычным внутренним номером, то вызываем метод getDevice модуля Core, с помощью которого получаем пароль.Его выводим в консоль с помощью метода writeln. Каждый такой вывод будет располагаться в отдельной строке.
Теперь рассмотрим функцию getPassByRange:
private function getPassByRange($range, $output)
{
$range_list = explode('-', $range);
if (empty($range_list[0]) || empty($range_list[1]))
{
$output->writeln($range . ' : Incorrect! Left or right part of range is empty');
return true;
}
$begin = trim($range_list[0]);
$end = trim($range_list[1]);
if (!is_numeric($begin) || !is_numeric($end) || $begin > $end)
{
$output->writeln($range . ' : Incorrect range!');
return true;
}
$length = $range_list[1] - $range_list[0];
if ($length > $this->max_length_range)
{
$output->writeln($range . ' : exts counts more '. $this->max_length_range . '. If you really need this, please set another value for $max_length_range variable in file .../admin/libraries/Console/Pass.class.php');
return true;
}
$i = $begin;
while ($i <= $end)
{
$ext_info = \FreePBX::Core()->getDevice($i);
if (empty($ext_info['secret']))
$ext_info['secret'] = 'Not found';
$output->writeln($i . ' : ' . $ext_info['secret']);
$i = $this->customInc($i);
}
}
Коротко рассмотрим описанный выше код. В массив $range_list помещаем левую и правую границы диапазона. Затем проверяем, что эти границы существуют и являются числовыми. Также проверяем, что размер диапазона не превышает максимально допустимого max_length_range, объявленного ранее.
Если все условия выполнены, то запускаем цикл от левой границы диапазона до правой с шагом 1, в котором получаем пароль с помощью метода getDevice и выводим его.
Для инкремента счётчика цикла используем кастомную функцию customInc:
private function customInc($i)
{
$len = strlen($i);
$i++;
while(strlen($i) < $len)
$i = '0' . $i;
return $i;
}
Она необходима для правильного инкремента внутренних номеров с ведущим нулём, к примеру: 0008, 0009. Ведь если увеличивать стандартной функцией inc, то получим: inc(0008) = 9, а номер 0009 и 9 вовсе не одно и то же для Asterisk.
На этом описание класса Pass.class.php завершено.
Теперь необходимо изменить владельца этого файла на пользователя asterisk. Делается это командой:
chown asterisk:asterisk Pass.class.php
из директории …/admin/libraries/Console/.
Можно переходить к тестированию функционала.
Выведем в консоль пароли внутренних номеров 101, 111, несуществующего номера 106 и диапазона номеров 0020-0022. Для этого воспользуемся командой:
fwconsole pass 101 111 116 0020-0022
Как видим из скриншота выше, получили запрашиваемые пароли. В случае с несуществующим номером 116 получаем сообщение “Not Found”.
На этом статья по добавлению нового ключа в fwconsole на примере создания нового ключа password завершена.
Остались вопросы?
Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.