context dialextens { /* 101 thru 123, 149 thru 152 */ _10X => Dial(Zap/${EXTEN:2},30,Ttw); _1ZX => Dial(Zap/${EXTEN:1},30,Ttw); } /* Due to extenal wiring: dialing 125 will ring 101 dialing 126 will ring 102 and so on until dialing 147 will ring 123 We can dial out on zap 69 thru 72; and 25-47 */ context dialthrus { /* 369-372; 325-347 */ _3XX => Dial(Zap/${EXTEN:1},30,Ttw); } context t1incoming { includes { dialextens; parkedcalls; } s => { Answer(); Background(welcome-to-test-machine); } } context t1extension { includes { dialextens; dialthrus; } } context incoming { includes { dialextens; parkedcalls; } s => { Answer(); Background(welcome-to-test-machine); } } context incoming { s => { Answer(); } } macro std-priv-exten( dev, ext , timeout, opts, torcont, dontcont ) { // &increment_chosecount(); dial_again: Dial(${dev},${timeout},${opts}); switch(${DIALSTATUS}) { case TORTURE: goto ${torcont}|s|begin; break; case DONTCALL: goto ${dontcont}|s|begin; break; case BUSY: label_busy: Read(reply|work-exten-busy|1||2|15); if ("${reply}"=="") goto label_busy; // infinite loop if Read has probs!! switch(${reply}) { case 1: Set(time1=${EPOCH}); label_redial: WaitMusicOnHold(5); Dial(${dev},${timeout},${opts}); switch(${DIALSTATUS}) { case BUSY: if(${EPOCH}-${time1} >= 20) goto label_busy; goto label_redial; default: return;// goto work_line|s|loopback; } break; case 2: Voicemail(${ext}|b); break; case 3: return; // goto work_line|s|loopback; default: Background(invalid); goto label_busy; } break; case ANSWER: break; case NOANSWER: noanswer_label: Read(reply|work-exten-noanswer|1|skip|2|15); switch(${reply}) { case 1: switch(${ext}) { case 10: Background(no-cell); break; case 11: // &ciddial(2729495,3072729495,30,tw,${GRAMS_TELCO},${WORK_TELCO}); break; case 12: // &ciddial(2725560,3072725560,30,tw,${GRAMS_TELCO},${WORK_TELCO}); break; case 13: // &ciddial(2720197,3072720197,30,tw,${GRAMS_TELCO},${WORK_TELCO}); break; case 14: // &ciddial(2501174,3072501174,30,tw,${GRAMS_TELCO},${WORK_TELCO}); break; case 15: Background(no-cell); break; case 16: Background(no-cell); break; default: Background(invalid); break; } goto noanswer_label; break; case 2: Voicemail(${ext}|u); break; case 3: return; // goto work_line|s|loopback; default: Background(invalid); goto noanswer_label; } Voicemail(${ext}|u); break; default: Voicemail(${ext}|u); } } /* Putting these 3 funcs in extensions.conf! macro funcC(a,b) { Set(Key=); menu: Read(Key,main-menu,1,n,1,5); if("${Key}" = "2") goto y,lab1; catch y { lab1: &funcB(${a},${b}); } } macro funcB(a,b) { Set(Key=); menu: Read(Key,tt-monkeys,1,n,1,5); if("${Key}" = "2") goto z,lab2; catch z { lab2: &funcC(${a},${b}); } } macro funcA() { &funcB(1,2); } */ context extension { includes { dialextens; dialthrus; parkedcalls; } 5 => { Record(recording:wav); Background(recording); } 81 => { iterations=1000000; Set(time1=${EPOCH}); for(i=1; ${i}<${iterations}; i=${i}+1) { NoOp(Hello); } Set(time2=${EPOCH}); Verbose(The time diff is $[${time2} - ${time1} ] seconds); Verbose(Which means that the priorities/sec = $[4* ${iterations} / (${time2} - ${time1}) ]); SayNumber($[4 * ${iterations} / (${time2} - ${time1}) ]); } 82 => { &ndeep(100000); Verbose(Finished 100000 levels deep call!); } 83 => { switch (${EXTEN}) { pattern 8X: Verbose(do something to prepare it); pattern 9X: Verbose(handle both 1xx and 2xx calls); pattern [4-7]X: Verbose(and this too!); } Set(junky=${RAND(0|99999)}); Verbose(Here is a random number: ${junky}.); } 84 => { agi(agi://192.168.134.252/|hello|goodbye|whatever|whoknows,hell2,hello3); } 85 => { &std-priv-exten( Zap/50, 150 , 25, mtw, torcont, dontcont ); } 86 => { Verbose(The version is: ${VERSION()} ); Verbose(The versionnum is: ${VERSION(ASTERISK_VERSION_NUM)} ); Verbose(The user is: ${VERSION(BUILD_USER)} ); Verbose(The hostname is: ${VERSION(BUILD_HOSTNAME)} ); Verbose(The machine is: ${VERSION(BUILD_MACHINE)} ); Verbose(The OS is: ${VERSION(BUILD_OS)} ); Verbose(The date is: ${VERSION(BUILD_DATE)} ); Verbose(The kernel is: ${VERSION(BUILD_KERNEL)} ); Set(vinf=${VERSION()}); Set(vrand=${RAND()}); if( ${ISNULL(${vinf})} ) { if( ${ISNULL(${vrand})} ) Verbose(Version 1.2 or earlier); else Verbose(Version 1.4!!!); } else Verbose(${vinf} indicates version pre-1.6 or higher); } 871 => { NoOp( 1 1 1 1 1 1 1); NoOp( 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6); NoOp(012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678890123456789012345678901234567890); NoOp(${EXTEN:1:2} ${EXTEN} ${EXTEN:1} 1 1 1 1 1 1 1); &dialoutpstn(${TDIRECTCALL-PST}/0${EXTEN},${E${CALLERID(num)}-OPT},${TDIRECTCALL-CID},${TDIRECTCALL-MAX},RotaPadrao) ; } 872 => { Set(ChannelOnly=${CUT(CHANNEL||1)}); Verbose(ChannelOnly=${ChannelOnly}; neat huh?); Set(ChannelOnly=${CUT(CHANNEL,,1)}); Verbose(ChannelOnly=${ChannelOnly}; neat huh?); } 873 => { NOOP(this is a forkcdr test); Set(CALLERID(num)=1234567890); Set(CALLERID(name)=before fork); Forkcdr(v); Set(CALLERID(num)=0987654321); Set(CALLERID(name)=after fork); Answer(); Echo(); Hangup(); } 874 => { SayDigits(307-754-5675); SayPhoneNumber(307-754-5675); SayDigits(--); SayPhoneNumber(123-456-7890); SayDigits(++); SayPhoneNumber(307-754-4454); } 875 => { &funcA(); &funcD(); } 876 => { NoOp(Query resultid ${connid} SELECT var1\, var2 FROM did); NoOp($["Query resultid ${connid} SELECT var1\, var2 FROM did"]); NoOp($["Query resultid ${connid} SELECT var1, var2 FROM did"]); goto test5,s,1; } 88 => { SET(LIMIT_PLAYAUDIO_CALLER=yes); SET(LIMIT_PLAYAUDIO_CALLEE=no); SET(LIMIT_TIMEOUT_FILE=timeup); SET(LIMIT_CONNECT_FILE=limit60); SET(LIMIT_WARNING_FILE=almostup); Dial(Zap/51,20,L(60000:30000:8000)); } 89 => { goto callbackmenu|100|1; } } context income1 { s => { Answer(); Dial(Zap/50,20,m); } 150 => Dial(Zap/50,20,m); } context callbackmenu { _X. => { Answer(); Wait(1); Set(TIMEOUT(digit)=5); Set(TIMEOUT(response)=30); DISA(no-password,callbackdialout); } } context callbackdialout { _X. => { Dial(Zap/51,20,w); } } macro dialoutpstn(something1, something2, something3, something4, something5) { Verbose(${something1}--- ${something2}--- ${something3}--- ${something4}--- ${something5}); } macro ndeep(level) { if( ${level} == 0) { Verbose(2|Got to Level 0); return; } &ndeep($[${level}-1]); return; }