mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-22 20:56:39 +00:00
Merge Steve Murphy's (murf) complete re-implementation of AEL, which is now no longer considered experimental :-)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@22273 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -1,6 +1,307 @@
|
||||
//
|
||||
// Example AEL config file
|
||||
//
|
||||
//
|
||||
// Static extension configuration file, used by
|
||||
// the pbx_config module. This is where you configure all your
|
||||
// inbound and outbound calls in Asterisk.
|
||||
//
|
||||
// This configuration file is reloaded
|
||||
// - With the "extensions 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 with ${VARIABLE} or ${ENV(VARIABLE)} for Environmental
|
||||
// variables,
|
||||
// ${${VARIABLE}} or ${text${VARIABLE}} or any hybrid
|
||||
//
|
||||
|
||||
globals {
|
||||
CONSOLE="Console/dsp"; // Console interface for demo
|
||||
//CONSOLE=Zap/1
|
||||
//CONSOLE=Phone/phone0
|
||||
IAXINFO=guest; // IAXtel username/password
|
||||
//IAXINFO="myuser:mypass";
|
||||
TRUNK="Zap/g2"; // Trunk interface
|
||||
//
|
||||
// Note the 'g2' in the TRUNK variable above. It specifies which group (defined
|
||||
// in zapata.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 Zap channel
|
||||
// (aka. ascending sequential hunt group).
|
||||
// G: select the highest-numbered non-busy Zap 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).
|
||||
//
|
||||
TRUNKMSD=1; // MSD digits to strip (usually 1 or 0)
|
||||
//TRUNK=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
|
||||
// preceeded 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 dundi-e164-canonical {
|
||||
//
|
||||
// List canonical entries here
|
||||
//
|
||||
// 12564286000 => &std-exten(6000,IAX2/foo);
|
||||
// _125642860XX => Dial(IAX2/otherbox/${EXTEN:7});
|
||||
};
|
||||
|
||||
context dundi-e164-customers {
|
||||
//
|
||||
// If you are an ITSP or Reseller, list your customers here.
|
||||
//
|
||||
//_12564286000 => Dial(SIP/customer1);
|
||||
//_12564286001 => Dial(IAX2/customer2);
|
||||
};
|
||||
|
||||
context dundi-e164-via-pstn {
|
||||
//
|
||||
// If you are freely delivering calls to the PSTN, list them here
|
||||
//
|
||||
//_1256428XXXX => Dial(Zap/g2/${EXTEN:7}); // Expose all of 256-428
|
||||
//_1256325XXXX => Dial(Zap/g2/${EXTEN:7}); // Ditto for 256-325
|
||||
};
|
||||
|
||||
context dundi-e164-local {
|
||||
//
|
||||
// Context to put your dundi IAX2 or SIP user in for
|
||||
// full access
|
||||
//
|
||||
includes {
|
||||
dundi-e164-canonical;
|
||||
dundi-e164-customers;
|
||||
dundi-e164-via-pstn;
|
||||
};
|
||||
};
|
||||
|
||||
context dundi-e164-switch {
|
||||
//
|
||||
// Just a wrapper for the switch
|
||||
//
|
||||
|
||||
switches {
|
||||
DUNDi/e164;
|
||||
};
|
||||
};
|
||||
|
||||
context dundi-e164-lookup {
|
||||
//
|
||||
// Locally to lookup, try looking for a local E.164 solution
|
||||
// then try DUNDi if we don't have one.
|
||||
//
|
||||
includes {
|
||||
dundi-e164-local;
|
||||
dundi-e164-switch;
|
||||
};
|
||||
//
|
||||
};
|
||||
|
||||
//
|
||||
// DUNDi can also be implemented as a Macro instead of using
|
||||
// the Local channel driver.
|
||||
//
|
||||
macro dundi-e164(exten) {
|
||||
//
|
||||
// ARG1 is the extension to Dial
|
||||
//
|
||||
goto ${exten}|1;
|
||||
};
|
||||
|
||||
//
|
||||
// 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 iaxtel700 {
|
||||
_91700XXXXXXX => Dial(IAX2/${IAXINFO}@iaxtel.com/${EXTEN:1}@iaxtel);
|
||||
};
|
||||
|
||||
//
|
||||
// The SWITCH statement permits a server to share the dialplain 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 iaxprovider {
|
||||
switches {
|
||||
// IAX2/user:[key]@myserver/mycontext;
|
||||
};
|
||||
};
|
||||
|
||||
context trunkint {
|
||||
//
|
||||
// International long distance through trunk
|
||||
//
|
||||
includes {
|
||||
dundi-e164-lookup;
|
||||
};
|
||||
_9011. => {
|
||||
&dundi-e164(${EXTEN:4});
|
||||
Dial(${TRUNK}/${EXTEN:${TRUNKMSD}});
|
||||
};
|
||||
};
|
||||
|
||||
context trunkld {
|
||||
//
|
||||
// Long distance context accessed through trunk
|
||||
//
|
||||
includes {
|
||||
dundi-e164-lookup;
|
||||
};
|
||||
_91NXXNXXXXXX => {
|
||||
&dundi-e164(${EXTEN:1});
|
||||
Dial(${TRUNK}/${EXTEN:${TRUNKMSD}});
|
||||
};
|
||||
};
|
||||
|
||||
context trunklocal {
|
||||
//
|
||||
// Local seven-digit dialing accessed through trunk interface
|
||||
//
|
||||
_9NXXXXXX => {
|
||||
Dial(${TRUNK}/${EXTEN:${TRUNKMSD}});
|
||||
};
|
||||
};
|
||||
|
||||
context trunktollfree {
|
||||
//
|
||||
// Long distance context accessed through trunk interface
|
||||
//
|
||||
|
||||
_91800NXXXXXX => Dial(${TRUNK}/${EXTEN:${TRUNKMSD}});
|
||||
_91888NXXXXXX => Dial(${TRUNK}/${EXTEN:${TRUNKMSD}});
|
||||
_91877NXXXXXX => Dial(${TRUNK}/${EXTEN:${TRUNKMSD}});
|
||||
_91866NXXXXXX => Dial(${TRUNK}/${EXTEN:${TRUNKMSD}});
|
||||
};
|
||||
|
||||
context international {
|
||||
//
|
||||
// Master context for international long distance
|
||||
//
|
||||
ignorepat => 9;
|
||||
includes {
|
||||
longdistance;
|
||||
trunkint;
|
||||
};
|
||||
};
|
||||
|
||||
context longdistance {
|
||||
//
|
||||
// Master context for long distance
|
||||
//
|
||||
ignorepat => 9;
|
||||
includes {
|
||||
local;
|
||||
trunkld;
|
||||
};
|
||||
};
|
||||
|
||||
context local {
|
||||
//
|
||||
// Master context for local, toll-free, and iaxtel calls only
|
||||
//
|
||||
ignorepat => 9;
|
||||
includes {
|
||||
default;
|
||||
parkedcalls;
|
||||
trunklocal;
|
||||
iaxtel700;
|
||||
trunktollfree;
|
||||
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 std-exten-ael( ext , dev ) {
|
||||
Dial(${dev}/${ext},20);
|
||||
@@ -21,8 +322,8 @@ context ael-demo {
|
||||
s => {
|
||||
Wait(1);
|
||||
Answer();
|
||||
TIMEOUT(digit)=5;
|
||||
TIMEOUT(response)=10;
|
||||
Set(TIMEOUT(digit)=5);
|
||||
Set(TIMEOUT(response)=10);
|
||||
restart:
|
||||
Background(demo-congrats);
|
||||
instructions:
|
||||
@@ -36,12 +337,15 @@ instructions:
|
||||
goto s|instructions;
|
||||
};
|
||||
3 => {
|
||||
LANGUAGE()=fr;
|
||||
Set(LANGUAGE()=fr);
|
||||
goto s|restart;
|
||||
};
|
||||
1000 => {
|
||||
goto default|s|1;
|
||||
};
|
||||
500 => {
|
||||
Playback(demo-abouttotry);
|
||||
Dial(IAX2/guest@misery.digium.com);
|
||||
Dial(IAX2/guest@misery.digium.com/s@default);
|
||||
Playback(demo-nogo);
|
||||
goto s|instructions;
|
||||
};
|
||||
@@ -52,11 +356,83 @@ instructions:
|
||||
goto s|instructions;
|
||||
};
|
||||
_1234 => &std-exten-ael(${EXTEN}, "IAX2");
|
||||
8500 => {
|
||||
VoicemailMain();
|
||||
goto s|instructions;
|
||||
};
|
||||
# => {
|
||||
Playback(demo-thanks);
|
||||
Hangup();
|
||||
};
|
||||
t => jump #;
|
||||
t => goto #|1;
|
||||
i => Playback(invalid);
|
||||
};
|
||||
|
||||
context 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(b6245);
|
||||
// return;
|
||||
// default:
|
||||
// Voicemail(u6245);
|
||||
// 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 Zap/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.
|
||||
//
|
||||
};
|
||||
|
Reference in New Issue
Block a user