Денис Пестрецов
21.10.2019
11070

Доработка FreePBX. Phonebook. Отключение Speed Dial

В данной статье рассмотрим возможность отключить ввод Speed Dial Code в модуле Phonebook. Как видно из названия, модуль Phonebook отвечает за настройку телефонной книги, используемой в Asterisk. Постановка задачи Рассмотрим, в каком случае данная доработка будет полезна. Для начала перейдём в модуль Admin -> Asterisk Phonebook. На скриншоте выше видно, что в таблице отображения Phonebook […]

Доработка FreePBX Phonebook Speed Dial

В данной статье рассмотрим возможность отключить ввод Speed Dial Code в модуле Phonebook.

Как видно из названия, модуль Phonebook отвечает за настройку телефонной книги, используемой в Asterisk.

Постановка задачи

Рассмотрим, в каком случае данная доработка будет полезна. Для начала перейдём в модуль Admin -> Asterisk Phonebook.

Общий вид модуля Phonebook.
Общий вид модуля Phonebook.

На скриншоте выше видно, что в таблице отображения Phonebook присутствует поле Speeddial.

Откроем любой номер для редактирования. Для этого необходимо нажать на «карандаш» поля Actions.

Редактирование записи
Редактирование записи

При редактировании также присутствует поле Speed Dial Code. Если Set Speed Dial стоит в положении «Yes», то заполнение Speed Dial Code необязательно, так как оно будет заполнено автоматически. В противном случае, Если оставить поле Speed Dial Code пустым, то получим ошибку:

Ошибка пустого Speed Dial
Ошибка пустого Speed Dial

Рассмотрим что будет, если добавить два номера с одинаковым значением Speed Dial. Добавим в телефонную книгу новый номер. В поле Set Speed Dial укажем значение 95.

Добавление в Phonebook
Добавление в Phonebook

 После этого добавим ещё один тестовый номер. В поле Set Speed Dial также укажем номер 95. После того, как нажмём кнопку Submit Changes, увидим, что у первого контакта значение поля Speeddial оказалось пустым.

Задвоенные Speed Dial
Задвоенные Speed Dial

Реализация

Рассмотрим два варианта решения поставленной задачи: удаление значений Speed Dial непосредственно из базы и создание переключателя, позволяющего не добавлять значение Speed Dial при использовании FreePBX.

Удаление из базы

Это первый вариант реализации.

Все переменные модуля Phonebook хранятся в базе данных AstDB.

Рассмотрим несколько полезных команд для работы с этой базой. Более подробно о работе с AstDB можно почитать в статье: Использование базы данных Asterisk (AstDB)

Вывод списка всех телефонов, «забитых» в Phonebook:

asterisk -rx 'database show' | grep cidname/

В результате выполнения данной команды, получим данные в виде:

/cidname/Номер_телефона   

: Имя
Список всех телефонов
Список всех телефонов

Вывод списка всех Speeddial:

asterisk -rx 'database show' | grep sysspeeddials

В результате выполнения данной команды, получим данные в виде:

/sysspeeddials/Номер_быстрого_набора      

: Номер_телефона
Список всех номеров быстрого набора
Список всех номеров быстрого набора

Суть данного метода реализации заключается, как видно из названия, в удалении значения speeddial из базы. Выполняется это командой:

asterisk -rx 'database del sysspeeddials

Номер_быстрого_набора’

Рассмотрим работы данной команды на примере тестового номера 89111232211. Номером быстрого набора для него является 95. Удалим его из базы:

Удаление номера быстрого набора из базы
Удаление номера быстрого набора из базы

Если обновить страницу модуля Phonebook во FreePBX, то увидим, что поле Speeddial для номера 89111232211 стало пустым.

Результат
Результат

Теперь рассмотрим второй вариант реализации, связанный с внесением правок в код модуля Phonebook.

Доработка FreePBX

Данная доработка применима для FreePBX 13 версии.

Первым делом добавим «визуальную» часть доработки. Для этого открываем в режиме редактирования файл …/admin/modules/phonebook/page.phonebook.php. В нём добавляем новый radiobutton usesd. Рассмотрим, что для этого нужно сделать.

