rendered paste body;******************************************************************************************
; Start Call Forwarding
;******************************************************************************************
;
;; Here's a snippet from my extensions.conf which allows a particular user to activate/deactivate his VM & CF
;; The code should be pretty straight-forward
;; send suggestions/improvements to [mstan AT asesoft.ro]
;;
;; NOTE; some asterisk users might note that my dialvmcf macro only works on one extension type (SIP here)
;; I'm still looking for a way to re-route the CF number; eg if the number becins with 0, route it to ZAP etc
;Default Voicemail status
;DEFAULTVMSTATUS=0 ; 0 - inactive, 1 - active
;Default call Forwarding status:
;DEFAULTCFSTATUS=0 ; 0 - no CF, any other number - redirect to it
;Default password for extensions setup
;DEFAULTPASSWORD=1234
;[macro-goodbye]
;exten => s,1,Playback(vm-goodbye)
;exten => s,2,Hangup()
;; This is my own adaptation of macro-stdexten, taking into account the new VM&CF statuses:
;[macro-dialvmcf]
;
; Dialing routine for our SIP extensions, with CF & VM
; ${ARG1} - Calling Extension
; ${ARG2} - Called Extension
;
;exten => s,1,DBGet(cfstatus=cfstatus/${ARG2})
;exten => s,2,NoOp(${cfstatus})
;exten => s,3,DBGet(vmstatus=vmstatus/${ARG2})
;exten => s,4,NoOp(${vmstatus})
;exten => s,5,SetVar(where=${ARG2}) ; by default, dial to ARG2; assembly-style
;exten => s,6,GotoIf($[${cfstatus} = 0]?s,8) ; No CF, will ring locally
;exten => s,7,SetVar(where=${cfstatus}) ; We have CF, follow
;exten => s,8,NoOp($[${vmstatus} = 0])
;exten => s,9,GotoIf($[${vmstatus} = 0]?s,120) ; No VM either
;exten => s,10,Dial(SIP/${where},20,rt) ; Ring the interface, 20 seconds maximum
;exten => s,11,Goto(s-${DIALSTATUS},1) ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
;exten => s-NOANSWER,1,Voicemail(u${ARG2}) ; If unavailable, send to voicemail w/ unavail announce
;
;exten => s-BUSY,1,Voicemail(b${ARG2}) ; If busy, send to voicemail w/ busy announce
;
;exten => _s-.,1,Goto(s-NOANSWER,1) ; Treat anything else as no answer
;
;exten => a,1,VoicemailMain(${ARG2}) ; If they press *, send the user into VoicemailMain
;
;exten => s,102,SetVar(cfstatus=${DEFAULTCFSTATUS})
;exten => s,103,Goto(s,2)
;exten => s,104,SetVar(vmstatus=${DEFAULTVMSTATUS})
;exten => s,105,Goto(s,4)
;
;exten => s,120,Dial(SIP/${where},20,rt) ; Ring the interface, 20 seconds maximum
;exten => s,121,Playback(vm-isunavail) ; Your calling party is unavailable.
;exten => s,122,Hangup
;
;;
;; User Call forwarding setup
;;
;
;[user-setup]
;exten => i,1,Playback(invalid)
;exten => i,2,Goto(s,4)
;
;exten => t,1,Goto(#,1)
;
;exten => s,1,Answer
;exten => s,2,Playback(optdata/vm-welcome) ; Welcome to extension setup
;exten => s,3,Macro(authenticate,${CALLERIDNUM})
;
;exten => s,4,Background(optdata/vm-menu1) ; To setup voice mail, press 1.
;exten => s,5,Background(optdata/vm-menu2) ; To setup call forwarding, press 2.
;exten => s,6,Background(optdata/vm-menu8) ; To change your password, press 8.
;exten => s,7,Background(optdata/vm-help-or-exit) ; Press Star for help or pound to exit
;
;exten => *,1,Goto(s,4)
;exten => 1,1,Goto(setup-vm,s,1)
;exten => 2,1,Goto(setup-cf,s,1)
;exten => 8,1,Macro(setup-pass,${CALLERIDNUM})
;exten => 8,2,Goto(s,4)
;exten => #,1,Macro(goodbye)
;;
;
;;
;; Setup Voice Mail
;;
;[setup-vm]
;exten => t,1,Goto(#,1)
;
;exten => s,1,DBGet(status=vmstatus/${CALLERIDNUM})
;exten => s,2,Playback(optdata/vm-vmstatus) ; Your voice mail status is currently...
;
;exten => s,3,GotoIf(${status} = "1"?s,6)
;exten => s,4,Playback(optdata/vm-inactive) ; inactive
;exten => s,5,Goto(s,7)
;exten => s,6,Playback(optdata/vm-active) ; active
;exten => s,7,Wait,1 ;
;
;exten => s,8,Background(optdata/vm-activate) ; To activate voice mail, press 1.
;exten => s,9,Background(optdata/vm-deactivate) ; To deactivate voice mail, press 2.
;exten => s,10,Background(optdata/vm-menu9) ; To return to main menu, press 9.
;
;exten => s,11,Background(optdata/vm-help-or-exit) ; Press star for help or pound to exit
;exten => s,12,Wait(1) ;
;;exten => s,13,SayDigits(${CALLERIDNUM})
;
;exten => 1,1,DBPut(vmstatus/${CALLERIDNUM}=1)
;exten => 1,2,Goto(setup-vm,s,1)
;
;exten => 2,1,DBPut(vmstatus/${CALLERIDNUM}=0)
;;exten => 2,2,Goto(setup-vm,s,1)
;
;exten => 9,1,Goto(user-setup,s,4)
;exten => *,1,Goto(setup-vm,s,2)
;exten => #,1,Macro(goodbye)
;
;
;;
;; Setup Call Forwarding
;;
;
;[setup-cf]
;exten => t,1,Goto(#,1)
;
;exten => s,1,Macro(cfstatus,${CALLERIDNUM})
;exten => s,2,Background(optdata/vm-cf-activate) ; To activate voice mail, press 1.
;exten => s,3,Background(optdata/vm-cf-deactivate) ; To deactivate voice mail, press 2.
;exten => s,4,Background(optdata/vm-menu9) ; To return to main menu, press 9.
;
;exten => s,5,Background(help-or-exit) ; Press star for help or pound to exit
;exten => s,6,Wait(1) ;
;
;exten => 1,1,SetVar(numTries=1)
;exten => 1,2,Read(cf,optdata/vm-enter-number)
;exten => 1,3,GotoIf($[${LEN(${cf})} = 0]?1,120)
;exten => 1,4,DBPut(cfstatus/${CALLERIDNUM}=${cf})
;exten => 1,5,Goto(s,1)
;
;exten => 1,120,SetVar(numTries=$[${numTries} + 1])
;;exten => 1,121,GotoIf($[${numTries} < 3]?1,2)
;exten => 1,122,Playback(optdata/vm-cf-failed) ; Failed to activate call forwarding.
;exten => 1,123,Macro(goodbye)
;
;exten => 2,1,DBPut(cfstatus/${CALLERIDNUM}=0)
;exten => 2,2,Goto(s,1)
;
;exten => 9,1,Goto(user-setup,s,4)
;exten => *,1,Goto(s,2)
;exten => #,1,Macro(goodbye)
;;;
;
;
;[macro-setup-pass]
;
;exten => s,1,SetVar(numTries=0)
;
;exten => s,2,Read(secret1,optdata/vm-enter-new-password,4) ;Please enter your new password
;exten => s,3,NoOp(${LEN(${secret1})})
;exten => s,4,GotoIf($[${LEN(${secret1})} != 4]?s,120)
;
;exten => s,5,Read(secret2,optdata/vm-again,4) ;Again
;exten => s,6,GotoIf($[${LEN(${secret2})} != 4]?s,120)
;
;exten => s,7,GotoIf($["${secret1}" != "${secret2}"]?s,130)
;
;exten => s,8,DBPut(PASS/${ARG1}=${secret1})
;exten => s,9,Playback(optdata/vm-password-updated) ;Password successfully updated.
;;exten => s,10,Goto(user-setup,s,4) ;Return to extension menu
;
;exten => s,120,Playback(optdata/vm-password-invalid)
;exten => s,121,Goto(s,150)
;
;exten => s,130,Playback(optdata/vm-password-mismatch)
;exten => s,131,Goto(s,150)
;
;exten => s,150,SetVar(numTries=$[${numTries} + 1])
;exten => s,151,GotoIf($[${numTries} < 3]?s,2)
;exten => s,152,Playback(optdata/vm-failed-change) ;Failed to change your password.
;exten => s,153,Macro(goodbye)
;
;;;
;
;[macro-authenticate]
;;
;; ${ARG1} CALLERIDNUM
;;
;
;exten => s,1,SetVar(numTries=0)
;
;exten => s,2,DBGet(password=PASS/${ARG1})
;
;exten => s,3,Read(secret,as-enter-password,4) ;Please enter your password
;
;exten => s,4,GotoIf($["${secret}" != "${password}"]?s,150)
;exten => s,5,Playback(as-password-accepted) ;Password accepted
;exten => s,6,Goto(s,160)
;
;exten => s,103,DBPut(PASS/${ARG1}=${DEFAULTPASSWORD})
;exten => s,104,Goto(s,2)
;
;exten => s,150,Playback(as-password-invalid)
;exten => s,151,SetVar(numTries=$[${numTries} + 1])
;exten => s,152,NoOp(${numTries})
;exten => s,153,GotoIf($[${numTries} < 3]?s,3)
;exten => s,154,Macro(goodbye)
;
;exten => s,160,NoOp()
;
;[macro-cfstatus]
;;
;; ARG1 - extension
;;
;exten => s,1,DBGet(status=cfstatus/${ARG1})
;exten => s,2,Playback(optdata/vm-cfstatus) ; Your call forwarding status is currently...
;
;exten => s,3,NoOp($[${status} != 0]);
;
;exten => s,4,GotoIf($[${status} != 0]?s,7)
;exten => s,5,Playback(optdata/vm-inactive) ; inactive
;exten => s,6,Goto(s,10)
;exten => s,7,Playback(optdata/vm-active) ; active
;exten => s,8,Playback(optdata/vm-forwarded) ; All calls are forwarded to...
;exten => s,9,SayDigits(${status})
;exten => s,10,Wait,1 ;
;
;exten => s,102,DBPut(cfstatus/${ARG1}=${DEFAULTCFSTATUS})
;exten => s,103,Goto(s,1)
;;;
;;
;;******************************************************************************************
;; Stop Call Forwarding
;;******************************************************************************************