Friday, 8 May 2015

Asterisk Dialplan Show and Tell 1

14:57 Posted by Jurgens Krause , , , , , , No comments

NEW FEATURE ALERT!!

I hope to make this a regular feature on my blog. If you have an awesome dialplan that you would like to share, please let me know and I will analyze and feature it here!


My first share is the dialplan that I use for clients who need added features beyond basic calling. This includes call diverts as well as voicemail.


[general]

[globals]

[incoming]
exten => _X.,1,NoOp(CallerID = ${CALLERID(num)})

;;Cleanup Incoming CallerID
same => n,GotoIf($["${CALLERID(num):0:1}" != "+"]?noplusatstart)
same => n,NoOp(Changing Caller ID number from ${CALLERID(num)} to 0${CALLERID(num):3})
same => n,Set(CALLERID(num)=0${CALLERID(num):3})
same => n(noplusatstart),set(CALLERID(name)=${CALLERID(num)})
same => n,NoOp(${CALLERID(num)})

;;If CallForward entry exists, do that
same => n,GotoIf(${DB_EXISTS(CallForward/${EXTEN})}?CallForward)
same => n,Goto(NoCallForward)
same => n(CallForward),Set(ForwardDst=${DB(CallForward/${EXTEN})}) ; Get CFIM key
same => n,Answer()
same => n,Set(CALLERID(num)=${EXTEN})
same => n,Dial(IAX2/outtrunk/${ForwardDst},,t) ; Unconditional forward
same => n,HangUp()

same => n(NoCallForward),NoOp(Skipping Call Forwarding)
same => n,Goto(placecall)

same => n(novoicemail),NoOp(${EXTEN} has no mailbox retry dialling)
same => n(placecall),Dial(SIP/${EXTEN},20)
same => n,Goto(${DIALSTATUS})

same => n(NOANSWER),NoOp(No Answer, divert if set)
same => n(CHANUNAVAIL),NoOp(Call setup failed divert if set)

;;If CallForward entry exists, do that
same => n,GotoIf(${DB_EXISTS(CallForwardAway/${EXTEN})}?CallForwardAway)
same => n,Goto(voicemail)

same => n(CallForwardAway),Set(ForwardDst=${DB(CallForwardBusy/${EXTEN})}) ; Get CFIM key
same => n,Answer()
same => n,Set(CALLERID(num)=${EXTEN})
same => n,Dial(IAX2/outtrunk/${ForwardDst},,t) ; Callforward when noanswer
same => n,HangUp()

same => n(BUSY),NoOp(Busy, go to voicemail)
same => n(voicemail),GotoIf(${VM_INFO(${EXTEN},exists)}?hasvoicemail:novoicemail)
same => n(hasvoicemail),VoiceMail(${EXTEN},u); DID Specific mailbox
same => n,Hangup()


same => n(novoicemail),NoOp(No Voicemail)
same => n,hangup()

[internal]
include => callforward
include => voicemail

[outgoing]
include => internal

exten => _XXX.,1,NoOp(Going Out)
same => n,Dial(IAX2/outtrunk/${EXTEN})
same => n,HangUp()

[callforward]
;Set up always call forwarding
;Client dials *21* followed by the forward destination
exten => _*21*X.,1,Set(DB(CallForward/${CALLERID(NUM)})=${REPLACE(EXTEN:4,*#-)})
same => n,Wait(1)
same => n,Playback(beep)
same => n,Hangup

;Cancel always forward by dialling "**21"
exten => **21,1,DBdel(CallForward/${CALLERID(NUM)})
same  => n,Wait(1)
same  => n,Playback(beep)
same  => n,Playback(beep)
same  => n,Hangup

;Set up unanswered call forwarding
;Client dials *22* followed by the forward destination
exten => _*22*X.,1,Set(DB(CallForwardAway/${CALLERID(NUM)})=${REPLACE(EXTEN:4,*#-)})
same => n,Wait(1)
same => n,Playback(beep)
same => n,Hangup

;Cancel callforwarding when call is unanswered
exten => **22,1,DBdel(CallForwardAway/${CALLERID(NUM)})
same  => n,Wait(1)
same  => n,Playback(beep)
same  => n,Playback(beep)
same  => n,Hangup

[voicemail]
;Allows clients to dial 99 to access their voicemails
exten => 99,1,VoiceMailMain(s${CALLERID(NUM)})
same => n,HangUp()

;This is for SNOM compatibility
exten => asterisk,1,VoiceMailMain(s)
same => n,HangUp()

0 comments:

Post a comment