Находим блок кода, отвечающий за отображение Set Speed Dial. После этого блока (можно ориентироваться по комментарию <!—END Set Speed Dial—>) вставляем следующий код:

<!--Use Speed Dial-->
<div class="element-container">
<div class="row">
<div class="col-md-12">
<div class="row">
<div class="form-group">
<div class="col-md-3">
<label class="control-label" for="usesd"><?php echo _("Use Speed Dial") ?></label>
<i class="fa fa-question-circle fpbx-help-icon" data-for="usesd"></i>
</div>
<div class="col-md-9 radioset">
<input type="radio" name="usesd" id="usesdyes" value="yes" CHECKED >
<label for="usesdyes"><?php echo _("Yes");?></label>
<input type="radio" name="usesd" id="usesdno" >
<label for="usesdno"><?php echo _("No");?></label>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<span id="usesd-help" class="help-block fpbx-help-block"><?php echo _("Select Yes to use a speed dial for this number")?></span>
</div>
</div>
</div>
<!--END Use Speed Dial-->
В случае если это необходимо, можно поменять выбранное по умолчанию значение. Для этого в определённом radiobutton’e CHECKED переносится из строки c «Yes» в строку с «No».

Сохраняем файл. Если перезагрузить страницу Phonebook и зайти в режим редактирование любой записи, увидим появившееся поле Use Speed Dial:

Use Speed Dial
Use Speed Dial

Переходим к реализации самого функционала. Открываем для редактирования файл: …/admin/modules/phonebook/Phonebook.class.php.

Находим функцию doConfigPageInit. В самом начале её производится инициализация переменных значениями, полученными из формы добавления/редактирования. Добавляем сюда созданный radiobutton usesd. Для этого находим строчку:

$gensd = isset($_REQUEST['gensd'])? trim($_REQUEST['gensd']) : '';

И добавляем:

$usesd = isset($_REQUEST['usesd'])? trim($_REQUEST['usesd']) : '';

Тем самым, переменная $usesd теперь хранит значение, выбранное в radiobuton’е.

Чуть ниже находится обработчик событий:

