瀏覽代碼

Add voicemail to email, whether to save the save the voicemail locally and whether to attach the voicemail to the email.

Mark Crane 12 年之前
父節點
當前提交
49f0221167
共有 1 個文件被更改,包括 64 次插入11 次删除
  1. 64 11
      includes/install/scripts/voicemail.lua

+ 64 - 11
includes/install/scripts/voicemail.lua

@@ -448,6 +448,9 @@
 			voicemail_uuid = row["voicemail_uuid"];
 			voicemail_uuid = row["voicemail_uuid"];
 			voicemail_password = row["voicemail_password"];
 			voicemail_password = row["voicemail_password"];
 			greeting_id = row["greeting_id"];
 			greeting_id = row["greeting_id"];
+			voicemail_mail_to = row["voicemail_mail_to"];
+			voicemail_attach_file = row["voicemail_attach_file"];
+			voicemail_local_after_email = row["voicemail_local_after_email"];
 		end);
 		end);
 	end
 	end
 
 
@@ -474,6 +477,12 @@
 			result = session:recordFile(voicemail_dir.."/"..voicemail_id.."/msg_"..uuid..".wav", max_len_seconds, silence_threshold, silence_seconds);
 			result = session:recordFile(voicemail_dir.."/"..voicemail_id.."/msg_"..uuid..".wav", max_len_seconds, silence_threshold, silence_seconds);
 			--session:execute("record", voicemail_dir.."/"..uuid.." 180 200");
 			--session:execute("record", voicemail_dir.."/"..uuid.." 180 200");
 
 
+		--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();
+
 		--set the epoch
 		--set the epoch
 			stop_epoch = os.time();
 			stop_epoch = os.time();
 			freeswitch.consoleLog("notice", "[voicemail] start epoch: " .. stop_epoch .. "\n");
 			freeswitch.consoleLog("notice", "[voicemail] start epoch: " .. stop_epoch .. "\n");
@@ -483,12 +492,29 @@
 			freeswitch.consoleLog("notice", "[voicemail] message length: " .. message_length .. "\n");
 			freeswitch.consoleLog("notice", "[voicemail] message length: " .. message_length .. "\n");
 
 
 		--send the email with the voicemail recording attached
 		--send the email with the voicemail recording attached
-			--[[freeswitch.email("",
-				"",
-				"To: "..email_address.."\nFrom: "..from_address.."\nSubject: Fax to: "..number_dialed.." SENT",
-				email_message_success ,
-				fax_file
-			);]]
+			if (string.len(voicemail_mail_to) > 3) then
+				message = [[<font face=arial>
+				<b>Message From "]]..caller_id_name..[[" <A HREF="tel:]]..caller_id_number..[[">]]..caller_id_number..[[</A></b><br>
+				<hr noshade size=1>
+				Created: ]]..os.date("%d %b %Y", start_epoch)..[[<br>
+				Duration: ]]..message_length..[[<br>
+				Account: ]]..voicemail_id..[[@]]..domain_name..[[<br>
+				</font>]];
+				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,
+					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,
+						message
+					);
+				end
+			end
 
 
 		--save the message to the voicemail messages
 		--save the message to the voicemail messages
 			local sql = {}
 			local sql = {}
@@ -516,11 +542,18 @@
 			--table.insert(sql, "'".. message_status .."', ");
 			--table.insert(sql, "'".. message_status .."', ");
 			--table.insert(sql, "'".. message_priority .."' ");
 			--table.insert(sql, "'".. message_priority .."' ");
 			table.insert(sql, ") ");
 			table.insert(sql, ") ");
-			sql = table.concat(sql, "\n");
+			if (voicemail_local_after_email == "true") then
+				sql = table.concat(sql, "\n");
+			end
 			if (debug["sql"]) then
 			if (debug["sql"]) then
 				freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "\n");
 				freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "\n");
 			end
 			end
 			dbh:query(sql);
 			dbh:query(sql);
+
+		--local after email is false so delete the recording file
+			if (voicemail_local_after_email == "false") then
+				os.remove(voicemail_dir.."/"..voicemail_id.."/msg_"..uuid..".wav");
+			end
 	end
 	end
 
 
 function main_menu ()
 function main_menu ()
@@ -623,7 +656,7 @@ function listen_to_recording (message_number, uuid, created_epoch, caller_id_nam
 			--please enter the extension to send this message to followed by #
 			--please enter the extension to send this message to followed by #
 	--process the dtmf
 	--process the dtmf
 		if (dtmf_digits == "1") then
 		if (dtmf_digits == "1") then
-			listen_to_recording(message_number, uuid, created_epoch, caller_id_name, caller_id_number)
+			listen_to_recording(message_number, uuid, created_epoch, caller_id_name, caller_id_number);
 		elseif (dtmf_digits == "2") then
 		elseif (dtmf_digits == "2") then
 			message_saved(uuid);
 			message_saved(uuid);
 			macro(session, "message_saved", 200, '');
 			macro(session, "message_saved", 200, '');
@@ -641,9 +674,9 @@ function message_saved(uuid)
 		sql = [[UPDATE v_voicemail_messages SET message_status = 'saved'
 		sql = [[UPDATE v_voicemail_messages SET message_status = 'saved'
 			WHERE domain_uuid = ']] .. domain_uuid ..[['
 			WHERE domain_uuid = ']] .. domain_uuid ..[['
 			AND voicemail_message_uuid = ']] .. uuid ..[[']];
 			AND voicemail_message_uuid = ']] .. uuid ..[[']];
-		--if (debug["sql"]) then
-			freeswitch.consoleLog("notice", "[voicemail] SQL7: " .. sql .. "\n");
-		--end
+		if (debug["sql"]) then
+			freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "\n");
+		end
 		dbh:query(sql);
 		dbh:query(sql);
 end
 end
 
 
@@ -703,6 +736,26 @@ function menu_messages (message_status)
 			end);
 			end);
 		end
 		end
 
 
+	--voicemail count if zero new messages set the mwi to no
+		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 = '') ]];
+			if (debug["sql"]) then
+				freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "\n");
+			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();
+				end
+			end);
+		end
+
 	--set the display
 	--set the display
 		api = freeswitch.API();
 		api = freeswitch.API();
 		reply = api:executeString("uuid_display "..session:get_uuid().." "..destination_number);
 		reply = api:executeString("uuid_display "..session:get_uuid().." "..destination_number);