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

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

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

В этой статье рассмотрим добавление в 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.

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

 
avatar
  Подписаться  
Уведомление о

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

Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices