⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 extensions.ael

📁 asterisk 一个模拟IPPBX的源代码
💻 AEL
字号:
//// 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 namemacro 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);};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -