Преглед на файлове

Update the voicemail script and add the ability to send an email on demand for the voicemail message and then add ability to forward the message to another extension.

Mark Crane преди 12 години
родител
ревизия
e79eefa179
променени са 1 файла, в които са добавени 242 реда и са изтрити 97 реда
  1. 242 97
      includes/install/scripts/voicemail.lua

+ 242 - 97
includes/install/scripts/voicemail.lua

@@ -112,13 +112,13 @@
 
 
 --get the voicemail id
 --get the voicemail id
 	function get_voicemail_id()
 	function get_voicemail_id()
-		voicemail_id = macro(session, "voicemail_id", 5000, '');
-		if (string.len(voicemail_id) == 0) then
+		id = macro(session, "voicemail_id", 5000, '');
+		if (string.len(id) == 0) then
 			if (session:ready()) then
 			if (session:ready()) then
-				voicemail_id = get_voicemail_id();
+				id = get_voicemail_id();
 			end
 			end
 		else
 		else
-			return voicemail_id;
+			return id;
 		end
 		end
 	end
 	end
 
 
@@ -152,7 +152,7 @@
 		--compare the password from the database with the password provided by the user
 		--compare the password from the database with the password provided by the user
 			if (voicemail_password ~= password) then
 			if (voicemail_password ~= password) then
 				--incorrect password
 				--incorrect password
-				macro(session, "password_not_valid", 2000, '');
+				macro(session, "password_not_valid", 1000, '');
 				if (session:ready()) then
 				if (session:ready()) then
 					check_password(voicemail_id);
 					check_password(voicemail_id);
 				end
 				end
@@ -443,31 +443,35 @@
 					table.insert(actions, {app="playAndGetDigits",data="digits/5.wav"});
 					table.insert(actions, {app="playAndGetDigits",data="digits/5.wav"});
 				end
 				end
 			--To forward this message press 8
 			--To forward this message press 8
-				if (name == "forward_message") then
+				if (name == "to_forward_message") then
 					actions = {}
 					actions = {}
-					table.insert(actions, {app="playAndGetDigits",data="voicemail/vm-zzz.wav"});
+					table.insert(actions, {app="playAndGetDigits",data="voicemail/vm-to_forward.wav"});
 					table.insert(actions, {app="playAndGetDigits",data="voicemail/vm-press.wav"});
 					table.insert(actions, {app="playAndGetDigits",data="voicemail/vm-press.wav"});
 					table.insert(actions, {app="playAndGetDigits",data="digits/8.wav"});
 					table.insert(actions, {app="playAndGetDigits",data="digits/8.wav"});
 				end
 				end
-				--To add an introduction to this message press 1
-					--if (name == "add_prefix_to_message") then
-					--	actions = {}
-					--	table.insert(actions, {app="playAndGetDigits",data="voicemail/vm-zzz.wav"});
-					--	table.insert(actions, {app="playAndGetDigits",data="voicemail/vm-press.wav"});
-					--	table.insert(actions, {app="playAndGetDigits",data="digits/1.wav"});
-					--end
-				--To send this message now press 2
-					--if (name == "send_message") then
-					--	actions = {}
-					--	table.insert(actions, {app="playAndGetDigits",data="voicemail/vm-zzz.wav"});
-					--	table.insert(actions, {app="playAndGetDigits",data="voicemail/vm-press.wav"});
-					--	table.insert(actions, {app="playAndGetDigits",data="digits/2.wav"});
-					--end
-					--please enter the extension to send this message to followed by #
-						--if (name == "send_message_to_extension") then
-						--	actions = {}
-						--	table.insert(actions, {app="playAndGetDigits",data="voicemail/vm-zzz.wav"});
-						--end
+			--Please enter the extension to forward this message to followed by #
+				if (name == "forward_enter_extension") then
+					actions = {}
+					table.insert(actions, {app="playAndGetDigits",data="voicemail/vm-forward_enter_ext.wav"});
+					table.insert(actions, {app="playAndGetDigits",data="voicemail/vm-followed_by_pound.wav"});
+				end
+			--To forward this recording to your email press 9
+				if (name == "forward_to_email") then
+					actions = {}
+					table.insert(actions, {app="playAndGetDigits",data="voicemail/vm-forward_to_email.wav"});
+					table.insert(actions, {app="playAndGetDigits",data="voicemail/vm-press.wav"});
+					table.insert(actions, {app="playAndGetDigits",data="digits/9.wav"});
+				end
+			--Emailed
+				if (name == "emailed") then
+					actions = {}
+					table.insert(actions, {app="playAndGetDigits",data="voicemail/vm-emailed.wav"});
+				end
+			--Please enter the extension to send this message to followed by #
+				--if (name == "send_message_to_extension") then
+				--	actions = {}
+				--	table.insert(actions, {app="playAndGetDigits",data="voicemail/vm-zzz.wav"});
+				--end
 			--Message saved
 			--Message saved
 				if (name == "message_saved") then
 				if (name == "message_saved") then
 					actions = {}
 					actions = {}
@@ -559,7 +563,7 @@
 --save the recording
 --save the recording
 	function record_message()
 	function record_message()
 		--record your message at the tone press any key or stop talking to end the recording
 		--record your message at the tone press any key or stop talking to end the recording
-			result = macro(session, "record_message", 200);
+			result = macro(session, "record_message", 100);
 
 
 		--start epoch
 		--start epoch
 			start_epoch = os.time();
 			start_epoch = os.time();
@@ -587,7 +591,7 @@
 			if (message_length < 4) then
 			if (message_length < 4) then
 				if (session:ready()) then
 				if (session:ready()) then
 					--your recording is below the minimal acceptable length, please try again
 					--your recording is below the minimal acceptable length, please try again
-						macro(session, "too_small", 200);
+						macro(session, "too_small", 100);
 					--record your message at the tone
 					--record your message at the tone
 						record_message();
 						record_message();
 				end
 				end
@@ -603,11 +607,11 @@
 			dtmf_digits = '';
 			dtmf_digits = '';
 		--to listen to the recording press 1
 		--to listen to the recording press 1
 			if (string.len(dtmf_digits) == 0) then
 			if (string.len(dtmf_digits) == 0) then
-				dtmf_digits = macro(session, "to_listen_to_recording", 200, '');
+				dtmf_digits = macro(session, "to_listen_to_recording", 100, '');
 			end
 			end
 		--to save the recording press 2
 		--to save the recording press 2
 			if (string.len(dtmf_digits) == 0) then
 			if (string.len(dtmf_digits) == 0) then
-				dtmf_digits = macro(session, "to_save_recording", 200, '');
+				dtmf_digits = macro(session, "to_save_recording", 100, '');
 			end
 			end
 		--to re-record press 3
 		--to re-record press 3
 			if (string.len(dtmf_digits) == 0) then
 			if (string.len(dtmf_digits) == 0) then
@@ -621,8 +625,8 @@
 					record_menu();
 					record_menu();
 			elseif (dtmf_digits == "2") then
 			elseif (dtmf_digits == "2") then
 				--save the message
 				--save the message
-					macro(session, "message_saved", 200, '');
-					macro(session, "goodbye", 200, '');
+					macro(session, "message_saved", 100, '');
+					macro(session, "goodbye", 100, '');
 				--hangup the call
 				--hangup the call
 					session:hangup();
 					session:hangup();
 			elseif (dtmf_digits == "3") then
 			elseif (dtmf_digits == "3") then
@@ -630,7 +634,7 @@
 					record_message();
 					record_message();
 			elseif (dtmf_digits == "*") then
 			elseif (dtmf_digits == "*") then
 				--hangup
 				--hangup
-					macro(session, "goodbye", 200, '');
+					macro(session, "goodbye", 100, '');
 					session:hangup();
 					session:hangup();
 			else
 			else
 				if (session:ready()) then
 				if (session:ready()) then
@@ -639,6 +643,157 @@
 			end
 			end
 	end
 	end
 
 
