IVR Menu fix menu options with same length as direct dial regex
This commit is contained in:
parent
e10e530561
commit
c4dfb7ce59
|
|
@ -149,9 +149,17 @@
|
||||||
$y++;
|
$y++;
|
||||||
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "ac4ff01d-51a2-433f-9243-be9b6dd8ba9c";
|
$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_category'] = "ivr_menu";
|
||||||
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "direct_dial_digits";
|
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "direct_dial_digits_min";
|
||||||
$apps[$x]['default_settings'][$y]['default_setting_name'] = "text";
|
$apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
|
||||||
$apps[$x]['default_settings'][$y]['default_setting_value'] = "/^(\d{2,11})$/";
|
$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_enabled'] = "true";
|
||||||
$apps[$x]['default_settings'][$y]['default_setting_description'] = "";
|
$apps[$x]['default_settings'][$y]['default_setting_description'] = "";
|
||||||
$y++;
|
$y++;
|
||||||
|
|
|
||||||
|
|
@ -119,8 +119,9 @@
|
||||||
--set variables from settings
|
--set variables from settings
|
||||||
local settings = Settings.new(dbh, domain_name, domain_uuid)
|
local settings = Settings.new(dbh, domain_name, domain_uuid)
|
||||||
|
|
||||||
--direct dial regex
|
--direct dial length
|
||||||
direct_dial_digits = settings:get('ivr_menu', 'direct_dial_digits', 'text')
|
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
|
--storage path
|
||||||
local storage_type = settings:get('recordings', 'storage_type', 'text')
|
local storage_type = settings:get('recordings', 'storage_type', 'text')
|
||||||
|
|
@ -270,24 +271,33 @@
|
||||||
if (debug["sql"]) then
|
if (debug["sql"]) then
|
||||||
freeswitch.consoleLog("notice", "[ivr_menu] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n");
|
freeswitch.consoleLog("notice", "[ivr_menu] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n");
|
||||||
end
|
end
|
||||||
|
local direct_dial_exclude = {};
|
||||||
dbh:query(sql, params, function(r)
|
dbh:query(sql, params, function(r)
|
||||||
ivr_menu_option_digits = r.ivr_menu_option_digits
|
ivr_menu_option_digits = r.ivr_menu_option_digits
|
||||||
ivr_menu_option_action = r.ivr_menu_option_action
|
ivr_menu_option_action = r.ivr_menu_option_action
|
||||||
ivr_menu_option_param = r.ivr_menu_option_param
|
ivr_menu_option_param = r.ivr_menu_option_param
|
||||||
ivr_menu_option_description = r.ivr_menu_option_description
|
ivr_menu_option_description = r.ivr_menu_option_description
|
||||||
table.insert(xml, [[ <entry action="]]..ivr_menu_option_action..[[" digits="]]..ivr_menu_option_digits..[[" param="]]..ivr_menu_option_param..[[" description="]]..ivr_menu_option_description..[["/>]]);
|
table.insert(xml, [[ <entry action="]]..ivr_menu_option_action..[[" digits="]]..ivr_menu_option_digits..[[" param="]]..ivr_menu_option_param..[[" description="]]..ivr_menu_option_description..[["/>]]);
|
||||||
|
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);
|
end);
|
||||||
|
|
||||||
--direct dial
|
--direct dial
|
||||||
if (ivr_menu_direct_dial == "true") then
|
if (ivr_menu_direct_dial == "true") then
|
||||||
table.insert(xml, [[ <entry action="menu-exec-app" digits="]]..direct_dial_digits..[[" param="set ${cond(${user_exists id $1 ]]..domain_name..[[} == true ? user_exists=true : user_exists=false)}" description="direct dial"/>\n]]);
|
local negetive_lookahead = "";
|
||||||
--table.insert(xml, [[ <entry action="menu-exec-app" digits="]]..direct_dial_digits..[[" param="set ${cond(${user_exists} == true ? user_exists=true : ivr_max_failures=${system(expr ${ivr_max_failures} + 1)})}" description="increment max failures"/>\n]]);
|
if (#direct_dial_exclude > 0) then
|
||||||
table.insert(xml, [[ <entry action="menu-exec-app" digits="]]..direct_dial_digits..[[" param="playback ${cond(${user_exists} == true ? ]]..sound_prefix..[[ivr/ivr-call_being_transferred.wav : ]]..sound_prefix..[[ivr/ivr-that_was_an_invalid_entry.wav)}" description="play sound"/>\n]]);
|
negetive_lookahead = "(?!"..table.concat(direct_dial_exclude, "|")..")";
|
||||||
--table.insert(xml, [[ <entry action="menu-exec-app" digits="]]..direct_dial_digits..[[" param="transfer ${cond(${ivr_max_failures} == ]]..ivr_menu_max_failures..[[ ? ]]..ivr_menu_exit_data..[[)}" description="max fail transfer"/>\n]]);
|
|
||||||
if (#ivr_menu_cid_prefix > 0) then
|
|
||||||
table.insert(xml, [[ <entry action="menu-exec-app" digits="]]..direct_dial_digits..[[" param="set effective_caller_id_name=]]..ivr_menu_cid_prefix..[[#${caller_id_name}" description="direct dial"/>\n]]);
|
|
||||||
end
|
end
|
||||||
table.insert(xml, [[ <entry action="menu-exec-app" digits="]]..direct_dial_digits..[[" param="transfer ${cond(${user_exists} == true ? $1 XML ]]..domain_name..[[)}" description="direct dial transfer"/>\n]]);
|
local direct_dial_regex = string.format("/^%s(\\d{%s,%s})$/", negetive_lookahead, direct_dial_digits_min, direct_dial_digits_max);
|
||||||
|
table.insert(xml, [[ <entry action="menu-exec-app" digits="]]..direct_dial_regex..[[" param="set ${cond(${user_exists id $1 ]]..domain_name..[[} == true ? user_exists=true : user_exists=false)}" description="direct dial"/>\n]]);
|
||||||
|
--table.insert(xml, [[ <entry action="menu-exec-app" digits="]]..direct_dial_regex..[[" param="set ${cond(${user_exists} == true ? user_exists=true : ivr_max_failures=${system(expr ${ivr_max_failures} + 1)})}" description="increment max failures"/>\n]]);
|
||||||
|
table.insert(xml, [[ <entry action="menu-exec-app" digits="]]..direct_dial_regex..[[" param="playback ${cond(${user_exists} == true ? ]]..sound_prefix..[[ivr/ivr-call_being_transferred.wav : ]]..sound_prefix..[[ivr/ivr-that_was_an_invalid_entry.wav)}" description="play sound"/>\n]]);
|
||||||
|
--table.insert(xml, [[ <entry action="menu-exec-app" digits="]]..direct_dial_regex..[[" param="transfer ${cond(${ivr_max_failures} == ]]..ivr_menu_max_failures..[[ ? ]]..ivr_menu_exit_data..[[)}" description="max fail transfer"/>\n]]);
|
||||||
|
if (#ivr_menu_cid_prefix > 0) then
|
||||||
|
table.insert(xml, [[ <entry action="menu-exec-app" digits="]]..direct_dial_regex..[[" param="set effective_caller_id_name=]]..ivr_menu_cid_prefix..[[#${caller_id_name}" description="direct dial"/>\n]]);
|
||||||
|
end
|
||||||
|
table.insert(xml, [[ <entry action="menu-exec-app" digits="]]..direct_dial_regex..[[" param="transfer ${cond(${user_exists} == true ? $1 XML ]]..domain_name..[[)}" description="direct dial transfer"/>\n]]);
|
||||||
end
|
end
|
||||||
|
|
||||||
--close the extension tag if it was left open
|
--close the extension tag if it was left open
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue