AEL examples
Macro
context outbound { _X. => &outbound(${EXTEN},"SIP","sip_trunk"); } macro outbound ( ext , dev , trk ) { Noop(ael_test); Set(CDR(did)=${ext}); Gosub(sub-record-check,s,1(out,${ext},always)); Dial(${dev}/${trk}/${ext},15,); switch(${DIALSTATUS}){ case BUSY: Busy; break; case CHANUNAVAIL: Noop(CHANUNAVAIL); Dial(${dev}/${trk}2/${ext},15,); break; case NOANSWER: Noop(NOANSWER); break; case CANCEL: Noop(CANCEL); break; case CONGESTION: Noop(CONGESTION); break; case ANSWER: Noop(ANSWER); break; default: Noop(default); break; } catch h { Noop(Hangup in macro); Noop(${DIALSTATUS}); Hangup; }; return; }
GoSub
context outbound { _X. => Gosub(sub-trunk,${EXTEN},1(SIP,trunk,${EXTEN},dontcare,branch)); } context sub-trunk { _X. => { Set(CDR(userfield)=${ARG5}); Gosub(sub-record-check,s,1(out,${EXTEN},${ARG4})); Dial(${ARG1}/${ARG2}/${ARG3},60,); if ("${DIALSTATUS}" = "BUSY") { Noop(BUSY); } if ("${DIALSTATUS}" = "NOANSWER") { Noop(NOANSWER); } if ("${DIALSTATUS}" = "CHANUNAVAIL") { Noop(CHANUNAVAIL); Dial(${ARG1}/${ARG2}2/${ARG3},60,); } if ("${DIALSTATUS}" = "CONGESTION") { Noop(CONGESTION); Dial(${ARG1}/${ARG2}2/${ARG3},60,); } } }
IfTime
context time { _X. => { ifTime (10:00-21:00|*|*|*) { NoOp(***Dial***); Dial(SIP/${EXTEN},,); } ifTime (21:00-10:00|*|*|*) { NoOp(***hangup***); hangup; } } }
<spoiler>
-- Executing [1001@from-test:1] GotoIfTime("SIP/1000-0000014f", "10:00-21:00,*,*,*?3") in new stack -- Executing [1001@from-test:2] Goto("SIP/1000-0000014f", "5") in new stack -- Goto (from-test,1001,5) -- Executing [1001@from-test:5] NoOp("SIP/1000-0000014f", "Finish iftime_test123_32") in new stack -- Executing [1001@from-test:6] GotoIfTime("SIP/1000-0000014f", "21:00-10:00,*,*,*?8") in new stack -- Goto (from-test,1001,8) -- Executing [1001@from-test:8] NoOp("SIP/1000-0000014f", "***hangup***") in new stack -- Executing [1001@from-test:9] Hangup("SIP/1000-0000014f", "") in new stack == Spawn extension (from-test, 1001, 9) exited non-zero on 'SIP/1000-0000014f'
</spoiler> ~~socialite~~