123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459 |
- //
- // Example AEL config file
- //
- globals {
- CONSOLE=Console/dsp;
- TRUNKMSD=0; //MSD digits to strip (usually 1 or 0)
- TRUNCPROTO=SIP;
- TRUNK=sunrocket;
- PSTN=pstn-spa3k;
- PSTNPROTO=SIP;
- TARIOPROTO=SIP;
- TARIO=tario;
- CPPROTO=SIP;
- CPACKET1=callpacket1;
- CPACKET2=callpacket2;
- SELLVOIP=1577040314;
- SVPROTO=IAX2;
- };
- macro stdexten (ext , dev ) {
- PrivacyManager(3,10);
- if("${PRIVACYMGRSTATUS}" = "FAILED") {
- Playback(vm-goodbye);
- Hangup();
- };
- AGI(calleridnamelookup.agi);
- Dial(${dev}/${ext},30,t);
- switch(${DIALSTATUS}) {
- case BUSY:
- Voicemail(b${ext});
- break;
- default:
- Voicemail(u${ext});
- };
- catch a {
- VoiceMailMain(${ext});
- return;
- };
- };
- macro announce_minutes(minutes) {
- Playback(vm-youhave);
- SayNumber(${minutes});
- Playback(vm-minutes);
- Wait(1);
- };
- // Check if given provider allows only some free minutes per month
- // and announce number of free minutes remaining.
- // The limit will be reset monthly by cron job.
- // The macro sets the following variables:
- // MINUTES_LIMIT - number of free minutes per month
- // MINUTES_USED - number of free minutes used in the current month
- // PROVIDER - provider name
- macro checkanddial(prov,proto,ext,arg1,arg2,arg3,arg4) {
- Set(MINUTES_LIMIT=0);
- Set(MINUTES_USED=0);
- Set(PROVIDER=${prov});
- if(${DB_EXISTS(Provider/${prov}/used)})
- Set(MINUTES_USED=${DB_RESULT});
- country_c = 0;
- switch(${LEN(${ext})}) { //assuming all international numbers are 11 digits long.
- case 10: //NXXNXXXXXX
- country_c=1;
- break;
- case 11: //XNXXNXXXXXX
- country_c = ${ext:0:1};
- break;
- default: //011XNXXNXXXXXX
- country_c = ${ext:3:1};
- break;
- };
- if("${prov}" = "${TRUNK}" & ${country_c} != 1) { // SunRocket international calls
- Set(MINUTES_LIMIT=${DB(Provider/${prov}/limit)});
- &announce_minutes($[${MINUTES_LIMIT} - ${MINUTES_USED}]);
- };
- if("${prov}" = "${CPACKET1}" | "${prov}" = "${CPACKET2}") { // Callpacket has a limit on domestic calls
- Set(MINUTES_LIMIT=${DB(Provider/${prov}/limit)});
- &announce_minutes($[${MINUTES_LIMIT} - ${MINUTES_USED}]);
- };
- DeadAGI(dial.agi,${proto}/${ext}@${prov},${arg1},${arg2},${arg3},${arg4});
- };
- macro trunkdial(ext) { // Dial sunrocket and set correct collerid
- if("${CALLERID(num)}" = "1") {
- Set(CALLERID(num)=7322271653);
- } else {
- Set(CALLERID(num)=7326260100);
- };
- Set(CALLERID(name)=Sergey Okhapkin);
- &checkanddial(${TRUNK},${TRUNCPROTO},${ext},60,T);
- Hangup;
- };
- macro checklocal(ext) { // lookup the number in DB and call the number via pstn or sunrocket
- Set(AREACODE=${ext:0:3});
- Set(EXCHANGE=${ext:3:3});
- Set(IS_LOCAL=${DB_EXISTS(localnum/${AREACODE}/${EXCHANGE})});
- if(${IS_LOCAL}) {
- &checkanddial(${PSTN},${PSTNPROTO},${ext},60,T);
- if ("${DIALSTATUS}" = "BUSY")
- &trunkdial(${ext});
- } else
- &trunkdial(${ext});
- };
- macro autodial(ext) { // Find Least Cost Route
- LCDial(${ext},60,T);
- if("${DIALSTATUS}" = "NOPROVIDER")
- Playback(invalid);
- Hangup();
- };
- context default { // Calls to us
- s => {
- Wait(1);
- Answer;
- start:
- Set(TIMEOUT(digit)=3);
- Set(TIMEOUT(response)=10);
- repeat:
- for (x=0; ${x} < 5; x=${x} + 1) {
- Background(home/greeting);
- WaitExten();
- };
- };
- t => jump *;
- i => { // invalid extension
- Playback(invalid);
- goto s|repeat;
- };
- _* => {
- Playback(vm-goodbye);
- Wait(1);
- Hangup;
- };
- 1 => &stdexten(1,SIP/1);
- 2 => &stdexten(2,SIP/2);
- 3 => &stdexten(3,SIP/3);
- 2271653 => jump 1;
- 7322271653 => jump 1;
- 17322271653 => jump 1;
- 6260100 => jump 2;
- 7326260100 => jump 2;
- 17326260100 => jump 2;
- 8058701100 => jump 2;
- 3103622835 => jump 2;
- sos => jump 2;
- 1400898 => jump 2;
- 6260101 => jump s;
- 7326260101 => jump s;
- 17326260101 => jump s;
- 2271677 => jump 3;
- 7322271677 => jump 3;
- 17322271677 => jump 3;
- galka => jump 3;
- 911 => Dial(${PSTNPROTO}/911@${PSTN},60,);
- 380 => Dial(SIP/topspeen@212.40.38.70,60,T);
- // Fun stuff
- 100 => {
- SayUnixTime();
- goto s|start;
- };
- 101 => { // Voicemail
- VoicemailMain(${CALLERID(num)});
- Hangup;
- };
- 102 => MusicOnHold();
- // 103 => {
- // Wait(1);
- //start:
- // Read(NUMBER,vm-enter-num-to-call);
- // LCDial(${NUMBER},T);
- // goto start;
- // };
- 105 => jump s@phrase-menu;
- 7312 => {
- ForkCDR;
- Set(CALLERID(name)=Sergey Okhapkin);
- Set(CALLERID(num)=7326260100);
- DISA(1111|home);
- };
- };
- context goiax {
- s => {
- Answer();
- Ringing();
- Wait(1);
- start:
- Read(NUMBER,vm-enter-num-to-call);
- Set(CALLERID(name)=Central NJ);
- Dial(IAX2/14301@fwdOUT/q${NUMBER},60,T);
- goto start;
- };
- };
- context phrase-menu {
- s => {
- Answer; // Answer the line
- TIMEOUT(digit)=2; // Set Digit Timeout to 5 seconds
- TIMEOUT(response)=10; // Set Response Timeout to 10 seconds
- BackGround(custom/phrase-menu); // Play main menu.
- };
- 1 => { // Phrase Recording
- Wait(1);
- Read(PHRASEID|custom/enter-phrase-num);
- Wait(2); // give yourself 2 secs to take a breath and wait for beep
- Record(custom/${PHRASEID}:gsm);
- Wait(2);
- Playback(custom/${PHRASEID});
- Wait(1);
- jump s;
- };
- 2 => { // Phrase review
- Wait(1);
- Read(PHRASEID|custom/enter-phrase-num);
- Wait(1);
- Playback(custom/${PHRASEID});
- Wait(1);
- jump s;
- };
- t => Hangup;
- i => {
- Playback(custom/invalid-option);
- jump s;
- };
- };
- context outbound {
- // North America seven-, ten- and eleven digits
- _NXXXXXX => &autodial(1732${EXTEN});
- _NXXNXXXXXX => &autodial(1${EXTEN});
- _ZNXXNXXXXX. => &autodial(${EXTEN});
- // Toll free numbers via PSTN
- // _1800NXXXXXX => &checkanddial(${PSTN},${PSTNPROTO},${EXTEN},60,T);
- // _1888NXXXXXX => &checkanddial(${PSTN},${PSTNPROTO},${EXTEN},60,T);
- // _1877NXXXXXX => &checkanddial(${PSTN},${PSTNPROTO},${EXTEN},60,T);
- // _1866NXXXXXX => &checkanddial(${PSTN},${PSTNPROTO},${EXTEN},60,T);
- _011. => { //International context accessed through trunk
- &trunkdial(${EXTEN});
- };
- _012. => { //fwdOUT
- Set(CALLERID(name)=Central NJ);
- Dial(IAX2/14301@fwdOUT/q${EXTEN:3},60,T);
- };
- _013X. => { //NECC
- Dial(${PSTNPROTO}/011${EXTEN:3}@${PSTN},60,T);
- };
- _0131. => { //NECC to US
- Dial(${PSTNPROTO}/${EXTEN:3}@${PSTN},60,T);
- };
- _014. => { //TARIO by SIP ID
- Set(CALLERID(name)=Sergey Okhapkin);
- Set(CALLERID(num)=1400898);
- Dial(${TARIOPROTO}/${EXTEN:3}@${TARIO},60,T);
- };
- _0157. => { //TARIO outbound Russia
- Set(CALLERID(name)=Sergey Okhapkin);
- Set(CALLERID(num)=1400898);
- Dial(${TARIOPROTO}/8${EXTEN:4}@${TARIO},60,T);
- };
- // _015. => { //TARIO outbound international
- // CALLERID(name)="Sergey Okhapkin";
- // CALLERID(num)=1400898;
- // Dial(${TARIOPROTO}/810${EXTEN:3}@${TARIO},60,T);
- // };
- _0161NXXNXXXXXX => { //Callpacket outbound USA/Canada
- &checkanddial(${CPACKET1},${CPPROTO},${EXTEN:3},60,T);
- };
- _0171NXXNXXXXXX => { //Callpacket outbound USA/Canada
- &checkanddial(${CPACKET2},${CPPROTO},${EXTEN:3},60,T);
- };
- _0181NXXNXXXXXX => { //sellvoip outbound USA/Canada
- Dial(${SVPROTO}/${SELLVOIP}@${SELLVOIP}/${EXTEN:3},60,T);
- };
- _019. => { //Voipbuster
- Dial(IAX2/sokhapkin@voipbuster/00${EXTEN:3},60,T);
- };
- };
- context home { //calls from us
- includes {
- default;
- outbound;
- };
- };
- context sunrocket-in {
- 7322271653 => jump s;
- 7326260100 => jump 2@default;
- s => {
- if("${CALLERID(num)}" = "sunrocketcom")
- Set(CALLERID(num)=);
- switch(${CALLERID(RDNIS)}) {
- case 7326260100:
- jump 2@default;
- break;
- case 7326260101:
- jump s@default;
- break;
- default:
- jump 1@default;
- break;
- };
- };
- };
- context pstn-in {
- 3 => {
- if ("${CALLERID(num)}" = "7322271677")
- Set(CALLERID(num)=);
- jump 3@default;
- };
- };
- context tario.net-in {
- _X. => {
- Set(CALLERID(name)=);
- if("${CALLERID(num):-11:1}" = "8")
- Set(CALLERID(num)=7${CALLERID(num):1});
- if("${SIP_HEADER(To)}" = "<sip:2271677@sipnet.ru>") {
- jump 3@default;
- } else if("${SIP_HEADER(To)}" = "<sip:2271653@sipnet.ru>") {
- jump 1@default;
- } else
- jump 2@default;
- };
- };
- context from-callpacket {
- 8058701100 => jump 2@default;
- 3103622835 => {
- Answer;
- Ringing;
- Wait(10);
- Voicemail(b3103622835);
- Hangup;
- };
- a => Hangup;
- };
- context fromfwdOUT { // make sure we only accept US and Canada calls, limit to 30 minutes
- includes {
- fromfwdOUT-catchbad;
- fromfwdOUT-isgood;
- fromfwdOUT-catchall;
- };
- };
- context fromfwdOUT-isgood {
- _17326260100 => jump 2@default;
- _17326260101 => jump s@default;
- _17322271653 => jump 1@default;
- _17322271677 => jump 3@default;
- _1NXXNXXXXXX => {
- Set(CALLERID(name)=Sergey Okhapkin);
- // Set(CALLERID(num)=7326260100);
- // Dial(${TRUNCPROTO}/*67${EXTEN:${TRUNKMSD}}@${TRUNK},60,,L(1800000:60000));
- Dial(${CPPROTO}/${EXTEN}@${CPACKET2},60,,L(1800000:60000));
- };
- };
- context fromfwdOUT-catchbad { //block bahamas, etc
- _1900. => congestion ; //N11
- _1XXX976. => congestion ; //N11
- _1XXX555. => congestion ; //N11
- _1X11. => congestion ; //N11
- _1867. => congestion ; //Yukon (sorry mike)
- // exten => _1NPA Country
- _1242. => congestion; //BAHAMAS
- _1246. => congestion; //BARBADOS
- _1264. => congestion; //ANGUILLA
- _1268. => congestion; //ANTIGUA/BARBUDA
- _1284. => congestion; //BRITISH VIRGIN ISLANDS
- _1345. => congestion; //CAYMAN ISLANDS
- _1441. => congestion; //BERMUDA
- _1473. => congestion; //GRENADA
- _1649. => congestion; //TURKS & CAICOS ISLANDS
- _1664. => congestion; //MONTSERRAT
- _1758. => congestion; //ST. LUCIA
- _1767. => congestion; //DOMINICA
- _1784. => congestion; //ST. VINCENT & GRENADINES
- _1809. => congestion; //DOMINICAN REPUBLIC
- _1829. => congestion; //DOMINICAN REPUBLIC
- _1868. => congestion; //TRINIDAD AND TOBAGO
- _1869. => congestion; //ST. KITTS AND NEVIS
- _1876. => congestion; //JAMAICA
- _1787. => congestion; //Puerto Rico 787, 939 $0.07
- _1939. => congestion; //Puerto Rico 787, 939 $0.07
- _1671. => congestion; //Guam 671 $0.08
- _1340. => congestion; //U.S. Virgin Islands 340 $0.06
- };
- context fromfwdOUT-catchall {
- _X. => Congestion;
- h => Hangup ; //hangup event
- i => Hangup ; //invalid event
- t => Hangup ; //timeout event
- };
- context ael-demo {
- s => {
- Wait(1);
- Answer();
- TIMEOUT(digit)=5;
- TIMEOUT(response)=10;
- restart:
- Background(demo-congrats);
- instructions:
- for (x=0; ${x} < 3; x=${x} + 1) {
- Background(demo-instruct);
- WaitExten();
- };
- };
- 2 => {
- Background(demo-moreinfo);
- goto s|instructions;
- };
- 3 => {
- LANGUAGE()=fr;
- goto s|restart;
- };
- 500 => {
- Playback(demo-abouttotry);
- Dial(IAX2/guest@misery.digium.com);
- Playback(demo-nogo);
- goto s|instructions;
- };
- 600 => {
- Playback(demo-echotest);
- Echo();
- Playback(demo-echodone);
- goto s|instructions;
- };
- _1234 => &std-exten-ael(${EXTEN}, "IAX2");
- # => {
- Playback(demo-thanks);
- Hangup();
- };
- t => jump #;
- i => Playback(invalid);
- };
|