mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-27 06:31:54 +00:00 
			
		
		
		
	https://origsvn.digium.com/svn/asterisk/trunk ................ r252762 | lmadsen | 2010-03-16 13:48:22 -0500 (Tue, 16 Mar 2010) | 15 lines Merged revisions 252761 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r252761 | lmadsen | 2010-03-16 13:46:20 -0500 (Tue, 16 Mar 2010) | 7 lines Additional extensions.ael global variable fixes. Fixing up a couple more overlapping global variable namespaces shared with extensions.conf.sample. Also noticed a few of the lines that were commented out didn't have the closing semi-colon so I added that as well. (issue #17035) ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.1@252764 65c4cc65-6c06-0410-ace0-fbb531ad65f3
		
			
				
	
	
		
			457 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			457 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //
 | |
| // Example AEL config file
 | |
| //
 | |
| //
 | |
| // Static extension configuration file, used by
 | |
| // the pbx_ael module. This is where you configure all your 
 | |
| // inbound and outbound calls in Asterisk. 
 | |
| // 
 | |
| // This configuration file is reloaded 
 | |
| // - With the "ael reload" command in the CLI
 | |
| // - With the "reload" command (that reloads everything) in the CLI
 | |
| 
 | |
| // The "Globals" category contains global variables that can be referenced
 | |
| // in the dialplan by using the GLOBAL dialplan function:
 | |
| //  ${GLOBAL(VARIABLE)} 
 | |
| // ${${GLOBAL(VARIABLE)}} or ${text${GLOBAL(VARIABLE)}} or any hybrid
 | |
| // Unix/Linux environmental variables are reached with the ENV dialplan
 | |
| // function: ${ENV(VARIABLE)}
 | |
| //
 | |
| 
 | |
| // NOTE! NOTE! NOTE!
 | |
| // Asterisk by default will load both extensions.conf and extensions.ael files.
 | |
| // Upon loading these files the dialplans generated from both with be merged,
 | |
| // so you must make sure that you don't have any overlapping contexts or global
 | |
| // variables. If you do, then unexpected behavior may result when the data is
 | |
| // merged.
 | |
| // NOTE! NOTE! NOTE!
 | |
| 
 | |
| globals {
 | |
| 	CONSOLE-AEL="Console/dsp"; 		// Console interface for demo
 | |
| 	//CONSOLE-AEL=Zap/1;
 | |
| 	//CONSOLE-AEL=Phone/phone0;
 | |
| 	IAXINFO-AEL=guest;				// IAXtel username/password
 | |
| 	//IAXINFO-AEL="myuser:mypass";
 | |
| 	OUTBOUND-TRUNK="Zap/g2";		// Trunk interface
 | |
| 	//
 | |
| 	// Note the 'g2' in the OUTBOUND-TRUNK variable above. It specifies which group (defined
 | |
| 	// in chan_dahdi.conf) to dial, i.e. group 2, and how to choose a channel to use in
 | |
| 	// the specified group. The four possible options are:
 | |
| 	//
 | |
| 	// g: select the lowest-numbered non-busy DAHDI channel
 | |
| 	//    (aka. ascending sequential hunt group).
 | |
| 	// G: select the highest-numbered non-busy DAHDI channel
 | |
| 	//    (aka. descending sequential hunt group).
 | |
| 	// r: use a round-robin search, starting at the next highest channel than last
 | |
| 	//    time (aka. ascending rotary hunt group).
 | |
| 	// R: use a round-robin search, starting at the next lowest channel than last
 | |
| 	//    time (aka. descending rotary hunt group).
 | |
| 	//
 | |
| 	OUTBOUND-TRUNKMSD=1;					// MSD digits to strip (usually 1 or 0)
 | |
| 	//OUTBOUND-TRUNK2=IAX2/user:pass@provider;
 | |
| };
 | |
| 
 | |
| //
 | |
| // Any category other than "General" and "Globals" represent 
 | |
| // extension contexts, which are collections of extensions.  
 | |
| //
 | |
| // Extension names may be numbers, letters, or combinations
 | |
| // thereof. If an extension name is prefixed by a '_'
 | |
| // character, it is interpreted as a pattern rather than a
 | |
