123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456 |
- //
- // 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.
- //
- }
|