[incoming]
exten => _bXXX,1,Set(VBOX=${EXTEN:1:3})
exten => _bXXX,n,Set(RETURN=${EXTEN:1:3})
exten => _bXXX,n,Set(MESSAGE=busy)
exten => _bXXX,n,Goto(ivr-vmail,s,1)
exten => _uXXX,1,Set(VBOX=${EXTEN})
exten => _uXXX,n,Set(RETURN=${EXTEN:1:3})
exten => _uXXX,n,Set(MESSAGE=unavail)
exten => _uXXX,n,Goto(ivr-vmail,s,1)
[ivr-vmail]
include => outgoing
exten => h,1,Hangup
exten => s,1,Set(LOOPCOUNT=0)
exten => s,n,Set(__DIR-CONTEXT=default)
exten => s,n,Set(_IVR_CONTEXT_${CONTEXT}=${IVR_CONTEXT})
exten => s,n,Set(_IVR_CONTEXT=${CONTEXT})
exten => s,n,GotoIf($["${CDR(disposition)}" = "ANSWERED"]?begin)
exten => s,n,Answer
exten => s,n,Wait(1)
exten => s,n(begin),Set(TIMEOUT(digit)=3)
exten => s,n,Set(TIMEOUT(response)=3)
;test if exten has busy/unavail.wav | temp.wav
exten => s,n,AGI(vmtest,${RETURN},${MESSAGE},default)
; ${HASMESSAGE} = FALSE, TRUE, NOGREET or TEMPGREET
; ${MSG} = vm-isonphone, or vm-isunavail
; ${D1} = first number of exten
; ${D2} = second number of exten
; ${D3} = last number of exten
;if has temp ${HASMESSAGE} = TEMPGREET
exten => s,n,GotoIf($["${HASMESSAGE}" = "TEMPGREET"]?40)
;if has a busy/unavail ${HASMESSAGE} = "TRUE"
exten => s,n,Gotoif($["${HASMESSAGE}" = "TRUE"]?50:60)
; step 40 play temp greet
;exten => s,40,Background(custom/${RETURN}/temp)
;exten => s,41,WaitExten()
;temp work around for now
exten => s,40,gotoif($[${RETURN} = 231 ]?vmvm,${RETURN},1)
exten => s,41,VoiceMail(s${RETURN}@default)
; step 50 had busy/unavail message
exten => s,50,Background(custom/${RETURN}/${MESSAGE})
exten => s,51,WaitExten()
; step 60 did not have busy/unavail does it have greet.wav?
exten => s,60,Gotoif($["${HASMESSAGE}" = "NOGREET" ]?61:70)
; if greet.wav then we need play it and play the status message
;if yes play it then play the is busy/unavail message from system
exten => s,61,Background(custom/${RETURN}/greet&${MSG})
exten => s,62,WaitExten()
;ok so they dont even have their name recorded so now we need to just
;play "the person at ${EXTEN} is ${MSG}
exten => s,70,Background(vm-theperson&digits/${D1}&digits/${D2}&digits/${D3}&${MSG})
exten => s,71,WaitExten()
exten => *,1,VoicemailMain(${RETURN}@default)
exten => #,1,VoiceMail(s${RETURN}@default)
exten => hang,1,Playback(vm-goodbye)
exten => hang,n,Hangup
exten => i,1,dbDel(${BLKVM_OVERRIDE})
exten => i,n,Set(__NODEST=)
exten => i,n,Goto(ivr-1,s,begin)
exten => t,1,dbDel(${BLKVM_OVERRIDE})
exten => t,n,Set(__NODEST=)
exten => t,n,VoiceMail(s${RETURN}@default)
exten => 0,1,Dial(IAX2/toPBX1/600,15)
exten => 0,2,Goto(incoming,252)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AGI Script
#!/usr/bin/env php
<?php
/*
Script to test for
/var/spool/asterisk/voicemail/default/${EXTEN}/${STATUS}.wav
where ${STATUS} = busy/unavail
Michael Rice
March 6th, 2008
*/
require_once "phpagi.php";
require_once "phpagi-asmanager.php";
$myagi = new AGI();
$debug = 4;
// $argv[1] EXTEN
// $argv[2] STATUS
// $argv[3] CONTEXT
$exten = $argv[1];
$status = $argv[2];
$context = "default";
$variable = "HASMESSAGE";
$value = "FALSE";
if(isset($argv[3])) {
$context = $argv[3];
}
// first thing is first, if they have a temp greeting set we need to play it
// and we dont care if they have any other recording set.
if(is_file("/var/spool/asterisk/voicemail/$context/$exten/temp.wav") or
is_file("/var/spool/asterisk/voicemail/$context/$exten/temp.WAV") or
is_file("/var/spool/asterisk/voicemail/$context/$exten/temp.gsm") ) {
$myagi->set_variable($variable, "TEMPGREET");
debug("Setting $variable, TEMPGREET",1);
return;
}
// ok so they dont have a temp greet set so we need to check if they
// have a busy/unavail message recorded
if(is_file("/var/spool/asterisk/voicemail/$context/$exten/$status.wav")) {
// if so we set HASMESSAGE -> true & return
$value = "TRUE";
$myagi->set_variable($variable, $value);
return;
}
// ok so they dont have one. now we need to check if they have their
// name recorded.
else {
// check if greet.wav is a file
if(is_file("/var/spool/asterisk/voicemail/$context/$exten/greet.wav")) {
// if yes then we will set HASMESSAGE = NOGREET and set MSG to the proper status message
$myagi->set_variable($variable, "NOGREET");
if($status == "busy" )
$myagi->set_variable("MSG", "vm-isonphone");
if($status == "unavail" )
$myagi->set_variable("MSG", "vm-isunavail");
return;
}
//ok so they dont have a greet.wav so they have nothing and the system has to take care of everything
//for them
else {
//we need to split $exten into an array where $exten = 231 -> $exten = array("2","3","1")
//then we need to set D1 = $exten[0] D2 = $exten[1] D3 = $exten[2]
if($status == "busy" )
$myagi->set_variable("MSG", "vm-isonphone");
if($status == "unavail" )
$myagi->set_variable("MSG", "vm-isunavail");
list($a,$b,$c) = str_split($exten);
$myagi->set_variable("D1","$a");
$myagi->set_variable("D2","$b");
$myagi->set_variable("D3","$c");
return;
}