chan_sip: Allow Asterisk to retry after 403 on register
[asterisk/asterisk.git] / configs / extensions.ael.sample
1 //
2 // Example AEL config file
3 //
4 //
5 // Static extension configuration file, used by
6 // the pbx_ael module. This is where you configure all your
7 // inbound and outbound calls in Asterisk.
8 //
9 // This configuration file is reloaded
10 // - With the "ael reload" command in the CLI
11 // - With the "reload" command (that reloads everything) in the CLI
12
13 // The "Globals" category contains global variables that can be referenced
14 // in the dialplan by using the GLOBAL dialplan function:
15 //  ${GLOBAL(VARIABLE)}
16 // ${${GLOBAL(VARIABLE)}} or ${text${GLOBAL(VARIABLE)}} or any hybrid
17 // Unix/Linux environmental variables are reached with the ENV dialplan
18 // function: ${ENV(VARIABLE)}
19 //
20
21 // NOTE! NOTE! NOTE!
22 // Asterisk by default will load both extensions.conf and extensions.ael files.
23 // Upon loading these files the dialplans generated from both with be merged,
24 // so you must make sure that you don't have any overlapping contexts or global
25 // variables. If you do, then unexpected behavior may result when the data is
26 // merged.
27 // NOTE! NOTE! NOTE!
28
29 globals {
30         CONSOLE-AEL="Console/dsp";              // Console interface for demo
31         //CONSOLE-AEL=Zap/1;
32         //CONSOLE-AEL=Phone/phone0;
33         IAXINFO-AEL=guest;                              // IAXtel username/password
34         //IAXINFO-AEL="myuser:mypass";
35         OUTBOUND-TRUNK="Zap/g2";                // Trunk interface
36         //
37         // Note the 'g2' in the OUTBOUND-TRUNK variable above. It specifies which group (defined
38         // in chan_dahdi.conf) to dial, i.e. group 2, and how to choose a channel to use in
39         // the specified group. The four possible options are:
40         //
41         // g: select the lowest-numbered non-busy DAHDI channel
42         //    (aka. ascending sequential hunt group).
43         // G: select the highest-numbered non-busy DAHDI channel
44         //    (aka. descending sequential hunt group).
45         // r: use a round-robin search, starting at the next highest channel than last
46         //    time (aka. ascending rotary hunt group).
47         // R: use a round-robin search, starting at the next lowest channel than last
48         //    time (aka. descending rotary hunt group).
49         //
50         OUTBOUND-TRUNKMSD=1;                                    // MSD digits to strip (usually 1 or 0)
51         //OUTBOUND-TRUNK2=IAX2/user:pass@provider;
52 };
53
54 //
55 // Any category other than "General" and "Globals" represent
56 // extension contexts, which are collections of extensions.
57 //
58 // Extension names may be numbers, letters, or combinations
59 // thereof. If an extension name is prefixed by a '_'
60 // character, it is interpreted as a pattern rather than a
61 // literal.  In patterns, some characters have special meanings:
62 //
63 //   X - any digit from 0-9
64 //   Z - any digit from 1-9
65 //   N - any digit from 2-9
66 //   [1235-9] - any digit in the brackets (in this example, 1,2,3,5,6,7,8,9)
67 //   . - wildcard, matches anything remaining (e.g. _9011. matches
68 //      anything starting with 9011 excluding 9011 itself)
69 //   ! - wildcard, causes the matching process to complete as soon as
70 //       it can unambiguously determine that no other matches are possible
71 //
72 // For example the extension _NXXXXXX would match normal 7 digit dialings,
73 // while _1NXXNXXXXXX would represent an area code plus phone number
74 // preceded by a one.
75 //
76 // Each step of an extension is ordered by priority, which must
77 // always start with 1 to be considered a valid extension.  The priority
78 // "next" or "n" means the previous priority plus one, regardless of whether
79 // the previous priority was associated with the current extension or not.
80 // The priority "same" or "s" means the same as the previously specified
81 // priority, again regardless of whether the previous entry was for the
82 // same extension.  Priorities may be immediately followed by a plus sign
83 // and another integer to add that amount (most useful with 's' or 'n').
84 // Priorities may then also have an alias, or label, in
85 // parenthesis after their name which can be used in goto situations
86 //
87 // Contexts contain several lines, one for each step of each
88 // extension, which can take one of two forms as listed below,
89 // with the first form being preferred.  One may include another
90 // context in the current one as well, optionally with a
91 // date and time.  Included contexts are included in the order
92 // they are listed.
93 //
94 //context name {
95 //      exten-name => {
96 //              application(arg1,arg2,...);
97 //
98 //      Timing list for includes is
99 //
100 //   <time range>|<days of week>|<days of month>|<months>
101 //
102 //      includes {
103 //              daytime|9:00-17:00|mon-fri|*|*;
104 //      };
105 //
106 //      ignorepat can be used to instruct drivers to not cancel dialtone upon
107 //      receipt of a particular pattern.  The most commonly used example is
108 //      of course '9' like this:
109 //
110 //      ignorepat => 9;
111 //
112 //      so that dialtone remains even after dialing a 9.
113 //};
114
115
116 //
117 // Sample entries for extensions.conf
118 //
119 //
120 context ael-dundi-e164-canonical {
121         //
122         // List canonical entries here
123         //
124         // 12564286000 => &ael-std-exten(6000,IAX2/foo);
125         // _125642860XX => Dial(IAX2/otherbox/${EXTEN:7});
126 };
127
128 context ael-dundi-e164-customers {
129         //
130         // If you are an ITSP or Reseller, list your customers here.
131         //
132         //_12564286000 => Dial(SIP/customer1);
133         //_12564286001 => Dial(IAX2/customer2);
134 };
135
136 context ael-dundi-e164-via-pstn {
137         //
138         // If you are freely delivering calls to the PSTN, list them here
139         //
140         //_1256428XXXX => Dial(DAHDI/G2/${EXTEN:7}); // Expose all of 256-428
141         //_1256325XXXX => Dial(DAHDI/G2/${EXTEN:7}); // Ditto for 256-325
142 };
143
144 context ael-dundi-e164-local {
145         //
146         // Context to put your dundi IAX2 or SIP user in for
147         // full access
148         //
149         includes {
150          ael-dundi-e164-canonical;
151          ael-dundi-e164-customers;
152          ael-dundi-e164-via-pstn;
153         };
154 };
155
156 context ael-dundi-e164-switch {
157         //
158         // Just a wrapper for the switch
159         //
160
161         switches {
162                 DUNDi/e164;
163         };
164 };
165
166 context ael-dundi-e164-lookup {
167         //
168         // Locally to lookup, try looking for a local E.164 solution
169         // then try DUNDi if we don't have one.
170         //
171         includes {
172                 ael-dundi-e164-local;
173                 ael-dundi-e164-switch;
174         };
175         //
176 };
177
178 //
179 // DUNDi can also be implemented as a Macro instead of using
180 // the Local channel driver.
181 //
182 macro ael-dundi-e164(exten) {
183 //
184 // ARG1 is the extension to Dial
185 //
186         goto ${exten}|1;
187         return;
188 };
189
190 //
191 // Here are the entries you need to participate in the IAXTEL
192 // call routing system.  Most IAXTEL numbers begin with 1-700, but
193 // there are exceptions.  For more information, and to sign
194 // up, please go to www.gnophone.com or www.iaxtel.com
195 //
196 context ael-iaxtel700 {
197         _91700XXXXXXX => Dial(IAX2/${IAXINFO-AEL}@iaxtel.com/${EXTEN:1}@iaxtel);
198 };
199
200 //
201 // The SWITCH statement permits a server to share the dialplan with
202 // another server. Use with care: Reciprocal switch statements are not
203 // allowed (e.g. both A -> B and B -> A), and the switched server needs
204 // to be on-line or else dialing can be severly delayed.
205 //
206 context ael-iaxprovider {
207         switches {
208         // IAX2/user:[key]@myserver/mycontext;
209         };
210 };
211
212 context ael-trunkint {
213         //
214         // International long distance through trunk
215         //
216         includes {
217                 ael-dundi-e164-lookup;
218         };
219         _9011. => {
220                 &ael-dundi-e164(${EXTEN:4});
221                 Dial(${OUTBOUND-TRUNK}/${EXTEN:${OUTBOUND-TRUNKMSD}});
222         };
223 };
224
225 context ael-trunkld {
226         //
227         // Long distance context accessed through trunk
228         //
229         includes {
230                 ael-dundi-e164-lookup;
231         };
232         _91NXXNXXXXXX => {
233                 &ael-dundi-e164(${EXTEN:1});
234                 Dial(${OUTBOUND-TRUNK}/${EXTEN:${OUTBOUND-TRUNKMSD}});
235         };
236 };
237
238 context ael-trunklocal {
239         //
240         // Local seven-digit dialing accessed through trunk interface
241         //
242         _9NXXXXXX => {
243                 Dial(${OUTBOUND-TRUNK}/${EXTEN:${OUTBOUND-TRUNKMSD}});
244         };
245 };
246
247 context ael-trunktollfree {
248         //
249         // Long distance context accessed through trunk interface
250         //
251
252         _91800NXXXXXX => Dial(${OUTBOUND-TRUNK}/${EXTEN:${OUTBOUND-TRUNKMSD}});
253         _91888NXXXXXX => Dial(${OUTBOUND-TRUNK}/${EXTEN:${OUTBOUND-TRUNKMSD}});
254         _91877NXXXXXX => Dial(${OUTBOUND-TRUNK}/${EXTEN:${OUTBOUND-TRUNKMSD}});
255         _91866NXXXXXX => Dial(${OUTBOUND-TRUNK}/${EXTEN:${OUTBOUND-TRUNKMSD}});
256 };
257
258 context ael-international {
259         //
260         // Master context for international long distance
261         //
262         ignorepat => 9;
263         includes {
264                 ael-longdistance;
265                 ael-trunkint;
266         };
267 };
268
269 context ael-longdistance {
270         //
271         // Master context for long distance
272         //
273         ignorepat => 9;
274         includes {
275                 ael-local;
276                 ael-trunkld;
277         };
278 };
279
280 context ael-local {
281         //
282         // Master context for local, toll-free, and iaxtel calls only
283         //
284         ignorepat => 9;
285         includes {
286                 ael-default;
287                 ael-trunklocal;
288                 ael-iaxtel700;
289                 ael-trunktollfree;
290                 ael-iaxprovider;
291         };
292 };
293
294 //
295 // You can use an alternative switch type as well, to resolve
296 // extensions that are not known here, for example with remote
297 // IAX switching you transparently get access to the remote
298 // Asterisk PBX
299 //
300 // switch => IAX2/user:password@bigserver/local
301 //
302 // An "lswitch" is like a switch but is literal, in that
303 // variable substitution is not performed at load time
304 // but is passed to the switch directly (presumably to
305 // be substituted in the switch routine itself)
306 //
307 // lswitch => Loopback/12${EXTEN}@othercontext
308 //
309 // An "eswitch" is like a switch but the evaluation of
310 // variable substitution is performed at runtime before
311 // being passed to the switch routine.
312 //
313 // eswitch => IAX2/context@${CURSERVER}
314
315
316 macro ael-std-exten-ael( ext , dev ) {
317         Dial(${dev}/${ext},20);
318         switch(${DIALSTATUS}) {
319         case BUSY:
320                 Voicemail(${ext},b);
321                 break;
322         default:
323                 Voicemail(${ext},u);
324         };
325         catch a {
326                 VoiceMailMain(${ext});
327                 return;
328         };
329         return;
330 };
331
332 context ael-demo {
333         s => {
334                 Wait(1);
335                 Answer();
336                 Set(TIMEOUT(digit)=5);
337                 Set(TIMEOUT(response)=10);
338 restart:
339                 Background(demo-congrats);
340 instructions:
341                 for (x=0; ${x} < 3; x=${x} + 1) {
342                         Background(demo-instruct);
343                         WaitExten();
344                 };
345         };
346         2 => {
347                 Background(demo-moreinfo);
348                 goto s|instructions;
349         };
350         3 => {
351                 Set(LANGUAGE()=fr);
352                 goto s|restart;
353         };
354         1000 => {
355                 goto ael-default|s|1;
356         };
357         500 => {
358                 Playback(demo-abouttotry);
359                 Dial(IAX2/guest@misery.digium.com/s@default);
360                 Playback(demo-nogo);
361                 goto s|instructions;
362         };
363         600 => {
364                 Playback(demo-echotest);
365                 Echo();
366                 Playback(demo-echodone);
367                 goto s|instructions;
368         };
369         _1234 => &ael-std-exten-ael(${EXTEN}, "IAX2");
370         8500 => {
371                 VoicemailMain();
372                 goto s|instructions;
373         };
374         # => {
375                 Playback(demo-thanks);
376                 Hangup();
377         };
378         t => goto #|1;
379         i => Playback(invalid);
380 };
381
382
383 //
384 // If you wish to use AEL for your default context, remove it
385 // from extensions.conf (or change its name or comment it out)
386 // and then uncomment the one here.
387 //
388
389 context ael-default {
390
391 // By default we include the demo.  In a production system, you
392 // probably don't want to have the demo there.
393
394         includes {
395                 ael-demo;
396         };
397 //
398 // Extensions like the two below can be used for FWD, Nikotel, sipgate etc.
399 // Note that you must have a [sipprovider] section in sip.conf whereas
400 // the otherprovider.net example does not require such a peer definition
401 //
402 //_41X. => Dial(SIP/${EXTEN:2}@sipprovider,,r);
403 //_42X. => Dial(SIP/user:passwd@${EXTEN:2}@otherprovider.net,30,rT);
404
405 // Real extensions would go here. Generally you want real extensions to be
406 // 4 or 5 digits long (although there is no such requirement) and start with a
407 // single digit that is fairly large (like 6 or 7) so that you have plenty of
408 // room to overlap extensions and menu options without conflict.  You can alias
409 // them with names, too, and use global variables
410
411 // 6245  => {
412 //              hint(SIP/Grandstream1&SIP/Xlite1,Joe Schmoe); // Channel hints for presence
413 //              Dial(SIP/Grandstream1,20,rt);                 // permit transfer
414 //        Dial(${HINT}/5245},20,rtT);                    // Use hint as listed
415 //        switch(${DIALSTATUS}) {
416 //        case BUSY:
417 //                Voicemail(6245,b);
418 //                              return;
419 //        default:
420 //                Voicemail(6245,u);
421 //                              return;
422 //        };
423 //       };
424
425 // 6361 => Dial(IAX2/JaneDoe,,rm);                // ring without time limit
426 // 6389 => Dial(MGCP/aaln/1@192.168.0.14);
427 // 6394 => Dial(Local/6275/n);                    // this will dial ${MARK}
428
429 // 6275 => &ael-stdexten(6275,${MARK});           // assuming ${MARK} is something like DAHDI/2
430 // mark => goto 6275|1;                          // alias mark to 6275
431 // 6536 => &ael-stdexten(6236,${WIL});            // Ditto for wil
432 // wil  => goto 6236|1;
433 //
434 // Some other handy things are an extension for checking voicemail via
435 // voicemailmain
436 //
437 // 8500 => {
438 //                      VoicemailMain();
439 //                      Hangup();
440 //             };
441 //
442 // Or a conference room (you'll need to edit meetme.conf to enable this room)
443 //
444 // 8600 => Meetme(1234);
445 //
446 // Or playing an announcement to the called party, as soon it answers
447 //
448 // 8700 => Dial(${MARK},30,A(/path/to/my/announcemsg))
449 //
450 // For more information on applications, just type "show applications" at your
451 // friendly Asterisk CLI prompt.
452 //
453 // 'show application <command>' will show details of how you
454 // use that particular application in this file, the dial plan.
455 //
456 }