Изменение максимального временного интервала при донаборе во FreePBX (Digit Timeout)
В этой статье рассмотрим добавление в web-интерфейс Asterisk специального поля, позволяющего изменять промежуток максимальный промежуток времени между цифрами. Для начала рассмотрим, о каком именно промежутке идёт речь. Введение В модуле IVR FreePBX есть параметр, у которого нет представления в web-интерфейсе, однако фигурирующий в диалплане. Это параметр TIMEOUT(digit). Он отвечает за регулирование максимального времени между цифрами […]

В этой статье рассмотрим добавление в web-интерфейс Asterisk специального поля, позволяющего изменять промежуток максимальный промежуток времени между цифрами.
Для начала рассмотрим, о каком именно промежутке идёт речь.
Введение
В модуле IVR FreePBX есть параметр, у которого нет представления в web-интерфейсе, однако фигурирующий в диалплане. Это параметр TIMEOUT(digit). Он отвечает за регулирование максимального времени между цифрами при донаборе номера в голосовом меню IVR.
Пример использования
Предположим, у нас имеется Голосовое меню IVR с включённым прямым набором (Direct Dial) в нём. При такой конструкции нам будет разрешён донабор внутренних номеров АТС из IVR.

В момент, когда мы будем донабирать, пауза между вводами цифр номера должна быть меньше значения TIMEOUT(digit). То есть, если нам необходимо набрать номер 576, то после набора цифры 5, у нас будет TIMEOUT(digit) секунд на набор следующей цифры, и т.д.
Далее рассмотрим варианты изменения таймера.
Изменения с помощью оверрайда
Данный вариант изменения значения TIMEOUT(digit) основан на редактировании диалплана IVR в файле extensions_override_freepbx.conf.
Принцип достаточно прост:
- Определяем ID IVR, для которой будем менять значение TIMEOUT(digit). Узнать это можно в адресной строке браузера, когда открываем данную IVR для редактирования. Формат адресной строки, в данном случае, будет следующим: https://192.168.170.157/admin/config.php?display=ivr&action=edit&id=5, где 5 – это и будет искомый ID;
- Открываем файл extensions_additional.conf, в котором находим описание контекста [ivr-id] (в моём случае, это будет контекст [ivr-5]);
- Копируем из контекста всё, что связано с экстеншеном s в файл extensions_override_freepbx.conf;
- В скопированном контексте заменяем значение TIMEOUT(digit) на необходимое.

После произведённых действий заходим в консоль Asterisk, командой:
asterisk –rvvvv
И выполняем в ней команду:
dialplan reload
Теперь представим ситуацию, когда количество IVR, на которых необходимо изменить значение параметра TIMEOUT(digit), достаточно велико, чтобы прописывать их все в оверрайде. На этот случай можно сделать изменение в коде FreePBX и добавить возможность выборки данного параметра в web-интерфейсе так же, как выбирается обычный параметр Timeout.
Изменение в коде FreePBX
Сперва отображаем поле ввода на странице. Для этого редактируем файл …/admin/modules/ivr/views/advanced_form.php.В нём находим описание поля timeout. Найти его можно по блоку комментариев:
<!—Timeout-->
...
<!--END Timeout-->
Сразу после него вставляем следующий блок:
<!--Digit Timeout-->
<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="digit_timeout"><?php echo _("Digit Timeout") ?></label>
<i class="fa fa-question-circle fpbx-help-icon" data-for="digit_timeout"></i>
</div>
<div class="col-md-9">
<input type="number" min="1" class="form-control" id="digit_timeout" name="digit_timeout" value="<?php echo stripslashes($ivr['digit_timeout'])?>">
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<span id="digit_timeout-help" class="help-block fpbx-help-block"><?php echo _("Set timeout between digit") ?></span>
</div>
</div>
</div>
<!--END Digit Timeout-->
Теперь, на странице редактирования и добавления появится новое поле, которое будет стоять сразу после Timeout.

Следующим шагом необходимо добавить поле в БД, которое будет хранить значение Digit Timeout для определённой IVR.
Заходим в базу, командой
mysql –u root –p
и вводим пароль от root MySQL. Выбираем используемую БД:
USE asterisk;
Выполняем следующую команду:
ALTER TABLE ivr_details ADD digit_timeout int(11);
Далее займёмся установкой дефолтных значений при заведении новой IVR. Для этого открываем для редактирования файл …admin/modules/ivr/views/form.php. В самом начале файла находим объявление массива $deet. Добавляем в него также поле ‘digit_timeout’. Должен получиться следующий массив:
$deet = array('id', 'name', 'description', 'announcement', 'directdial', 'invalid_loops', 'invalid_retry_recording', 'invalid_recording', 'invalid_destination', 'invalid_ivr_ret', 'timeout_loops', 'timeout_time', 'digit_timeout', 'timeout_retry_recording', 'timeout_recording', 'timeout_destination', 'timeout_ivr_ret', 'retvm','rvolume');
В switch($d)
case 'digit_timeout':
$ivr[$d] = 3;
break;
Теперь добавим сохранение данных, которые мы ввели, в поле MySQL. Для этого редактируем файл …/admin/modules/ivr/functions.inc.php. Находим функцию ivr_configprocess и дописываем ‘digit_timeout’ в массив $get_var. В итоге массив $get_var должен содержать следующие ключи:
$get_var = array('id', 'name', 'alertinfo', 'description', 'announcement', 'directdial', 'invalid_loops', 'invalid_retry_recording', 'invalid_destination', 'invalid_recording', 'retvm', 'timeout_time', 'digit_timeout', 'timeout_recording', 'timeout_retry_recording', 'timeout_destination', 'timeout_loops', 'timeout_append_announce', 'invalid_append_announce', 'timeout_ivr_ret', 'invalid_ivr_ret','rvolume');
И нам остаётся последний шаг – изменить строку, записывающуюся в диалплан. Находится она в этом же файле. Находим:
$ext->add($c, 's', 'start', new ext_digittimeout(3));
и меняем на:
$ext->add($c, 's', 'start', new ext_digittimeout($ivr['digit_timeout']));
Обновляем страницу. Теперь при добавлении новых IVR, а также при обновлении старых, будет записываться дополнительный параметр – Digit Timeout.
На этом описание доработки завершено.

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