+--define a function to send email
+	function send_email(uuid)
+		--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);
+			freeswitch.consoleLog("notice", "[voicemail] message length: " .. message_length .. "\n");
+
+		--send the email
+			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("%A, %d %b %Y %I:%M %p", start_epoch)..[[<br>
+			Duration: ]]..message_length_formatted..[[<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_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
+
+--define a function to forward a message to an extension
+	function forward_to_extension(uuid)
+		--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
+					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);
+
+		--request the forward_voicemail_id
+			forward_voicemail_id = macro(session, "forward_enter_extension", 7000, '');
+			if (string.len(forward_voicemail_id) == 0) then
+				forward_voicemail_id = macro(session, "forward_enter_extension", 7000, '');
+			end
+			if (string.len(forward_voicemail_id) == 0) then
+				forward_voicemail_id = macro(session, "forward_enter_extension", 7000, '');
+			end
+
+		--get the voicemail settings using the voicemail_uuid
+			sql = [[SELECT * FROM v_voicemails
+				WHERE domain_uuid = ']] .. domain_uuid ..[['
+				AND voicemail_id = ']] .. forward_voicemail_id ..[['
+				AND voicemail_enabled = 'true' ]];
+			if (debug["sql"]) then
+				freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "\n");
+			end
+			status = dbh:query(sql, function(row)
+				forward_voicemail_uuid = string.lower(row["voicemail_uuid"]);
+				forward_voicemail_mail_to = row["voicemail_mail_to"];
+				forward_voicemail_attach_file = row["voicemail_attach_file"];
+				forward_voicemail_local_after_email = row["voicemail_local_after_email"];
+			end);
+
+		--set default values
+			if (string.len(forward_voicemail_attach_file) == 0) then
+				forward_voicemail_attach_file = "true";
+			end
+			if (string.len(forward_voicemail_local_after_email) == 0) then
+				forward_voicemail_local_after_email = "true";
+			end
+
+		--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, "'".. forward_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, ") ");
+			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);
+
+		--set the message waiting event
+			local event = freeswitch.Event("message_waiting");
+			event:addHeader("MWI-Messages-Waiting", "yes");
+			event:addHeader("MWI-Message-Account", "sip:"..forward_voicemail_id.."@"..domain_name);
+			event:fire();
+
+		--local after email is true so copy the recording file
+			if (voicemail_local_after_email == "true") then
+				os.execute("mkdir -p " .. voicemail_dir.."/"..forward_voicemail_id);
+				os.execute("cp "..voicemail_dir.."/"..voicemail_id.."/msg_"..uuid..".wav "..voicemail_dir.."/"..forward_voicemail_id.."/msg_"..uuid..".wav");
+			end
+
+		--send the email with the voicemail recording attached
+			if (string.len(forward_voicemail_mail_to) > 3) then
+				send_email(uuid);
+			end
+	end
+
 --leave a voicemail
 --leave a voicemail
 	if (voicemail_action == "save") then
 	if (voicemail_action == "save") then
 
 
@@ -648,43 +803,12 @@
 				session:streamFile(voicemail_dir.."/"..voicemail_id.."/greeting_"..greeting_id..".wav");
 				session:streamFile(voicemail_dir.."/"..voicemail_id.."/greeting_"..greeting_id..".wav");
 			else
 			else
 				--if there is no greeting then play digits of the voicemail_id
 				--if there is no greeting then play digits of the voicemail_id
-				result = macro(session, "person_not_available_record_message", 200);
+				result = macro(session, "person_not_available_record_message", 100);
 			end
 			end
 
 
 		--save the recording
 		--save the recording
 			record_message();
 			record_message();
 
 