| // literal.  In patterns, some characters have special meanings:
 | |
| //
 | |
| //   X - any digit from 0-9
 | |
| //   Z - any digit from 1-9
 | |
| //   N - any digit from 2-9
 | |
| //   [1235-9] - any digit in the brackets (in this example, 1,2,3,5,6,7,8,9)
 | |
| //   . - wildcard, matches anything remaining (e.g. _9011. matches 
 | |
| //	anything starting with 9011 excluding 9011 itself)
 | |
| //   ! - wildcard, causes the matching process to complete as soon as
 | |
| //       it can unambiguously determine that no other matches are possible
 | |
| //
 | |
| // For example the extension _NXXXXXX would match normal 7 digit dialings, 
 | |
| // while _1NXXNXXXXXX would represent an area code plus phone number
 | |
| // preceded by a one.
 | |
| //
 | |
| // Each step of an extension is ordered by priority, which must
 | |
| // always start with 1 to be considered a valid extension.  The priority
 | |
| // "next" or "n" means the previous priority plus one, regardless of whether
 | |
| // the previous priority was associated with the current extension or not.
 | |
| // The priority "same" or "s" means the same as the previously specified
 | |
| // priority, again regardless of whether the previous entry was for the
 | |
| // same extension.  Priorities may be immediately followed by a plus sign
 | |
| // and another integer to add that amount (most useful with 's' or 'n').  
 | |
| // Priorities may then also have an alias, or label, in 
 | |
| // parenthesis after their name which can be used in goto situations
 | |
| //
 | |
| // Contexts contain several lines, one for each step of each
 | |
| // extension, which can take one of two forms as listed below,
 | |
| // with the first form being preferred.  One may include another
 | |
| // context in the current one as well, optionally with a
 | |
| // date and time.  Included contexts are included in the order
 | |
| // they are listed.
 | |
| //
 | |
| //context name {
 | |
| //	exten-name => {
 | |
| //		application(arg1,arg2,...);
 | |
| //
 | |
| // 	Timing list for includes is 
 | |
| //
 | |
| //   <time range>|<days of week>|<days of month>|<months>
 | |
| //
 | |
| //	includes { 
 | |
| //		daytime|9:00-17:00|mon-fri|*|*;
 | |
| //      };
 | |
| //
 | |
| // 	ignorepat can be used to instruct drivers to not cancel dialtone upon
 | |
| // 	receipt of a particular pattern.  The most commonly used example is
 | |
| // 	of course '9' like this:
 | |
| //
 | |
| //	ignorepat => 9;
 | |
| //
 | |
| // 	so that dialtone remains even after dialing a 9.
 | |
| //};
 | |
| 
 | |
| 
 | |
| //
 | |
| // Sample entries for extensions.conf
 | |
| //
 | |
| //
 | |
| context ael-dundi-e164-canonical {
 | |
| 	//
 | |
| 	// List canonical entries here
 | |
| 	//
 | |
| 	// 12564286000 => &ael-std-exten(6000,IAX2/foo);
 | |
| 	// _125642860XX => Dial(IAX2/otherbox/${EXTEN:7});
 | |
| };
 | |
| 
 | |
| context ael-dundi-e164-customers {
 | |
| 	//
 | |
| 	// If you are an ITSP or Reseller, list your customers here.
 | |
| 	//
 | |
| 	//_12564286000 => Dial(SIP/customer1);
 | |
| 	//_12564286001 => Dial(IAX2/customer2);
 | |
| };
 | |
| 
 | |
| context ael-dundi-e164-via-pstn {
 | |
| 	//
 | |
| 	// If you are freely delivering calls to the PSTN, list them here
 | |
| 	//
 | |
| 	//_1256428XXXX => Dial(DAHDI/G2/${EXTEN:7}); // Expose all of 256-428 
 | |
| 	//_1256325XXXX => Dial(DAHDI/G2/${EXTEN:7}); // Ditto for 256-325
 | |
| };
 | |
| 
 | |
| context ael-dundi-e164-local {
 | |
| 	//
 | |
| 	// Context to put your dundi IAX2 or SIP user in for
 | |
| 	// full access
 | |
| 	//
 | |
| 	includes {
 | |
| 	 ael-dundi-e164-canonical;
 | |
| 	 ael-dundi-e164-customers;
 | |
| 	 ael-dundi-e164-via-pstn;
 | |
| 	};
 | |
| };
 | |
| 
 | |
| context ael-dundi-e164-switch {
 | |
| 	//
 | |
| 	// Just a wrapper for the switch
 | |
| 	//
 | |
| 	
 | |
| 	switches { 
 | |
| 		DUNDi/e164;
 | |
| 	};
 | |
| };
 | |
| 
 | |
| context ael-dundi-e164-lookup {
 | |
| 	//
 | |
| 	// Locally to lookup, try looking for a local E.164 solution
 | |
| 	// then try DUNDi if we don't have one.
 | |
| 	//
 | |
| 	includes {
 | |
| 		ael-dundi-e164-local;
 | |
| 		ael-dundi-e164-switch;
 | |
| 	};
 | |
| 	//
 | |
| };
 | |
| 
 | |
| //
 | |
| // DUNDi can also be implemented as a Macro instead of using 
 | |
| // the Local channel driver. 
 | |
| //
 | |
| macro ael-dundi-e164(exten) {
 | |
| //
 | |
| // ARG1 is the extension to Dial
 | |
| //
 | |
| 	goto ${exten}|1;
 | |
| 	return;
 | |
| };
 | |
| 
 | |
| //
 | |
| // Here are the entries you need to participate in the IAXTEL
 | |
| // call routing system.  Most IAXTEL numbers begin with 1-700, but
 | |
| // there are exceptions.  For more information, and to sign
 | |
| // up, please go to www.gnophone.com or www.iaxtel.com
 | |
| //
 | |
| context ael-iaxtel700 {
 | |
| 	_91700XXXXXXX => Dial(IAX2/${IAXINFO-AEL}@iaxtel.com/${EXTEN:1}@iaxtel);
 | |
| };
 | |
| 
 | |
| //
 | |
| // The SWITCH statement permits a server to share the dialplan with
 | |
| // another server. Use with care: Reciprocal switch statements are not
 | |
| // allowed (e.g. both A -> B and B -> A), and the switched server needs
 | |
| // to be on-line or else dialing can be severly delayed.
 | |
| //
 | |
| context ael-iaxprovider {
 | |
| 	switches {
 | |
| 	// IAX2/user:[key]@myserver/mycontext;
 | |
| 	};
 | |
| };
 | |
| 
 | |
| context ael-trunkint {
 | |
| 	//
 | |
| 	// International long distance through trunk
 | |
| 	//
 | |
| 	includes {
 | |
| 		ael-dundi-e164-lookup;
 | |
| 	};
 | |
| 	_9011. => {
 | |
| 		&ael-dundi-e164(${EXTEN:4});
 | |
| 		Dial(${OUTBOUND-TRUNK}/${EXTEN:${OUTBOUND-TRUNKMSD}});
 | |
| 	};
 | |
| };
 | |
| 
 | |
| context ael-trunkld {
 | |
| 	//
 | |
| 	// Long distance context accessed through trunk
 | |
| 	//
 | |
| 	includes {
 | |
| 		ael-dundi-e164-lookup;
 | |
| 	};
 | |
| 	_91NXXNXXXXXX => {
 | |
| 		&ael-dundi-e164(${EXTEN:1});
 | |
| 		Dial(${OUTBOUND-TRUNK}/${EXTEN:${OUTBOUND-TRUNKMSD}});
 | |
| 	};
 | |
| };
 | |
| 
 | |
| context ael-trunklocal {
 | |
| 	//
 | |
| 	// Local seven-digit dialing accessed through trunk interface
 | |
| 	//
 | |
| 	_9NXXXXXX => {
 | |
| 		Dial(${OUTBOUND-TRUNK}/${EXTEN:${OUTBOUND-TRUNKMSD}});
 | |
| 	};
 | |
| };
 | |
| 
 | |
| context ael-trunktollfree {
 | |
| 	//
 | |
| 	// Long distance context accessed through trunk interface
 | |
| 	//
 | |
| 	
 | |
| 	_91800NXXXXXX => Dial(${OUTBOUND-TRUNK}/${EXTEN:${OUTBOUND-TRUNKMSD}});
 | |
| 	_91888NXXXXXX => Dial(${OUTBOUND-TRUNK}/${EXTEN:${OUTBOUND-TRUNKMSD}});
 | |
| 	_91877NXXXXXX => Dial(${OUTBOUND-TRUNK}/${EXTEN:${OUTBOUND-TRUNKMSD}});
 | |
| 	_91866NXXXXXX => Dial(${OUTBOUND-TRUNK}/${EXTEN:${OUTBOUND-TRUNKMSD}});
 | |
| };
 | |
| 
 | |
| context ael-international {
 | |
| 	//
 | |
| 	// Master context for international long distance
 | |
| 	//
 | |
| 	ignorepat => 9;
 | |
| 	includes {
 | |
| 		ael-longdistance;
 | |
| 		ael-trunkint;
 | |
| 	};
 | |
| };
 | |
| 
 | |
| context ael-longdistance {
 | |
| 	//
 | |
| 	// Master context for long distance
 | |
| 	//
 | |
| 	ignorepat => 9;
 | |
| 	includes {
 | |
| 		ael-local;
 | |
| 		ael-trunkld;
 | |
| 	};
 | |
| };
 | |
| 
 | |
| context ael-local {
 | |
| 	//
 | |
| 	// Master context for local, toll-free, and iaxtel calls only
 | |
| 	//
 | |
| 	ignorepat => 9;
 | |
| 	includes {
 | |
| 		ael-default;
 | |
| 		ael-trunklocal;
 | |
| 		ael-iaxtel700;
 | |
| 		ael-trunktollfree;
 | |
| 		ael-iaxprovider;
 | |
| 	};
 | |
| };
 | |
| 
 | |
| //
 | |
| // You can use an alternative switch type as well, to resolve
 | |
| // extensions that are not known here, for example with remote 
 | |
| // IAX switching you transparently get access to the remote
 | |
| // Asterisk PBX
 | |
| // 
 | |
| // switch => IAX2/user:password@bigserver/local
 | |
| //
 | |
| // An "lswitch" is like a switch but is literal, in that
 | |
| // variable substitution is not performed at load time
 | |
| // but is passed to the switch directly (presumably to
 | |
| // be substituted in the switch routine itself)
 | |
| //
 | |
| // lswitch => Loopback/12${EXTEN}@othercontext
 | |
| //
 | |
| // An "eswitch" is like a switch but the evaluation of
 | |
| // variable substitution is performed at runtime before
 | |
| // being passed to the switch routine.
 | |
| //
 | |
| // eswitch => IAX2/context@${CURSERVER}
 | |
| 
 | |
| 
 | |
| macro ael-std-exten-ael( ext , dev ) {
 | |
|         Dial(${dev}/${ext},20);
 | |
|         switch(${DIALSTATUS}) {
 | |
|         case BUSY:
 | |
|                 Voicemail(${ext},b);
 | |
|                 break;
 | |
|         default:
 | |
|                 Voicemail(${ext},u);
 | |
|         };
 | |
|         catch a {
 | |
|                 VoiceMailMain(${ext});
 | |
|                 return;
 | |
|         };
 | |
| 	return;
 | |
| };
 | |
| 
 | |
| context ael-demo {
 | |
| 	s => {
 | |
| 		Wait(1);
 | |
| 		Answer();
 | |
| 		Set(TIMEOUT(digit)=5);
 | |
| 		Set(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 => {
 | |
| 		Set(LANGUAGE()=fr);
 | |
| 		goto s|restart;
 | |
| 	};
 | |
| 	1000 => {
 | |
| 		goto ael-default|s|1;
 | |
| 	};
 | |
| 	500 => {
 | |
| 		Playback(demo-abouttotry);
 | |
| 		Dial(IAX2/guest@misery.digium.com/s@default);
 | |
| 		Playback(demo-nogo);
 | |
| 		goto s|instructions;
 | |
| 	};
 | |
| 	600 => {
 | |
| 		Playback(demo-echotest);
 | |
| 		Echo();
 | |
| 		Playback(demo-echodone);
 | |
| 		goto s|instructions;
 | |
| 	};
 | |
| 	_1234 => &ael-std-exten-ael(${EXTEN}, "IAX2");
 | |
| 	8500 => {
 | |
| 		VoicemailMain();
 | |
| 		goto s|instructions;
 | |
| 	};
 | |
| 	# => {
 | |
| 		Playback(demo-thanks);
 | |
| 		Hangup();
 | |
| 	};
 | |
| 	t => goto #|1;
 | |
| 	i => Playback(invalid);
 | |
| };
 | |
| 
 | |
| 
 | |
| //
 | |
| // If you wish to use AEL for your default context, remove it
 | |
| // from extensions.conf (or change its name or comment it out)
 | |
| // and then uncomment the one here.
 | |
| //
 | |
| 
 | |
| context ael-default {
 | |
| 
 | |
| // By default we include the demo.  In a production system, you 
 | |
| // probably don't want to have the demo there.
 | |
| 
 | |
| 	includes {
 | |
| 		ael-demo;
 | |
| 	};
 | |
| //
 | |
| // Extensions like the two below can be used for FWD, Nikotel, sipgate etc.
 | |
| // Note that you must have a [sipprovider] section in sip.conf whereas
 | |
| // the otherprovider.net example does not require such a peer definition
 | |
| //
 | |
| //_41X. => Dial(SIP/${EXTEN:2}@sipprovider,,r);
 | |
| //_42X. => Dial(SIP/user:passwd@${EXTEN:2}@otherprovider.net,30,rT);
 | |
| 
 | |
| // Real extensions would go here. Generally you want real extensions to be
 | |
| // 4 or 5 digits long (although there is no such requirement) and start with a
 | |
| // single digit that is fairly large (like 6 or 7) so that you have plenty of
 | |
| // room to overlap extensions and menu options without conflict.  You can alias
 | |
| // them with names, too, and use global variables
 | |
| 
 | |
| // 6245  => {
 | |
| //		hint(SIP/Grandstream1&SIP/Xlite1,Joe Schmoe); // Channel hints for presence
 | |
| // 		Dial(SIP/Grandstream1,20,rt);                 // permit transfer
 | |
| //        Dial(${HINT}/5245},20,rtT);                    // Use hint as listed
 | |
| //        switch(${DIALSTATUS}) {
 | |
| //        case BUSY:
 | |
| //                Voicemail(6245,b);
 | |
| //				return;
 | |
| //        default:
 | |
| //                Voicemail(6245,u);
 | |
| //				return;
 | |
| //        };
 | |
| //       };
 | |
| 
 | |
| // 6361 => Dial(IAX2/JaneDoe,,rm);                // ring without time limit
 | |
| // 6389 => Dial(MGCP/aaln/1@192.168.0.14);
 | |
| // 6394 => Dial(Local/6275/n);                    // this will dial ${MARK}
 | |
| 
 | |
| // 6275 => &ael-stdexten(6275,${MARK});           // assuming ${MARK} is something like DAHDI/2
 | |
| // mark => goto 6275|1;                          // alias mark to 6275
 | |
| // 6536 => &ael-stdexten(6236,${WIL});            // Ditto for wil
 | |
| // wil  => goto 6236|1;
 | |
| //
 | |
| // Some other handy things are an extension for checking voicemail via
 | |
| // voicemailmain
 | |
| //
 | |
| // 8500 => {
 | |
| //			VoicemailMain();
 | |
| //			Hangup();
 | |
| //	       };
 | |
| //
 | |
| // Or a conference room (you'll need to edit meetme.conf to enable this room)
 | |
| //
 | |
| // 8600 => Meetme(1234);
 | |
| //
 | |
| // Or playing an announcement to the called party, as soon it answers
 | |
| //
 | |
| // 8700 => Dial(${MARK},30,A(/path/to/my/announcemsg))
 | |
| //
 | |
| // For more information on applications, just type "show applications" at your
 | |
| // friendly Asterisk CLI prompt.
 | |
| //
 | |
| // 'show application <command>' will show details of how you
 | |
| // use that particular application in this file, the dial plan. 
 | |
| //
 | |
| }
 |