Даша Горобец
06.11.2019
1044

Изменение максимального временного интервала при донаборе во FreePBX (Digit Timeout)

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

Изменение временного интервала при донаборе во FreePBX

В этой статье рассмотрим добавление в web-интерфейс Asterisk специального поля, позволяющего изменять промежуток максимальный промежуток времени между цифрами.

Для начала рассмотрим, о каком именно промежутке идёт речь.

Введение

В модуле IVR FreePBX есть параметр, у которого нет представления в web-интерфейсе, однако фигурирующий в диалплане. Это параметр TIMEOUT(digit). Он отвечает за регулирование максимального времени между цифрами при донаборе номера в голосовом меню IVR.

Значение по умолчанию для данного параметра равно 3.

Пример использования

Предположим, у нас имеется Голосовое меню IVR с включённым прямым набором (Direct Dial) в нём. При такой конструкции нам будет разрешён донабор внутренних номеров АТС из IVR.

IVR с Direct Dial
IVR с Direct Dial

В момент, когда мы будем донабирать, пауза между вводами цифр номера должна быть меньше значения TIMEOUT(digit). То есть, если нам необходимо набрать номер 576, то после набора цифры 5, у нас будет TIMEOUT(digit) секунд на набор следующей цифры, и т.д.

Далее рассмотрим варианты изменения таймера.

Изменения с помощью оверрайда

Данный вариант изменения значения TIMEOUT(digit) основан на редактировании диалплана IVR в файле extensions_override_freepbx.conf.

Принцип достаточно прост:

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

После произведённых действий заходим в консоль Asterisk, командой:

asterisk –rvvvv

И выполняем в ней команду:

dialplan reload

Теперь представим ситуацию, когда количество IVR, на которых необходимо изменить значение параметра TIMEOUT(digit), достаточно велико, чтобы прописывать их все в оверрайде. На этот случай можно сделать изменение в коде FreePBX и добавить возможность выборки данного параметра в web-интерфейсе так же, как выбирается обычный параметр Timeout.

Изменение в коде FreePBX

Все изменения будем рассматривать на основе FreePBX 13 версии.

Сперва отображаем поле ввода на странице. Для этого редактируем файл …/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
Поле Digit 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.

На этом описание доработки завершено.

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

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

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