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