diff --git a/app/ring_groups/app_config.php b/app/ring_groups/app_config.php index fd4d747df8..4305f19bbe 100644 --- a/app/ring_groups/app_config.php +++ b/app/ring_groups/app_config.php @@ -142,6 +142,10 @@ $apps[$x]['permissions'][$y]['name'] = "ring_group_destinations"; $apps[$x]['permissions'][$y]['groups'][] = "superadmin"; $apps[$x]['permissions'][$y]['groups'][] = "admin"; + $y++; + $apps[$x]['permissions'][$y]['name'] = "ring_group_call_screen_enabled"; + $apps[$x]['permissions'][$y]['groups'][] = "superadmin"; + $apps[$x]['permissions'][$y]['groups'][] = "admin"; //default settings $y=0; @@ -313,6 +317,10 @@ $apps[$x]['db'][$y]['fields'][$z]['type'] = "text"; $apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Select the ringback."; $z++; + $apps[$x]['db'][$y]['fields'][$z]['name'] = "ring_group_call_screen_enabled"; + $apps[$x]['db'][$y]['fields'][$z]['type'] = "text"; + $apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = ""; + $z++; $apps[$x]['db'][$y]['fields'][$z]['name'] = "ring_group_call_forward_enabled"; $apps[$x]['db'][$y]['fields'][$z]['type'] = "text"; $apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Choose to follow a ring group destination's call forward."; diff --git a/app/ring_groups/ring_group_edit.php b/app/ring_groups/ring_group_edit.php index 38efbf03e5..d714ed8b00 100644 --- a/app/ring_groups/ring_group_edit.php +++ b/app/ring_groups/ring_group_edit.php @@ -186,6 +186,7 @@ $ring_group_cid_number_prefix = $_POST["ring_group_cid_number_prefix"] ?? null; $ring_group_distinctive_ring = $_POST["ring_group_distinctive_ring"]; $ring_group_ringback = $_POST["ring_group_ringback"]; + $ring_group_call_screen_enabled = $_POST["ring_group_call_screen_enabled"]; $ring_group_call_forward_enabled = $_POST["ring_group_call_forward_enabled"]; $ring_group_follow_me_enabled = $_POST["ring_group_follow_me_enabled"]; $ring_group_missed_call_app = $_POST["ring_group_missed_call_app"]; @@ -375,6 +376,7 @@ } $array["ring_groups"][0]["ring_group_distinctive_ring"] = $ring_group_distinctive_ring; $array["ring_groups"][0]["ring_group_ringback"] = $ring_group_ringback; + $array["ring_groups"][0]["ring_group_call_screen_enabled"] = $ring_group_call_screen_enabled; $array["ring_groups"][0]["ring_group_call_forward_enabled"] = $ring_group_call_forward_enabled; $array["ring_groups"][0]["ring_group_follow_me_enabled"] = $ring_group_follow_me_enabled; if (permission_exists('ring_group_missed_call')) { @@ -559,6 +561,7 @@ $ring_group_cid_number_prefix = $row["ring_group_cid_number_prefix"]; $ring_group_distinctive_ring = $row["ring_group_distinctive_ring"]; $ring_group_ringback = $row["ring_group_ringback"]; + $ring_group_call_screen_enabled = $row["ring_group_call_screen_enabled"]; $ring_group_call_forward_enabled = $row["ring_group_call_forward_enabled"]; $ring_group_follow_me_enabled = $row["ring_group_follow_me_enabled"]; $ring_group_missed_call_app = $row["ring_group_missed_call_app"]; @@ -1139,6 +1142,33 @@ echo " "; echo " "; + if (permission_exists('ring_group_call_screen_enabled')) { + echo "\n"; + echo "\n"; + echo " ".$text['label-ring_group_call_screen_enabled']."\n"; + echo "\n"; + echo "\n"; + echo " \n"; + echo "
\n"; + echo $text['description-ring_group_call_screen_enabled']."\n"; + echo "\n"; + echo "\n"; + } + echo "\n"; echo "\n"; echo " ".$text['label-ring_group_call_forward_enabled']."\n"; diff --git a/app/switch/resources/scripts/app/ring_groups/index.lua b/app/switch/resources/scripts/app/ring_groups/index.lua index d1375ae034..09d3ab7ff9 100644 --- a/app/switch/resources/scripts/app/ring_groups/index.lua +++ b/app/switch/resources/scripts/app/ring_groups/index.lua @@ -48,6 +48,7 @@ log = require "resources.functions.log".ring_group require "resources.functions.channel_utils" require "resources.functions.format_ringback" require "resources.functions.send_presence"; + require "resources.functions.mkdir"; --- include libs local route_to_bridge = require "resources.functions.route_to_bridge" @@ -239,6 +240,7 @@ log = require "resources.functions.log".ring_group ring_group_caller_id_number = row["ring_group_caller_id_number"]; ring_group_cid_name_prefix = row["ring_group_cid_name_prefix"]; ring_group_cid_number_prefix = row["ring_group_cid_number_prefix"]; + ring_group_call_screen_enabled = row["ring_group_call_screen_enabled"]; ring_group_call_forward_enabled = row["ring_group_call_forward_enabled"]; ring_group_follow_me_enabled = row["ring_group_follow_me_enabled"]; missed_call_app = row["ring_group_missed_call_app"]; @@ -249,6 +251,14 @@ log = require "resources.functions.log".ring_group local Settings = require "resources.functions.lazy_settings"; local settings = Settings.new(dbh, domain_name, domain_uuid); +--get the recordings dir + --recordings_dir = settings:get('switch', 'recordings', 'dir'); + +--set the default record extension + if (record_ext == nil) then + record_ext = 'wav'; + end + --prepare the recording path record_path = recordings_dir .. "/" .. domain_name .. "/archive/" .. os.date("%Y/%b/%d"); record_path = record_path:gsub("\\", "/"); @@ -284,9 +294,55 @@ log = require "resources.functions.log".ring_group if (session:ready()) then if (ring_group_greeting and #ring_group_greeting > 0) then session:answer(); + session_answer = true session:sleep(1000); play_file(dbh, domain_name, domain_uuid, ring_group_greeting) session:sleep(1000); + else + session_answer = false + end + end + +--call screen enabled + if (ring_group_call_screen_enabled == 'true') then + + --answer the call if not answered + if (not session_answer) then + session:answer(); + end + + --flush dtmf digits from the input buffer + session:flushDigits(); + + --set the variables + min_digits = 1; + max_digits = 1; + max_attempts = 1; + timeout = 3000 + + --play the name record + dtmf_digits = ''; + session:execute("playback", "phrase:voicemail_record_name"); + --session:execute("sleep", "1000"); + session:streamFile("tone_stream://L=1;%(1000, 0, 640)"); + + --recording settings + max_length_seconds = 30; + silence_threshold = 30; + silence_seconds = 3; + + --create the call scree file name + call_sreen_name = 'call_screen.'..uuid..'.'..record_ext; + + --make sure the recording directory exists + if (not file_exists(record_path)) then + mkdir(record_path); + end + + --record the name and reason for calling + if (session:ready()) then + result = session:recordFile(record_path..'/'..call_sreen_name, max_length_seconds, silence_threshold, silence_seconds); + --session:execute("record", record_path..'/'..call_sreen_name.." 180 200"); end end @@ -853,7 +909,7 @@ log = require "resources.functions.log".ring_group user_hold_music = trim(api:executeString(cmd)); if (user_hold_music ~= nil) and (string.len(user_hold_music) > 0) then hold_music = user_hold_music; - else + else hold_music = default_hold_music end diff --git a/app/switch/resources/scripts/confirm.lua b/app/switch/resources/scripts/confirm.lua index 27cdb385d4..28bc4134a8 100644 --- a/app/switch/resources/scripts/confirm.lua +++ b/app/switch/resources/scripts/confirm.lua @@ -16,14 +16,14 @@ -- -- The Initial Developer of the Original Code is -- Mark J Crane --- Copyright (C) 2010-2015 +-- Copyright (C) 2010-2024 -- the Initial Developer. All Rights Reserved. -- -- Contributor(s): -- Mark J Crane --include config.lua - require "resources.functions.config"; +require "resources.functions.config"; --set variables digit_timeout = "5000"; @@ -40,7 +40,7 @@ --session:sleep(1000); --get the variables - uuid = session:getVariable("uuid"); + call_uuid = session:getVariable("call_uuid"); domain_name = session:getVariable("domain_name"); context = session:getVariable("context"); sounds_dir = session:getVariable("sounds_dir"); @@ -64,12 +64,32 @@ if (not default_dialect) then default_dialect = 'us'; end if (not default_voice) then default_voice = 'callie'; end + --create the settings object + --local Settings = require "resources.functions.lazy_settings"; + --local settings = Settings.new(dbh, domain_name, domain_uuid); + + --get the recordings dir + --recordings_dir = settings:get('switch', 'recordings', 'dir'); + + --set the default record extension + if (record_ext == nil) then + record_ext = 'wav'; + end + + --prepare the recording path + record_path = recordings_dir .. "/" .. domain_name .. "/archive/" .. os.date("%Y/%b/%d"); + record_path = record_path:gsub("\\", "/"); + --if the screen file is found then set confirm to true if (domain_name ~= nil) then if (file_exists(temp_dir .. "/" .. domain_name .. "-" .. caller_id_number .. "." .. record_ext)) then call_screen_file = temp_dir .. "/" .. domain_name .. "-" .. caller_id_number .. "." .. record_ext; confirm = "true"; end + if (file_exists(record_path.."/call_screen."..call_uuid .."."..record_ext)) then + call_screen_file = record_path.."/call_screen."..call_uuid .."."..record_ext; + confirm = "true"; + end end --confirm the calls