From deb2a2afa585e217774dd7ebf05272e9985e6489 Mon Sep 17 00:00:00 2001 From: Mark Crane Date: Sat, 12 Jan 2013 00:30:47 +0000 Subject: [PATCH] Replace start_epoch with created_epoch to fix the message in the voicemail to email. Use voicemail_id with the message_waiting function to fix MWI. Add a few more commands for logging to the console. --- includes/install/scripts/voicemail.lua | 64 ++++++++++++++++---------- 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/includes/install/scripts/voicemail.lua b/includes/install/scripts/voicemail.lua index d0d2803d4f..fec2e8ab64 100644 --- a/includes/install/scripts/voicemail.lua +++ b/includes/install/scripts/voicemail.lua @@ -32,7 +32,7 @@ digit_timeout = 3000; --debug - debug["info"] = true; + debug["info"] = false; debug["sql"] = false; --starting values @@ -808,7 +808,7 @@ status = dbh:query(sql, function(row) --get the values from the database --uuid = row["voicemail_message_uuid"]; - --created_epoch = row["created_epoch"]; + created_epoch = row["created_epoch"]; caller_id_name = row["caller_id_name"]; caller_id_number = row["caller_id_number"]; message_length = row["message_length"]; @@ -828,7 +828,7 @@ table.insert(message, [[]]); table.insert(message, [[Message From "]]..caller_id_name..[[" ]]..caller_id_number..[[
]]); table.insert(message, [[
]]); - table.insert(message, [[Created: ]]..os.date("%A, %d %b %Y %I:%M %p", start_epoch)..[[
]]); + table.insert(message, [[Created: ]]..os.date("%A, %d %b %Y %I:%M %p", created_epoch)..[[
]]); table.insert(message, [[Duration: ]]..message_length_formatted..[[
]]); table.insert(message, [[Account: ]]..id..[[@]]..domain_name..[[
]]); table.insert(message, [[
]]); @@ -1225,13 +1225,14 @@ function listen_to_recording (message_number, uuid, created_epoch, caller_id_nam if (dtmf_digits == "1") then listen_to_recording(message_number, uuid, created_epoch, caller_id_name, caller_id_number); elseif (dtmf_digits == "2") then - message_saved(uuid); + message_saved(voicemail_id, uuid); macro(session, "message_saved", 1, 100, ''); elseif (dtmf_digits == "5") then - message_saved(uuid); + message_saved(voicemail_id, uuid); return_call(caller_id_number); elseif (dtmf_digits == "7") then delete_recording(uuid); + message_waiting(voicemail_id); elseif (dtmf_digits == "8") then forward_to_extension(uuid); dtmf_digits = ''; @@ -1242,22 +1243,23 @@ function listen_to_recording (message_number, uuid, created_epoch, caller_id_nam timeouts = 0; main_menu(); elseif (dtmf_digits == "0") then - message_saved(uuid); + message_saved(voicemail_id, uuid); session:transfer("0", "XML", context); else - message_saved(uuid); + message_saved(voicemail_id, uuid); macro(session, "message_saved", 1, 100, ''); end end end --voicemail count if zero new messages set the mwi to no - function message_waiting(voicemail_uuid, voicemail_id) + function message_waiting(voicemail_id) if (voicemail_id ~= nil) then - sql = [[SELECT count(*) as new_messages FROM v_voicemail_messages - WHERE domain_uuid = ']] .. domain_uuid ..[[' - AND voicemail_uuid = ']] .. voicemail_uuid ..[[' - AND (message_status is null or message_status = '') ]]; + sql = [[SELECT count(*) as new_messages FROM v_voicemail_messages as m, v_voicemails as v + WHERE v.domain_uuid = ']] .. domain_uuid ..[[' + AND v.voicemail_uuid = m.voicemail_uuid + AND v.voicemail_id = ']] .. voicemail_id ..[[' + AND (m.message_status is null or m.message_status = '') ]]; if (debug["sql"]) then if (session:ready()) then freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "\n"); @@ -1266,16 +1268,24 @@ end status = dbh:query(sql, function(row) if (row["new_messages"] == "0") then --send the message waiting event - local event = freeswitch.Event("message_waiting"); - event:addHeader("MWI-Messages-Waiting", "no"); - event:addHeader("MWI-Message-Account", "sip:"..voicemail_id.."@"..domain_name); - event:fire(); + local event = freeswitch.Event("message_waiting"); + event:addHeader("MWI-Messages-Waiting", "no"); + event:addHeader("MWI-Message-Account", "sip:"..voicemail_id.."@"..domain_name); + event:fire(); + --log to console + if (debug["info"]) then + freeswitch.consoleLog("notice", "[voicemail][message-waiting] id: "..voicemail_id.."@"..domain_name.." status: no\n"); + end else --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(); + local event = freeswitch.Event("message_waiting"); + event:addHeader("MWI-Messages-Waiting", "yes"); + event:addHeader("MWI-Message-Account", "sip:"..voicemail_id.."@"..domain_name); + event:fire(); + --log to console + if (debug["info"]) then + freeswitch.consoleLog("notice", "[voicemail][message-waiting] id: "..voicemail_id.."@"..domain_name.." status: yes\n"); + end end end); end @@ -1296,16 +1306,18 @@ end freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "\n"); end dbh:query(sql); + --log to console + if (debug["info"]) then + freeswitch.consoleLog("notice", "[voicemail][deleted] message: " .. uuid .. "\n"); + end --message deleted dtmf_digits = ''; macro(session, "message_deleted", 1, 100, ''); - --check the message waiting status - message_waiting(); end end --save the message - function message_saved(uuid) + function message_saved(voicemail_id, uuid) if (session:ready()) then --clear the dtmf dtmf_digits = ''; @@ -1319,8 +1331,12 @@ end freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "\n"); end dbh:query(sql); + --log to console + if (debug["info"]) then + freeswitch.consoleLog("notice", "[voicemail][saved] id: " .. voicemail_id .. " message: "..uuid.."\n"); + end --check the message waiting status - message_waiting(); + message_waiting(voicemail_id); end end