-		--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();
-
-		--send the email with the voicemail recording attached
-			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("%A, %d %b %Y %I:%M %p", start_epoch)..[[<br>
-				Duration: ]]..message_length_formatted..[[<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_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
-
 		--save the message to the voicemail messages
 		--save the message to the voicemail messages
 			local sql = {}
 			local sql = {}
 			table.insert(sql, "INSERT INTO v_voicemail_messages ");
 			table.insert(sql, "INSERT INTO v_voicemail_messages ");
@@ -719,6 +843,17 @@
 			end
 			end
 			dbh:query(sql);
 			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();
+
+		--send the email with the voicemail recording attached
+			if (string.len(voicemail_mail_to) > 3) then
+				send_email(uuid);
+			end
+
 		--local after email is false so delete the recording file
 		--local after email is false so delete the recording file
 			if (voicemail_local_after_email == "false") then
 			if (voicemail_local_after_email == "false") then
 				os.remove(voicemail_dir.."/"..voicemail_id.."/msg_"..uuid..".wav");
 				os.remove(voicemail_dir.."/"..voicemail_id.."/msg_"..uuid..".wav");
@@ -737,7 +872,7 @@ function main_menu ()
 		status = dbh:query(sql, function(row)
 		status = dbh:query(sql, function(row)
 			new_messages = row["new_messages"];
 			new_messages = row["new_messages"];
 		end);
 		end);
-		dtmf_digits = macro(session, "new_messages", 200, new_messages);
+		dtmf_digits = macro(session, "new_messages", 100, new_messages);
 	--saved voicemail count
 	--saved voicemail count
 		if (string.len(dtmf_digits) == 0) then
 		if (string.len(dtmf_digits) == 0) then
 			sql = [[SELECT count(*) as saved_messages FROM v_voicemail_messages
 			sql = [[SELECT count(*) as saved_messages FROM v_voicemail_messages
@@ -750,19 +885,19 @@ function main_menu ()
 			status = dbh:query(sql, function(row)
 			status = dbh:query(sql, function(row)
 				saved_messages = row["saved_messages"];
 				saved_messages = row["saved_messages"];
 			end);
 			end);
-			dtmf_digits = macro(session, "saved_messages", 200, saved_messages);
+			dtmf_digits = macro(session, "saved_messages", 100, saved_messages);
 		end
 		end
 	--to listen to new message
 	--to listen to new message
 		if (string.len(dtmf_digits) == 0) then
 		if (string.len(dtmf_digits) == 0) then
-			dtmf_digits = macro(session, "listen_to_new_messages", 200, '');
+			dtmf_digits = macro(session, "listen_to_new_messages", 100, '');
 		end
 		end
 	--to listen to saved message
 	--to listen to saved message
 		if (string.len(dtmf_digits) == 0) then
 		if (string.len(dtmf_digits) == 0) then
-			dtmf_digits = macro(session, "listen_to_saved_messages", 200, '');
+			dtmf_digits = macro(session, "listen_to_saved_messages", 100, '');
 		end
 		end
 	--for advanced options
 	--for advanced options
 		if (string.len(dtmf_digits) == 0) then
 		if (string.len(dtmf_digits) == 0) then
-			dtmf_digits = macro(session, "advanced", 200, '');
+			dtmf_digits = macro(session, "advanced", 100, '');
 		end
 		end
 	--to exit press #
 	--to exit press #
 		if (string.len(dtmf_digits) == 0) then
 		if (string.len(dtmf_digits) == 0) then
@@ -778,7 +913,7 @@ function main_menu ()
 		elseif (dtmf_digits == "0") then
 		elseif (dtmf_digits == "0") then
 			session:transfer("0", "XML", context);
 			session:transfer("0", "XML", context);
 		elseif (dtmf_digits == "*") then
 		elseif (dtmf_digits == "*") then
-			macro(session, "goodbye", 200, '');
+			macro(session, "goodbye", 100, '');
 			session:hangup();
 			session:hangup();
 		else
 		else
 			if (session:ready()) then
 			if (session:ready()) then
@@ -793,7 +928,7 @@ function listen_to_recording (message_number, uuid, created_epoch, caller_id_nam
 		api = freeswitch.API();
 		api = freeswitch.API();
 		reply = api:executeString("uuid_display "..session:get_uuid().." "..caller_id_number);
 		reply = api:executeString("uuid_display "..session:get_uuid().." "..caller_id_number);
 	--say the message number
 	--say the message number
-		dtmf_digits = macro(session, "message_number", 200, '');
+		dtmf_digits = macro(session, "message_number", 100, '');
 	--say the number
 	--say the number
 		session:say(message_number, "en", "NUMBER", "pronounced");
 		session:say(message_number, "en", "NUMBER", "pronounced");
 	--say the message date
 	--say the message date
@@ -804,45 +939,55 @@ function listen_to_recording (message_number, uuid, created_epoch, caller_id_nam
 		end
 		end
 	--to listen to the recording press 1
 	--to listen to the recording press 1
 		if (string.len(dtmf_digits) == 0) then
 		if (string.len(dtmf_digits) == 0) then
-			dtmf_digits = macro(session, "listen_to_recording", 200, '');
+			dtmf_digits = macro(session, "listen_to_recording", 100, '');
 		end
 		end
 	--to save the recording press 2
 	--to save the recording press 2
 		if (string.len(dtmf_digits) == 0) then
 		if (string.len(dtmf_digits) == 0) then
-			dtmf_digits = macro(session, "save_recording", 200, '');
+			dtmf_digits = macro(session, "save_recording", 100, '');
+		end
+	--to return the call now press 5
+		if (string.len(dtmf_digits) == 0) then
+			dtmf_digits = macro(session, "return_call", 100, '');
 		end
 		end
 	--to delete the recording press 7
 	--to delete the recording press 7
 		if (string.len(dtmf_digits) == 0) then
 		if (string.len(dtmf_digits) == 0) then
-			dtmf_digits = macro(session, "delete_recording", 200, '');
+			dtmf_digits = macro(session, "delete_recording", 100, '');
 		end
 		end
-	--to return the call now press 5
+	--to forward this message press 8
+		if (string.len(dtmf_digits) == 0) then
+			dtmf_digits = macro(session, "to_forward_message", 100, '');
+		end
+	--to forward this recording to your email press 9
 		if (string.len(dtmf_digits) == 0) then
 		if (string.len(dtmf_digits) == 0) then
-			dtmf_digits = macro(session, "return_call", 200, '');
+			dtmf_digits = macro(session, "forward_to_email", 100, '');
 		end
 		end
 	--wait for more digits
 	--wait for more digits
 		if (string.len(dtmf_digits) == 0) then
 		if (string.len(dtmf_digits) == 0) then
 			dtmf_digits = session:getDigits(max_digits, "#", 3000);
 			dtmf_digits = session:getDigits(max_digits, "#", 3000);
 		end
 		end
-	--to forward this message press 8
-		--to add an introduction to this message press 1
-		--to send this message now 2
-			--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, '');
-		elseif (dtmf_digits == "7") then
-			delete_recording(uuid);
+			macro(session, "message_saved", 100, '');
 		elseif (dtmf_digits == "5") then
 		elseif (dtmf_digits == "5") then
 			return_call(caller_id_number);
 			return_call(caller_id_number);
+		elseif (dtmf_digits == "7") then
+			delete_recording(uuid);
+		elseif (dtmf_digits == "8") then
+			forward_to_extension(uuid);
+			macro(session, "message_saved", 100, '');
+		elseif (dtmf_digits == "9") then
+			send_email(uuid);
+			macro(session, "emailed", 100);
 		elseif (dtmf_digits == "*") then
 		elseif (dtmf_digits == "*") then
 			main_menu();
 			main_menu();
 		elseif (dtmf_digits == "0") then
 		elseif (dtmf_digits == "0") then
 			session:transfer("0", "XML", context);
 			session:transfer("0", "XML", context);
 		else
 		else
 			message_saved(uuid);
 			message_saved(uuid);
-			macro(session, "message_saved", 200, '');
+			macro(session, "message_saved", 100, '');
 		end
 		end
 end
 end
 
 
@@ -887,7 +1032,7 @@ end
 			end
 			end
 			dbh:query(sql);
 			dbh:query(sql);
 		--message deleted
 		--message deleted
-			macro(session, "message_deleted", 200, '');
+			macro(session, "message_deleted", 100, '');
 		--check the message waiting status
 		--check the message waiting status
 			message_waiting();
 			message_waiting();
 	end
 	end
@@ -919,7 +1064,7 @@ function menu_messages (message_status)
 		max_timeout = 2000;
 		max_timeout = 2000;
 		min_digits = 1;
 		min_digits = 1;
 		max_digits = 1;
 		max_digits = 1;
-		tries =1;
+		tries = 1;
 		timeout = 2000;
 		timeout = 2000;
 	--set the message number
 	--set the message number
 		message_number = 0;
 		message_number = 0;
@@ -985,18 +1130,18 @@ end
 
 
 function advanced ()
 function advanced ()
 	--To record a greeting press 1
 	--To record a greeting press 1
-		dtmf_digits = macro(session, "to_record_greeting", 200, '');
+		dtmf_digits = macro(session, "to_record_greeting", 100, '');
 	--To choose greeting press 2
 	--To choose greeting press 2
 		if (string.len(dtmf_digits) == 0) then
 		if (string.len(dtmf_digits) == 0) then
-			dtmf_digits = macro(session, "choose_greeting", 200, '');
+			dtmf_digits = macro(session, "choose_greeting", 100, '');
 		end
 		end
 	--To record your name 3
 	--To record your name 3
 		if (string.len(dtmf_digits) == 0) then
 		if (string.len(dtmf_digits) == 0) then
-			dtmf_digits = macro(session, "to_record_name", 200, '');
+			dtmf_digits = macro(session, "to_record_name", 100, '');
 		end
 		end
 	--To change your password press 6
 	--To change your password press 6
 		if (string.len(dtmf_digits) == 0) then
 		if (string.len(dtmf_digits) == 0) then
-			dtmf_digits = macro(session, "change_password", 200, '');
+			dtmf_digits = macro(session, "change_password", 100, '');
 		end
 		end
 	--For the main menu press 0
 	--For the main menu press 0
 		if (string.len(dtmf_digits) == 0) then
 		if (string.len(dtmf_digits) == 0) then
@@ -1041,7 +1186,7 @@ function record_greeting()
 			or greeting_id == "9") then
 			or greeting_id == "9") then
 
 
 			--record your greeting at the tone press any key or stop talking to end the recording
 			--record your greeting at the tone press any key or stop talking to end the recording
-				macro(session, "record_greeting", 200, '');
+				macro(session, "record_greeting", 100, '');
 
 
 			--record the greeting
 			--record the greeting
 				max_len_seconds = 30;
 				max_len_seconds = 30;
@@ -1056,7 +1201,7 @@ function record_greeting()
 				advanced();
 				advanced();
 		else
 		else
 			--invalid greeting_id
 			--invalid greeting_id
-				greeting_id = macro(session, "choose_greeting_fail", 200, '');
+				greeting_id = macro(session, "choose_greeting_fail", 100, '');
 
 
 			--send back to choose the greeting
 			--send back to choose the greeting
 				if (session:ready()) then
 				if (session:ready()) then
@@ -1104,13 +1249,13 @@ function choose_greeting()
 				session:streamFile(voicemail_dir.."/"..voicemail_id.."/greeting_"..greeting_id..".wav");
 				session:streamFile(voicemail_dir.."/"..voicemail_id.."/greeting_"..greeting_id..".wav");
 
 
 			--greeting selected
 			--greeting selected
-				macro(session, "greeting_selected", 200, greeting_id);
+				macro(session, "greeting_selected", 100, greeting_id);
 
 
 			--advanced menu
 			--advanced menu
 				advanced();
 				advanced();
 		else
 		else
 			--invalid greeting_id
 			--invalid greeting_id
-				greeting_id = macro(session, "choose_greeting_fail", 200, '');
+				greeting_id = macro(session, "choose_greeting_fail", 100, '');
 
 
 			--send back to choose the greeting
 			--send back to choose the greeting
 				if (session:ready()) then
 				if (session:ready()) then
@@ -1124,7 +1269,7 @@ end
 
 
 function record_name()
 function record_name()
 	--play the name record
 	--play the name record
-		macro(session, "record_name", 200, '');
+		macro(session, "record_name", 100, '');
 
 
 	--save the recording
 	--save the recording
 		-- syntax is session:recordFile(file_name, max_len_secs, silence_threshold, silence_secs)
 		-- syntax is session:recordFile(file_name, max_len_secs, silence_threshold, silence_secs)
@@ -1139,7 +1284,7 @@ function record_name()
 		session:streamFile(voicemail_dir.."/"..voicemail_id.."/recorded_name.wav");
 		session:streamFile(voicemail_dir.."/"..voicemail_id.."/recorded_name.wav");
 
 
 	--message saved
 	--message saved
-		macro(session, "message_saved", 200, '');
+		macro(session, "message_saved", 100, '');
 
 
 	--advanced menu
 	--advanced menu
 		advanced();
 		advanced();