460 lines
10 KiB
Plaintext
460 lines
10 KiB
Plaintext
|
//
|
||
|
// 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);
|
||
|
};
|