| 
									
										
										
										
											2009-05-28 14:39:21 +00:00
										 |  |  | ; MINI-VOICEMAIL dialplan example | 
					
						
							| 
									
										
										
										
											2007-04-18 07:57:18 +00:00
										 |  |  | ; --------------------------------------------------------------------------------------- | 
					
						
							|  |  |  | ; ASTERISK_FILE_VERSION(__FILE__, "$Revision$") | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | ; This is an example on how to use the Mini-Voicemail system to build | 
					
						
							|  |  |  | ; voicemail systems. | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | ;.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- | 
					
						
							|  |  |  | ; A macro to test the MINIVMACCOUNT dialplan function | 
					
						
							|  |  |  | ; 	Currently, accountcode and pincode is not used in the application | 
					
						
							|  |  |  | ; 	They where added to be used in dialplan scripting | 
					
						
							| 
									
										
										
										
											2009-05-28 14:39:21 +00:00
										 |  |  | ; | 
					
						
							| 
									
										
										
										
											2007-04-18 07:57:18 +00:00
										 |  |  | ; | 
					
						
							|  |  |  | [macro-minivmfunctest] | 
					
						
							|  |  |  | exten => s,1,set(account=${ARGV1}) | 
					
						
							|  |  |  | exten => minivm,n,verbose(1,-------------------- Minivm Function test - Accoutn ${account}  -------------) | 
					
						
							|  |  |  | exten => s,n,verbose(1,---- Has account:       ${MINIVMACCOUNT(${account}:hasaccount)}) | 
					
						
							|  |  |  | exten => s,n,verbose(1,---- Fullname:          ${MINIVMACCOUNT(${account}:fullname)}) | 
					
						
							|  |  |  | exten => s,n,verbose(1,---- Email:             ${MINIVMACCOUNT(${account}:email)}) | 
					
						
							|  |  |  | exten => s,n,verbose(1,---- Pager:             ${MINIVMACCOUNT(${account}:pager)}) | 
					
						
							|  |  |  | exten => s,n,verbose(1,---- E-mail template:   ${MINIVMACCOUNT(${account}:etemplate)}) | 
					
						
							|  |  |  | exten => s,n,verbose(1,---- Pager template:    ${MINIVMACCOUNT(${account}:ptemplate)}) | 
					
						
							|  |  |  | exten => s,n,verbose(1,---- Account code:      ${MINIVMACCOUNT(${account}:accountcode)}) | 
					
						
							|  |  |  | exten => s,n,verbose(1,---- Path:              ${MINIVMACCOUNT(${account}:path)}) | 
					
						
							|  |  |  | exten => s,n,verbose(1,---- Pincode:           ${MINIVMACCOUNT(${account}:pincode)}) | 
					
						
							|  |  |  | exten => s,n,verbose(1,---- Time zone:         ${MINIVMACCOUNT(${account}:timezone)}) | 
					
						
							|  |  |  | exten => s,n,verbose(1,---- Language:          ${MINIVMACCOUNT(${account}:language)}) | 
					
						
							|  |  |  | ; This requires setvar=customerclass=gold in the account configuration | 
					
						
							|  |  |  | exten => s,n,verbose(1,---- Var:customerclass: ${MINIVMACCOUNT(${account}:customerclass)}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [minivm-scenario1] | 
					
						
							|  |  |  | ; minivmtest tests the dialplan function MINIVMACCOUNT | 
					
						
							|  |  |  | ; Check the output in the console with verbose set | 
					
						
							|  |  |  | exten => minivmtest,1,answer | 
					
						
							|  |  |  | exten => minivmtest,n,wait(0.5) | 
					
						
							|  |  |  | exten => minivmtest,n,set(ACCOUNT=do-not-spam-me@example.com) | 
					
						
							|  |  |  | exten => minivmtest,n,macro(minivmfunctest, ${ACCOUNT}) | 
					
						
							|  |  |  | exten => minivmtest,n,playback(beep) | 
					
						
							|  |  |  | exten => minivmtest,n,hangup | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ;.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- | 
					
						
							|  |  |  | ; "minivm" tests a full scenario | 
					
						
							|  |  |  | ; Remember that users may hangup | 
					
						
							|  |  |  | ; This works both for users with accounts in minivm.conf and by just giving an e-mail address | 
					
						
							|  |  |  | ; without configuring an account | 
					
						
							|  |  |  | exten => minivm,1,answer | 
					
						
							|  |  |  | exten => minivm,n,wait(0.5)	; Wait for Voip channels to settle | 
					
						
							|  |  |  | exten => minivm,n,set(account=oej@example.com) | 
					
						
							|  |  |  | exten => minivm,n,noop(------------------------------------------- Minivm Greet   -------------) | 
					
						
							|  |  |  | exten => minivm,n,minivmgreet(${account}) | 
					
						
							|  |  |  | exten => minivm,n,verbose(1,-- MINIVM_GREET_STATUS = ${MINIVM_GREET_STATUS} ) | 
					
						
							|  |  |  | exten => minivm,n,noop(------------------------------------------- Minivm Record  -------------) | 
					
						
							|  |  |  | exten => minivm,n,minivmRecord(${account},b) | 
					
						
							|  |  |  | exten => minivm,n,goto(minivmcleanup,1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ; Cleanup after recording or hangup | 
					
						
							|  |  |  | exten => minivmcleanup,1,noop(------------------------------------------- Minivm Notify  -------------) | 
					
						
							|  |  |  | ;Increment voicemail counter with 1. The counter will be used in the e-mail message | 
					
						
							|  |  |  | ;and in the filename | 
					
						
							|  |  |  | exten => minivmcleanup,n,gotoif($[${MINIVM_RECORD_STATUS} != SUCCESS]?minivmrecordfailure,1) | 
					
						
							|  |  |  | exten => minivmcleanup,n,set(MINIVMCOUNTER(${account}:voicemailcounter:inc)=1) | 
					
						
							|  |  |  | exten => minivmcleanup,n,set(MVM_COUNTER = ${MINIVMCOUNTER(${account}:voicemailcounter)}) | 
					
						
							|  |  |  | exten => minivmcleanup,n,minivmNotify(${account}) | 
					
						
							|  |  |  | exten => minivmcleanup,n,verbose(1,-- MINIVM_NOTIFY_STATUS = ${MINIVM_NOTIFY_STATUS} ) | 
					
						
							|  |  |  | ; Now, clean up after sending voicemail | 
					
						
							|  |  |  | exten => minivmcleanup,n,noop(------------------------------------------- Minivm Delete  -------------) | 
					
						
							|  |  |  | exten => minivmcleanup,n,minivmdelete() | 
					
						
							|  |  |  | exten => minivmcleanup,n,verbose(1,-- MINIVM_DELETE_STATUS = ${MINIVM_DELETE_STATUS} ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ;Recording failed | 
					
						
							|  |  |  | exten => minivmrecordfailure,1,playback(vm-sorry) | 
					
						
							|  |  |  | exten => minivmrecordfailure,n,wait(1) | 
					
						
							|  |  |  | exten => minivmrecordfailure,n,hangup | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ; If the user hangs up during the recording, we need to clean up | 
					
						
							|  |  |  | ; And send notifications | 
					
						
							|  |  |  | exten => h,1,gotoif($[x${MINIVM_DELETE_STATUS} != x] ?h,stop) | 
					
						
							|  |  |  | exten => h,n,noop(------------------------------------------- HANGUP during voicemail recording   -------------) | 
					
						
							|  |  |  | exten => h,n,goto(minivmcleanup,1) | 
					
						
							|  |  |  | exten => h,n(stop),noop(---Minivm DONE----) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ;.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- | 
					
						
							|  |  |  | ; Extension to record a greeting message | 
					
						
							|  |  |  | ; Call this like: | 
					
						
							|  |  |  | ;	macro(recordgreetings,alice@atlanta.example.com) | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | [macro-recordgreetings] | 
					
						
							|  |  |  | exten => s,1,answer | 
					
						
							|  |  |  | exten => s,n,wait(0.5) | 
					
						
							|  |  |  | exten => s,n,set(account=${ARGV1]) | 
					
						
							|  |  |  | ; This file give extra options not available here, needs to be edited | 
					
						
							|  |  |  | ; Change of password does not work | 
					
						
							|  |  |  | exten => s,n(menu),background(vm-options) | 
					
						
							|  |  |  | exten => 1,1,setvar(option=u) | 
					
						
							|  |  |  | exten => 1,n,macro(minivmrec,${account},${option}) | 
					
						
							|  |  |  | exten => 1,n,goto(menu) | 
					
						
							|  |  |  | exten => 2,1,setvar(option=b) | 
					
						
							|  |  |  | exten => 2,n,macro(minivmrec,${account},${option}) | 
					
						
							|  |  |  | exten => 2,n,goto(menu) | 
					
						
							|  |  |  | exten => 3,1,setvar(option=n) | 
					
						
							|  |  |  | exten => 3,n,macro(minivmrec,${account},${option}) | 
					
						
							|  |  |  | exten => 3,n,goto(menu) | 
					
						
							|  |  |  | exten => 4,1,setvar(option=t) | 
					
						
							|  |  |  | exten => 4,n,macro(minivmrec,${account},${option}) | 
					
						
							|  |  |  | exten => 4,n,goto(menu) | 
					
						
							|  |  |  | exten => *,1,playback(vm-thankyou) | 
					
						
							|  |  |  | exten => *,n,wait(1) | 
					
						
							|  |  |  | exten => *,n,hangup | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | exten => i,1,playback(invalid) | 
					
						
							|  |  |  | exten => i,n,goto(menu) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [macro-minivmrec] | 
					
						
							|  |  |  | exten => s,1,gotoif(${MINIVMACCOUNT(${account}:hasaccount)}?record) | 
					
						
							|  |  |  | ; Account is not configured in minivm.conf or realtime | 
					
						
							|  |  |  | ; Phony message, add something useful here | 
					
						
							|  |  |  | exten => s,n,playback(privacy-incorrect) | 
					
						
							|  |  |  | exten => s,n,macroreturn | 
					
						
							|  |  |  | exten => record,1,minivmappmess(${ARGV1},${ARGV2}) | 
					
						
							|  |  |  | exten => record,n,noop(Recording status: ${MINIVM_APPMESS_STATUS}) | 
					
						
							|  |  |  | exten => record,n,macroreturn | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ;.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- | 
					
						
							|  |  |  | ; To set a counter and use a template for voicemail to users without acounts | 
					
						
							|  |  |  | ; use something like this | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | ; email address is in the "account" channel variable. Set from ast_db or a script | 
					
						
							|  |  |  | ; based on called ID | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | exten => sendvoicemail,1,answer | 
					
						
							|  |  |  | exten => sendvoicemail,n,wait(0.5) | 
					
						
							|  |  |  | exten => sendvoicemail,n,set(domain=${CUT(account,@,2)}) | 
					
						
							|  |  |  | exten => sendvoicemail,n,set(country=${CUT(domain,.,2)}) | 
					
						
							|  |  |  | exten => sendvoicemail,n,minivmgreet(${account}) | 
					
						
							|  |  |  | exten => sendvoicemail,n,minivmRecord(${account},b) | 
					
						
							|  |  |  | exten => sendvoicemail,n,goto(sendvmcleanup) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | exten => sendvmcleanup,1,gotoif($[${MINIVM_RECORD_STATUS} != SUCCESS]?done) | 
					
						
							|  |  |  | ; The counter is set in the domain directory, so we don't create one directory per user | 
					
						
							|  |  |  | ; The counter has the email in the name of the counter, increase it | 
					
						
							|  |  |  | ; Set the MVM_COUNTER variable that we use in the template | 
					
						
							|  |  |  | exten => sendvmcleanup,n,set(MINIVMCOUNTER(${account}:voicemailcounter:inc)=1) | 
					
						
							|  |  |  | exten => sendvmcleanup,n,set(MVM_COUNTER = ${MINIVMCOUNTER(${account}:voicemailcounter)}) | 
					
						
							|  |  |  | ; Increase a domain counter too, to see how many voicemails are sent to this domain | 
					
						
							|  |  |  | ; This is just for statistics | 
					
						
							|  |  |  | exten => sendvmcleanup,n,set(MINIVMCOUNTER(${domain}:${domain}-all:inc) = 1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ; Send voicemail in e-mail with country-specific template | 
					
						
							|  |  |  | ; The template need to be defined in minivm.conf | 
					
						
							|  |  |  | ; | 
					
						
							|  |  |  | exten => sendvmcleanup,n,minivmNotify(${account}, ${country}_email) | 
					
						
							|  |  |  | exten => sendvmcleanup,n,minivmDelete() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | exten => sendvmcleanup,n(done),wait(0.5) | 
					
						
							|  |  |  | exten => sendvmcleanup,n,hangup | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | exten => h,1,gotoif($[${MINIVM_RECORD_STATUS} = SUCCESS]?sendvmcleanup,1)) | 
					
						
							|  |  |  | 
 |