diff --git a/app/ivr_menus/app_config.php b/app/ivr_menus/app_config.php
index 88d5f857aa..7821d40b3a 100644
--- a/app/ivr_menus/app_config.php
+++ b/app/ivr_menus/app_config.php
@@ -149,9 +149,17 @@
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "ac4ff01d-51a2-433f-9243-be9b6dd8ba9c";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "ivr_menu";
- $apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "direct_dial_digits";
- $apps[$x]['default_settings'][$y]['default_setting_name'] = "text";
- $apps[$x]['default_settings'][$y]['default_setting_value'] = "/^(\d{2,11})$/";
+ $apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "direct_dial_digits_min";
+ $apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
+ $apps[$x]['default_settings'][$y]['default_setting_value'] = "2";
+ $apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
+ $apps[$x]['default_settings'][$y]['default_setting_description'] = "";
+ $y++;
+ $apps[$x]['default_settings'][$y]['default_setting_uuid'] = "35772199-3dd3-4c8e-9651-a50c885602d9";
+ $apps[$x]['default_settings'][$y]['default_setting_category'] = "ivr_menu";
+ $apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "direct_dial_digits_max";
+ $apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
+ $apps[$x]['default_settings'][$y]['default_setting_value'] = "11";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "";
$y++;
diff --git a/app/scripts/resources/scripts/app/xml_handler/resources/scripts/configuration/ivr.conf.lua b/app/scripts/resources/scripts/app/xml_handler/resources/scripts/configuration/ivr.conf.lua
index d6497da5c4..60fd3f7c0e 100644
--- a/app/scripts/resources/scripts/app/xml_handler/resources/scripts/configuration/ivr.conf.lua
+++ b/app/scripts/resources/scripts/app/xml_handler/resources/scripts/configuration/ivr.conf.lua
@@ -119,8 +119,9 @@
--set variables from settings
local settings = Settings.new(dbh, domain_name, domain_uuid)
- --direct dial regex
- direct_dial_digits = settings:get('ivr_menu', 'direct_dial_digits', 'text')
+ --direct dial length
+ local direct_dial_digits_min = settings:get('ivr_menu', 'direct_dial_digits_min', 'numeric') or 2;
+ local direct_dial_digits_max = settings:get('ivr_menu', 'direct_dial_digits_max', 'numeric') or 11;
--storage path
local storage_type = settings:get('recordings', 'storage_type', 'text')
@@ -270,24 +271,33 @@
if (debug["sql"]) then
freeswitch.consoleLog("notice", "[ivr_menu] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n");
end
+ local direct_dial_exclude = {};
dbh:query(sql, params, function(r)
ivr_menu_option_digits = r.ivr_menu_option_digits
ivr_menu_option_action = r.ivr_menu_option_action
ivr_menu_option_param = r.ivr_menu_option_param
ivr_menu_option_description = r.ivr_menu_option_description
table.insert(xml, [[ ]]);
+ if (tonumber(ivr_menu_option_digits) and #ivr_menu_option_digits >= tonumber(direct_dial_digits_min)) then
+ table.insert(direct_dial_exclude, ivr_menu_option_digits);
+ end
end);
--direct dial
if (ivr_menu_direct_dial == "true") then
- table.insert(xml, [[ \n]]);
- --table.insert(xml, [[ \n]]);
- table.insert(xml, [[ \n]]);
- --table.insert(xml, [[ \n]]);
- if (#ivr_menu_cid_prefix > 0) then
- table.insert(xml, [[ \n]]);
+ local negetive_lookahead = "";
+ if (#direct_dial_exclude > 0) then
+ negetive_lookahead = "(?!"..table.concat(direct_dial_exclude, "|")..")";
end
- table.insert(xml, [[ \n]]);
+ local direct_dial_regex = string.format("/^%s(\\d{%s,%s})$/", negetive_lookahead, direct_dial_digits_min, direct_dial_digits_max);
+ table.insert(xml, [[ \n]]);
+ --table.insert(xml, [[ \n]]);
+ table.insert(xml, [[ \n]]);
+ --table.insert(xml, [[ \n]]);
+ if (#ivr_menu_cid_prefix > 0) then
+ table.insert(xml, [[ \n]]);
+ end
+ table.insert(xml, [[ \n]]);
end
--close the extension tag if it was left open