From daffa7d856ef9fa844aafad1fa99221d27c8cfb7 Mon Sep 17 00:00:00 2001 From: Mark Crane Date: Fri, 4 Jan 2013 06:14:52 +0000 Subject: [PATCH] Require the message to be 3 seconds or longer to save the recording. Remove a session:ready from the send_email function to fix voicemail to email. --- includes/install/scripts/voicemail.lua | 192 ++++++++++++++----------- 1 file changed, 106 insertions(+), 86 deletions(-) diff --git a/includes/install/scripts/voicemail.lua b/includes/install/scripts/voicemail.lua index 902d342c74..6d6d639f80 100644 --- a/includes/install/scripts/voicemail.lua +++ b/includes/install/scripts/voicemail.lua @@ -89,7 +89,9 @@ --set the voicemail_dir voicemail_dir = base_dir.."/storage/voicemail/default/"..domain_name; - --freeswitch.consoleLog("notice", "[voicemail] voicemail_dir: " .. voicemail_dir .. "\n"); + if (debug["info"]) then + freeswitch.consoleLog("notice", "[voicemail] voicemail_dir: " .. voicemail_dir .. "\n"); + end --check if a file exists function file_exists(name) @@ -129,7 +131,9 @@ --do nothing else voicemail_id = get_voicemail_id(); - --freeswitch.consoleLog("notice", "[voicemail] voicemail id: " .. voicemail_id .. "\n"); + if (debug["info"]) then + freeswitch.consoleLog("notice", "[voicemail] voicemail id: " .. voicemail_id .. "\n"); + end end --get the voicemail settings from the database @@ -578,7 +582,9 @@ --start epoch start_epoch = os.time(); - freeswitch.consoleLog("notice", "[voicemail] start epoch: " .. start_epoch .. "\n"); + if (debug["info"]) then + freeswitch.consoleLog("notice", "[voicemail] start epoch: " .. start_epoch .. "\n"); + end --save the recording -- syntax is session:recordFile(file_name, max_len_secs, silence_threshold, silence_secs) @@ -591,15 +597,21 @@ --stop epoch stop_epoch = os.time(); - freeswitch.consoleLog("notice", "[voicemail] start epoch: " .. stop_epoch .. "\n"); + if (debug["info"]) then + freeswitch.consoleLog("notice", "[voicemail] start epoch: " .. stop_epoch .. "\n"); + end --calculate the message length message_length = stop_epoch - start_epoch; message_length_formatted = format_seconds(message_length); - freeswitch.consoleLog("notice", "[voicemail] message length: " .. message_length .. "\n"); + if (debug["info"]) then + freeswitch.consoleLog("notice", "[voicemail] message length: " .. message_length .. "\n"); + end --if the recording is below the minmal length then re-record the message - if (message_length < 4) then + if (message_length > 2) then + --continue + else if (session:ready()) then --your recording is below the minimal acceptable length, please try again macro(session, "too_small", 100); @@ -659,52 +671,52 @@ --define a function to send email function send_email(uuid) - if (session:ready()) then - --get voicemail message details - sql = [[SELECT * FROM v_voicemail_messages - WHERE domain_uuid = ']] .. domain_uuid ..[[' - AND voicemail_message_uuid = ']] .. uuid ..[[']] - if (debug["sql"]) then - freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "\n"); - end - status = dbh:query(sql, function(row) - --get the values from the database - --uuid = row["voicemail_message_uuid"]; - --created_epoch = row["created_epoch"]; - caller_id_name = row["caller_id_name"]; - caller_id_number = row["caller_id_number"]; - message_length = row["message_length"]; - --message_status = row["message_status"]; - --message_priority = row["message_priority"]; - end); + --get voicemail message details + sql = [[SELECT * FROM v_voicemail_messages + WHERE domain_uuid = ']] .. domain_uuid ..[[' + AND voicemail_message_uuid = ']] .. uuid ..[[']] + if (debug["sql"]) then + freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "\n"); + end + status = dbh:query(sql, function(row) + --get the values from the database + --uuid = row["voicemail_message_uuid"]; + --created_epoch = row["created_epoch"]; + caller_id_name = row["caller_id_name"]; + caller_id_number = row["caller_id_number"]; + message_length = row["message_length"]; + --message_status = row["message_status"]; + --message_priority = row["message_priority"]; + end); - --calculate the message length - message_length_formatted = format_seconds(message_length); + --calculate the message length + message_length_formatted = format_seconds(message_length); + if (debug["info"]) then freeswitch.consoleLog("notice", "[voicemail] message length: " .. message_length .. "\n"); + end - --send the email - message = [[ - Message From "]]..caller_id_name..[[" ]]..caller_id_number..[[
-
- Created: ]]..os.date("%A, %d %b %Y %I:%M %p", start_epoch)..[[
- Duration: ]]..message_length_formatted..[[
- Account: ]]..voicemail_id..[[@]]..domain_name..[[
-
]]; - if (voicemail_attach_file == "true") then - freeswitch.email("", + --send the email + message = [[ + Message From "]]..caller_id_name..[[" ]]..caller_id_number..[[
+
+ Created: ]]..os.date("%A, %d %b %Y %I:%M %p", start_epoch)..[[
+ Duration: ]]..message_length_formatted..[[
+ Account: ]]..voicemail_id..[[@]]..domain_name..[[
+
]]; + if (voicemail_attach_file == "true") then + freeswitch.email("", + "", + "To: "..voicemail_mail_to.."\nFrom: "..voicemail_mail_to.."\nSubject: Voicemail from "..caller_id_name.." <"..caller_id_number.."> "..message_length_formatted, + message, + voicemail_dir.."/"..voicemail_id.."/msg_"..uuid..".wav" + ); + else + freeswitch.email("", "", "To: "..voicemail_mail_to.."\nFrom: "..voicemail_mail_to.."\nSubject: Voicemail from "..caller_id_name.." <"..caller_id_number.."> "..message_length_formatted, - message, - voicemail_dir.."/"..voicemail_id.."/msg_"..uuid..".wav" - ); - else - freeswitch.email("", - "", - "To: "..voicemail_mail_to.."\nFrom: "..voicemail_mail_to.."\nSubject: Voicemail from "..caller_id_name.." <"..caller_id_number.."> "..message_length_formatted, - message - ); - end - end + message + ); + end end --define a function to forward a message to an extension @@ -806,7 +818,7 @@ end --send the email with the voicemail recording attached - if (string.len(forward_voicemail_mail_to) > 3) then + if (string.len(forward_voicemail_mail_to) > 2) then send_email(uuid); end end @@ -828,48 +840,54 @@ record_message(); --save the message to the voicemail messages - local sql = {} - table.insert(sql, "INSERT INTO v_voicemail_messages "); - table.insert(sql, "("); - table.insert(sql, "voicemail_message_uuid, "); - table.insert(sql, "domain_uuid, "); - table.insert(sql, "voicemail_uuid, "); - table.insert(sql, "created_epoch, "); - table.insert(sql, "caller_id_name, "); - table.insert(sql, "caller_id_number, "); - table.insert(sql, "message_length "); - --table.insert(sql, "message_status, "); - --table.insert(sql, "message_priority, "); - table.insert(sql, ") "); - table.insert(sql, "VALUES "); - table.insert(sql, "( "); - table.insert(sql, "'".. uuid .."', "); - table.insert(sql, "'".. domain_uuid .."', "); - table.insert(sql, "'".. voicemail_uuid .."', "); - table.insert(sql, "'".. start_epoch .."', "); - table.insert(sql, "'".. caller_id_name .."', "); - table.insert(sql, "'".. caller_id_number .."', "); - table.insert(sql, "'".. message_length .."' "); - --table.insert(sql, "'".. message_status .."', "); - --table.insert(sql, "'".. message_priority .."' "); - table.insert(sql, ") "); - if (voicemail_local_after_email == "true") then - sql = table.concat(sql, "\n"); + if (message_length > 2) then + local sql = {} + table.insert(sql, "INSERT INTO v_voicemail_messages "); + table.insert(sql, "("); + table.insert(sql, "voicemail_message_uuid, "); + table.insert(sql, "domain_uuid, "); + table.insert(sql, "voicemail_uuid, "); + table.insert(sql, "created_epoch, "); + table.insert(sql, "caller_id_name, "); + table.insert(sql, "caller_id_number, "); + table.insert(sql, "message_length "); + --table.insert(sql, "message_status, "); + --table.insert(sql, "message_priority, "); + table.insert(sql, ") "); + table.insert(sql, "VALUES "); + table.insert(sql, "( "); + table.insert(sql, "'".. uuid .."', "); + table.insert(sql, "'".. domain_uuid .."', "); + table.insert(sql, "'".. voicemail_uuid .."', "); + table.insert(sql, "'".. start_epoch .."', "); + table.insert(sql, "'".. caller_id_name .."', "); + table.insert(sql, "'".. caller_id_number .."', "); + table.insert(sql, "'".. message_length .."' "); + --table.insert(sql, "'".. message_status .."', "); + --table.insert(sql, "'".. message_priority .."' "); + table.insert(sql, ") "); + if (voicemail_local_after_email == "true") then + sql = table.concat(sql, "\n"); + end + if (debug["sql"]) then + freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "\n"); + end + dbh:query(sql); end - if (debug["sql"]) then - freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "\n"); - end - dbh:query(sql); --set the message waiting event - local event = freeswitch.Event("message_waiting"); - event:addHeader("MWI-Messages-Waiting", "yes"); - event:addHeader("MWI-Message-Account", "sip:"..voicemail_id.."@"..domain_name); - event:fire(); + if (message_length > 2) then + local event = freeswitch.Event("message_waiting"); + event:addHeader("MWI-Messages-Waiting", "yes"); + event:addHeader("MWI-Message-Account", "sip:"..voicemail_id.."@"..domain_name); + event:fire(); + end --send the email with the voicemail recording attached - if (string.len(voicemail_mail_to) > 3) then - send_email(uuid); + if (message_length > 2) then + if (string.len(voicemail_mail_to) > 3) then + send_email(uuid); + end end --local after email is false so delete the recording file @@ -1129,7 +1147,9 @@ function menu_messages (message_status) message_number = message_number + 1; --listen to the message if (session:ready()) then - freeswitch.consoleLog("notice", message_number.." "..string.lower(row["voicemail_message_uuid"]).." "..row["created_epoch"]); + if (debug["info"]) then + freeswitch.consoleLog("notice", message_number.." "..string.lower(row["voicemail_message_uuid"]).." "..row["created_epoch"]); + end listen_to_recording(message_number, string.lower(row["voicemail_message_uuid"]), row["created_epoch"], row["caller_id_name"], row["caller_id_number"]); end end);