From c4dfb7ce59998ff150a1923eee17cce82719e2cf Mon Sep 17 00:00:00 2001 From: agree Date: Wed, 3 Feb 2021 17:23:51 -0500 Subject: [PATCH 1/3] IVR Menu fix menu options with same length as direct dial regex --- app/ivr_menus/app_config.php | 14 ++++++++-- .../scripts/configuration/ivr.conf.lua | 28 +++++++++++++------ 2 files changed, 30 insertions(+), 12 deletions(-) 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 From f43910e328edc012ea6d224ad35267333bbaa10f Mon Sep 17 00:00:00 2001 From: FusionPBX Date: Wed, 3 Feb 2021 16:25:08 -0700 Subject: [PATCH 2/3] Update ivr.conf.lua --- .../resources/scripts/configuration/ivr.conf.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 60fd3f7c0e..6e7d07365d 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 @@ -285,11 +285,11 @@ --direct dial if (ivr_menu_direct_dial == "true") then - local negetive_lookahead = ""; + local negative_lookahead = ""; if (#direct_dial_exclude > 0) then - negetive_lookahead = "(?!"..table.concat(direct_dial_exclude, "|")..")"; + negative_lookahead = "(?!"..table.concat(direct_dial_exclude, "|")..")"; end - local direct_dial_regex = string.format("/^%s(\\d{%s,%s})$/", negetive_lookahead, direct_dial_digits_min, direct_dial_digits_max); + local direct_dial_regex = string.format("/^%s(\\d{%s,%s})$/", negative_lookahead, direct_dial_digits_min, direct_dial_digits_max); table.insert(xml, [[ \n]]); --table.insert(xml, [[ \n]]); table.insert(xml, [[ \n]]); From b7eef0e69e3f108fdb714ab35c7006777fdad958 Mon Sep 17 00:00:00 2001 From: agree <37550360+greenbea@users.noreply.github.com> Date: Wed, 3 Feb 2021 23:29:10 -0500 Subject: [PATCH 3/3] Fix negative lookahead --- .../xml_handler/resources/scripts/configuration/ivr.conf.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 6e7d07365d..9b5403698a 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 @@ -287,9 +287,9 @@ if (ivr_menu_direct_dial == "true") then local negative_lookahead = ""; if (#direct_dial_exclude > 0) then - negative_lookahead = "(?!"..table.concat(direct_dial_exclude, "|")..")"; + negative_lookahead = "(?!^("..table.concat(direct_dial_exclude, "|")..")$)"; end - local direct_dial_regex = string.format("/^%s(\\d{%s,%s})$/", negative_lookahead, direct_dial_digits_min, direct_dial_digits_max); + local direct_dial_regex = string.format("/^(%s\\d{%s,%s})$/", negative_lookahead, direct_dial_digits_min, direct_dial_digits_max); table.insert(xml, [[ \n]]); --table.insert(xml, [[ \n]]); table.insert(xml, [[ \n]]);