[<<][asterisk][>>][..]Wed Apr 18 15:29:28 EDT 2012
Email notifications for missed calls in Asterisk
Cached from [1]. Author: Matt Schmandt A feature I have wanted for a long time is to get emails about missed calls. I have a Blackberry and knowing that people are calling and hanging up before leaving a vm is very useful when I am out in the field. I wrote a small shell script to add this functionality to Asterisk. I place the script in the h extension of the stdexten marco. The h extension triggers once a call is hung up from that context. The first and only priority for the h extension is a System() call. It calls this shell script and passes many parameters to it. The first parameter is the email address to send the email to. To make this work for the marco, I adjust the macro to have a third parameter which is email address. I would like to pull the email address from that extensions vm but that function does not exist and I could not figure out how to add that function in the C source code. If anyone knows a better way, please let me know. The script requires you have the mailx package installed.
Download the script[2] Rename the file processCallEmail.sh. mv processCallEmail.txt processCallEmail.sh Put it in the /var/lib/asterisk/agi-bin directory. mv processCallEmail.sh /var/lib/asterisk/agi-bin/" Make sure the asterisk user has execute permissions on the script. chmod 755 /var/lib/asterisk/agi-bin/processCallEmail.sh Add one line of documentation to macro-stdexten context on the line after ${ARG2}. ; ${ARG3} - email address to send emails about missed calls to Add the h extension line to the macro-stdexten context. exten => h,1,System(processCallEmail.sh "${ARG3}" "${CALLERID(num)}" "${CALLERID(name) }" "${DIALSTATUS}" "${VMSTATUS}") Alter the line that calls the macro to include an email address. exten => 500,1,Macro(stdexten,500,SIP/${EXTEN},abc@test.com) Here is an example of an updated stdexten macro. [macro-stdexten]; ; ; Standard extension macro: ; ${ARG1} - Extension (we could have used ${MACRO_EXTEN} here as well ; ${ARG2} - Device(s) to ring ; ${ARG3} - email address to send emails about missed calls to ; exten => s,1,AGI(ldaplookupphone2.agi) exten => s,n,Dial(${ARG2},20) ; Ring the interface, 20 seconds maximum exten => s,n,Goto(s-${DIALSTATUS},1) ; Jump based on status NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER) exten => s-NOANSWER,1,Voicemail(${ARG1},u) ; If unavailable, send to voicemail w/ unavail announce exten => s-NOANSWER,2,Goto(default,s,1) ; If they press #, return to start exten => s-BUSY,1,Voicemail(${ARG1},b) ; If busy, send to voicemail w/ busy announce exten => s-BUSY,2,Goto(default,s,1) ; If they press #, return to start exten => _s-.,1,Goto(s-NOANSWER,1) ; Treat anything else as no answer exten => a,1,VoicemailMain(${ARG1}) ; If they press *, send the user into VoicemailMain exten => h,1,System(processCallEmail.sh "${ARG3}" "${CALLERID(num)}" "${CALLERID(name) }" "${DIALSTATUS}" "${VMSTATUS}") Script: #!/bin/sh #Used for email alerting of incoming calls #Written by Matt Schmandt #version .1 #License: GPL #$1 email address #$2 callerid num #$3 callerid name #$4 dial status #$5 vm status #Store command line args in nice variables EMAIL=$1 CALLERIDNUM=$2 CALLERIDNAME=$3 DIALSTATUS=$4 VMSTATUS=$5 LOGFILE="/var/log/processCallEmail.log" MAILCMD="mailx -s" SUBJECT="call" SENDMAIL=1 #Set to 1 if you want it to email the alert. 0 is useful for debugging. DEBUG=0 #Set to 0 for standard operation. 1 will log inputs and mail commands for debugging. #log mail command if [ $DEBUG -eq 1 ]; then echo $1 $2 \"${3}\" $4 $5 >> $LOGFILE fi #Check we have an email address if not quit if [ "$EMAIL" == "" ]; then exit 0 fi #check for call canceled. ex. 1 ring then hangup if [ $DIALSTATUS == "CANCEL" ]; then BODY="${CALLERIDNAME} (${CALLERIDNUM}) hung up quickly." fi #check for answered call. ex. someone picks up if [ $DIALSTATUS == "ANSWER" ]; then # BODY="$CALLERIDNAME ($CALLERIDNUM) was answered by $PEERNAME." # Use the above line if you want alerts about answered calls. # At work this is not useful but at home it is. :) exit 0 fi #check for unanswered call. ex. phone rang and no one picked up if [ $DIALSTATUS == "NOANSWER" ]; then BODY="${CALLERIDNAME} (${CALLERIDNUM}) hung up." #check for hangup in vm menu. ex call went to vm and user hung up if [ $VMSTATUS == "USEREXIT" ]; then BODY="$CALLERIDNAME ($CALLERIDNUM) hung up on vm." fi #check for hangup in vm menu. ex call went to vm and user hung up if [ $VMSTATUS == "FAILED" ]; then BODY="$CALLERIDNAME ($CALLERIDNUM) hung up on vm." fi #if they left a vm we already would get an email. Don't need a 2nd if [ $VMSTATUS == "SUCCESS" ]; then exit 0 fi fi #log mail command if [ $DEBUG -eq 1 ]; then echo $BODY $MAILCMD $SUBJECT $EMAIL >> $LOGFILE fi #send email if [ $SENDMAIL -eq 1 ]; then `echo $BODY | $MAILCMD $SUBJECT $EMAIL` fi exit 0 [1] http://www.theschmandts.org/blog/email-notifications-for-missed-calls-in-asterisk [2] http://www.theschmandts.org/blog/wp-content/uploads/2007/05/processcallemail.txt
[Reply][About]
[<<][asterisk][>>][..]
No hay comentarios:
Publicar un comentario