switch ($action) {

Сейчас нас интересует два события: add и edit. Редактируем соответствующие им элементы case следующим образом:

case "add":
	\phonebook_add($number, $name, $speeddial, $gensd, $usesd);
break;
case "edit":
$numbers = \phonebook_list();
	\phonebook_del($editnumber, $editspeeddial);
	\phonebook_add($number, $name, $speeddial, $gensd, $usesd);
break;

По факту, всё редактирование сводится к добавлению в вызов функции phonebook_add нового параметра — $usesd.

Переходим к следующему файлу — …/admin/modules/phonebook/functions.inc.php. Находим функцию phonebook_add и редактируем её.

Вызов изменится следующим образом:

function phonebook_add($number, $name, $speeddial="", $gensd="no", $usesd="yes"){

Как видим, добавилась переменная $usesd. Чуть ниже находим участок кода:

if ($astman) {

Добавляем после него, с заменой соответствующих строк:

if ($usesd == "yes")
{
if ($gensd == "yes"){
if (empty($speeddial)) {
for ($nbr = 99; $nbr > 0; $nbr--) {
if ($astman->database_get("sysspeeddials",sprintf("%02d",$nbr))===false) {
$speeddial = sprintf("%02d", $nbr);
break;
}
}
}
}
if ($speeddial != '')
$astman->database_put("sysspeeddials",$speeddial, $number);
}

Добавили проверку значения переменной $usesd. Запись в AstDB Speeddial осуществляется лишь в том случае, если эта переменная равна «Yes» (то есть на странице редактирования записи телефонной книги выбрано использование Speed Dial).

Завершающим этапом, вернёмся к правке скрипта …/admin/modules/phonebook/page.phonebook.php. В нём происходит генерация ошибки, при не созданном Speeddial. Перед генерацией ошибки добавляем условие: выводить только в случае, если используем Speeddial. Для этого находим js-функцию edit_onsubmit(). В ней находим код:

if($("input[name='gensd']:checked").val()=="on"){

Обрамляем этот блок новым if’ом. Получим:

if ($("input[name='usesd']:checked").val()=="yes")
{
if($("input[name='gensd']:checked").val()=="on"){
if($("#speeddial").val().length > 0){
if(!isDialpattern($("#speeddial").val())){
warnInvalid($("#speeddial"),msgInvalidCode);
return false;
}
}else{
warnInvalid($("#speeddial"),msgInvalidCode);
return false;
}
}
}

После этого сохраняем файл и перезагружаем страницу во FreePBX.

Русификация

Данная часть является не обязательной, если Вы не используете русскоязычную версию FreePBX.

Подробнее о включении русского языка во FreePBX можно почитать в статье

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

Подробнее о русификации модулей можно почитать в статье: Работа с русификацией FreePBX. Исправление отображения Queues.

Русскоязычная версия телефонной книги
Русскоязычная версия телефонной книги

На скриншоте видно, что некоторые элементы модуля Phonebook нуждаются в дополнительном переводе.

Файл русификации для модуля Phonebook хранится в следующей директории: …/admin/modules/phonebook/i18n/ru_RU/LC_MESSAGES/ и называется phonebook.po. Откроем его в режиме редактирования.

Находим код:

#: page.phonebook.php:31
msgid "Speeddial"

В параметре msgstr указываем значение перевода (в данном случае, Быстрый набор):

msgstr

«Быстрый набор»
Так как это вольный перевод, то Вы можете использовать свой (который будет понятнее для Вас).

Также правим следующие параметры:

#: page.phonebook.php:105
msgid "Speed Dial Code"
msgstr "Номер быстрого набора"
#: page.phonebook.php:221
msgid ""
"Please enter a valid Speeddial code or leave it empty when Set Speed Dial=No "
msgstr ""

«Пожалуйста, введите корректное значение номера Быстрого набора, или оставьте»

«это поле пустым, если параметр Настроить быстрый набор = Нет»

#: page.phonebook.php:194
msgid ""
"Import a CSV File formatted as follows:<br/>Name;Number;Speeddial<br />  "
"fields separated by ';' <br /><br /> Example:<br/>John Doe;12345678;123"
msgstr ""

«Импорт CSV файла в формате: <br/>Имя;Номер;Быстрый_набор<br />  «

«поля разделяются ‘;’ <br /><br /> Пример:<br/>Иванов Иван;12345678;123»

#: page.phonebook.php:117
msgid ""
"Enter a speed dial code<br/>Speeddial module is required to use speeddial "
"codes "
msgstr ""

«Введите номер быстрого набора<br/>Модуль быстрого набора необходим для «

«использования номеров быстрого набора «

#: page.phonebook.php:120
msgid ""
"If you use an exsiting Speed Dial,then it will be removed from the used one."
msgstr ""

«Если Вы используете уже существующий номер Быстрого Набора, то он будет «

«удалён у всех, кроме Вас.»

#: page.phonebook.php:147
msgid "Select Yes to have a speed dial created automatically for this number"

msgstr «Выбрав Да, код быстрого набора создастся автоматически для этого номера»

#: page.phonebook.php:152
msgid "Submit Changes"

msgstr «Применить изменения»

Теперь добавим перевод для radiobutton’а usesd. Для этого в самый конец файла добавляем следующий код:

#: page.phonebook.php:161
msgid "Use Speed Dial"

msgstr «Использовать быстрый набор»

161 — номер строки, в которой располагается фраза Use Speed Dial в файле page.phonebook.php (у Вас это может быть другая строка).

По аналогии добавляем перевод следующей строки:

#: page.phonebook.php:176
msgid "Select Yes to use a speed dial for this number"

msgstr «Выберите Да, чтобы использовать быстрый набор для этого номера»

После этого сохраняем файл настроек русификации и переходим в директорию …/admin/modules/phonebook/i18n/ru_RU/LC_MESSAGES/. Здесь выполняем команду компиляции *.po файла:

msgfmt -v phonebook.po -o phonebook.mo

Результатом выполнения данной команды будет количество переведённых и непереведённых сообщений.

Теперь можно обновлять страницу модуля Phonebook, открытую в браузере и проверять результат перевода. Особенно преобразится страница редактирования:

На этом обзор и доработка быстрого набора модуля Phonebook завершена.

Возможно, Вам также будет интересно:

Телефонная книга в виде Excel таблицы, с возможностью вызова

FreePBX CallerID Lookup или подстановка имени абонента из внешнего источника

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