|
1 ; extensions.conf - the Asterisk dial plan |
|
2 ; |
|
3 ; Static extension configuration file, used by |
|
4 ; the pbx_config module. This is where you configure all your |
|
5 ; inbound and outbound calls in Asterisk. |
|
6 ; |
|
7 ; This configuration file is reloaded |
|
8 ; - With the "dialplan reload" command in the CLI |
|
9 ; - With the "reload" command (that reloads everything) in the CLI |
|
10 |
|
11 ; |
|
12 ; The "General" category is for certain variables. |
|
13 ; |
|
14 ;[general] |
|
15 ; |
|
16 ; If static is set to no, or omitted, then the pbx_config will rewrite |
|
17 ; this file when extensions are modified. Remember that all comments |
|
18 ; made in the file will be lost when that happens. |
|
19 ; |
|
20 ; XXX Not yet implemented XXX |
|
21 ; |
|
22 ;static=yes |
|
23 ; |
|
24 ; if static=yes and writeprotect=no, you can save dialplan by |
|
25 ; CLI command "dialplan save" too |
|
26 ; |
|
27 ;writeprotect=no |
|
28 ; |
|
29 ; If autofallthrough is set, then if an extension runs out of |
|
30 ; things to do, it will terminate the call with BUSY, CONGESTION |
|
31 ; or HANGUP depending on Asterisk's best guess. This is the default. |
|
32 ; |
|
33 ; If autofallthrough is not set, then if an extension runs out of |
|
34 ; things to do, Asterisk will wait for a new extension to be dialed |
|
35 ; (this is the original behavior of Asterisk 1.0 and earlier). |
|
36 ; |
|
37 ;autofallthrough=no |
|
38 ; |
|
39 ; If clearglobalvars is set, global variables will be cleared |
|
40 ; and reparsed on an extensions reload, or Asterisk reload. |
|
41 ; |
|
42 ; If clearglobalvars is not set, then global variables will persist |
|
43 ; through reloads, and even if deleted from the extensions.conf or |
|
44 ; one of its included files, will remain set to the previous value. |
|
45 ; |
|
46 ; NOTE: A complication sets in, if you put your global variables into |
|
47 ; the AEL file, instead of the extensions.conf file. With clearglobalvars |
|
48 ; set, a "reload" will often leave the globals vars cleared, because it |
|
49 ; is not unusual to have extensions.conf (which will have no globals) |
|
50 ; load after the extensions.ael file (where the global vars are stored). |
|
51 ; So, with "reload" in this particular situation, first the AEL file will |
|
52 ; clear and then set all the global vars, then, later, when the extensions.conf |
|
53 ; file is loaded, the global vars are all cleared, and then not set, because |
|
54 ; they are not stored in the extensions.conf file. |
|
55 ; |
|
56 ;clearglobalvars=no |
|
57 ; |
|
58 ; If priorityjumping is set to 'yes', then applications that support |
|
59 ; 'jumping' to a different priority based on the result of their operations |
|
60 ; will do so (this is backwards compatible behavior with pre-1.2 releases |
|
61 ; of Asterisk). Individual applications can also be requested to do this |
|
62 ; by passing a 'j' option in their arguments. |
|
63 ; |
|
64 ;priorityjumping=yes |
|
65 ; |
|
66 ; User context is where entries from users.conf are registered. The |
|
67 ; default value is 'default' |
|
68 ; |
|
69 ;userscontext=default |
|
70 ; |
|
71 ; You can include other config files, use the #include command |
|
72 ; (without the ';'). Note that this is different from the "include" command |
|
73 ; that includes contexts within other contexts. The #include command works |
|
74 ; in all asterisk configuration files. |
|
75 ;#include "filename.conf" |
|
76 |
|
77 ; The "Globals" category contains global variables that can be referenced |
|
78 ; in the dialplan with the GLOBAL dialplan function: |
|
79 ; ${GLOBAL(VARIABLE)} |
|
80 ; ${${GLOBAL(VARIABLE)}} or ${text${GLOBAL(VARIABLE)}} or any hybrid |
|
81 ; Unix/Linux environmental variables can be reached with the ENV dialplan |
|
82 ; function: ${ENV(VARIABLE)} |
|
83 ; |
|
84 ;[globals] |
|
85 ;CONSOLE=Console/dsp ; Console interface for demo |
|
86 ;CONSOLE=Zap/1 |
|
87 ;CONSOLE=Phone/phone0 |
|
88 ;IAXINFO=guest ; IAXtel username/password |
|
89 ;IAXINFO=myuser:mypass |
|
90 ;TRUNK=Zap/G2 ; Trunk interface |
|
91 ; |
|
92 ; Note the 'G2' in the TRUNK variable above. It specifies which group (defined |
|
93 ; in zapata.conf) to dial, i.e. group 2, and how to choose a channel to use in |
|
94 ; the specified group. The four possible options are: |
|
95 ; |
|
96 ; g: select the lowest-numbered non-busy Zap channel |
|
97 ; (aka. ascending sequential hunt group). |
|
98 ; G: select the highest-numbered non-busy Zap channel |
|
99 ; (aka. descending sequential hunt group). |
|
100 ; r: use a round-robin search, starting at the next highest channel than last |
|
101 ; time (aka. ascending rotary hunt group). |
|
102 ; R: use a round-robin search, starting at the next lowest channel than last |
|
103 ; time (aka. descending rotary hunt group). |
|
104 ; |
|
105 ;TRUNKMSD=1 ; MSD digits to strip (usually 1 or 0) |
|
106 ;TRUNK=IAX2/user:pass@provider |
|
107 |
|
108 ; |
|
109 ; Any category other than "General" and "Globals" represent |
|
110 ; extension contexts, which are collections of extensions. |
|
111 ; |
|
112 ; Extension names may be numbers, letters, or combinations |
|
113 ; thereof. If an extension name is prefixed by a '_' |
|
114 ; character, it is interpreted as a pattern rather than a |
|
115 ; literal. In patterns, some characters have special meanings: |
|
116 ; |
|
117 ; X - any digit from 0-9 |
|
118 ; Z - any digit from 1-9 |
|
119 ; N - any digit from 2-9 |
|
120 ; [1235-9] - any digit in the brackets (in this example, 1,2,3,5,6,7,8,9) |
|
121 ; . - wildcard, matches anything remaining (e.g. _9011. matches |
|
122 ; anything starting with 9011 excluding 9011 itself) |
|
123 ; ! - wildcard, causes the matching process to complete as soon as |
|
124 ; it can unambiguously determine that no other matches are possible |
|
125 ; |
|
126 ; For example the extension _NXXXXXX would match normal 7 digit dialings, |
|
127 ; while _1NXXNXXXXXX would represent an area code plus phone number |
|
128 ; preceded by a one. |
|
129 ; |
|
130 ; Each step of an extension is ordered by priority, which must |
|
131 ; always start with 1 to be considered a valid extension. The priority |
|
132 ; "next" or "n" means the previous priority plus one, regardless of whether |
|
133 ; the previous priority was associated with the current extension or not. |
|
134 ; The priority "same" or "s" means the same as the previously specified |
|
135 ; priority, again regardless of whether the previous entry was for the |
|
136 ; same extension. Priorities may be immediately followed by a plus sign |
|
137 ; and another integer to add that amount (most useful with 's' or 'n'). |
|
138 ; Priorities may then also have an alias, or label, in |
|
139 ; parenthesis after their name which can be used in goto situations |
|
140 ; |
|
141 ; Contexts contain several lines, one for each step of each |
|
142 ; extension, which can take one of two forms as listed below, |
|
143 ; with the first form being preferred. |
|
144 ; |
|
145 ;[context] |
|
146 ;exten => someexten,{priority|label{+|-}offset}[(alias)],application(arg1,arg2,...) |
|
147 ;exten => someexten,{priority|label{+|-}offset}[(alias)],application,arg1|arg2... |
|
148 ; |
|
149 ; Included Contexts |
|
150 ; |
|
151 ; One may include another context in the current one as well, optionally with a |
|
152 ; date and time. Included contexts are included in the order |
|
153 ; they are listed. |
|
154 ; The reason a context would include other contexts is for their |
|
155 ; extensions. |
|
156 ; The algorithm to find an extension is recursive, and works in this |
|
157 ; fashion: |
|
158 ; first, given a stack on which to store context references, |
|
159 ; push the context to find the extension onto the stack... |
|
160 ; a) Try to find a matching extension in the context at the top of |
|
161 ; the stack, and, if found, begin executing the priorities |
|
162 ; there in sequence. |
|
163 ; b) If not found, Search the switches, if any declared, in |
|
164 ; sequence. |
|
165 ; c) If still not found, for each include, push that context onto |
|
166 ; the top of the context stack, and recurse to a). |
|
167 ; d) If still not found, pop the entry from the top of the stack; |
|
168 ; if the stack is empty, the search has failed. If it's not, |
|
169 ; continue with the next context in c). |
|
170 ; This is a depth-first traversal, and stops with the first context |
|
171 ; that provides a matching extension. As usual, if more than one |
|
172 ; pattern in a context will match, the 'best' match will win. |
|
173 ; Please note that that extensions found in an included context are |
|
174 ; treated as if they were in the context from which the search began. |
|
175 ; The PBX's notion of the "current context" is not changed. |
|
176 ; Please note that in a context, it does not matter where an include |
|
177 ; directive occurs. Whether at the top, or near the bottom, the effect |
|
178 ; will be the same. The only thing that matters is that if there is |
|
179 ; more than one include directive, they will be searched for extensions |
|
180 ; in order, first to last. |
|
181 ; Also please note that pattern matches (like _9XX) are not treated |
|
182 ; any differently than exact matches (like 987). Also note that the |
|
183 ; order of extensions in a context have no affect on the outcome. |
|
184 ; |
|
185 ; Timing list for includes is |
|
186 ; |
|
187 ; <time range>|<days of week>|<days of month>|<months> |
|
188 ; |
|
189 ; Note that ranges may be specified to wrap around the ends. Also, minutes are |
|
190 ; fine-grained only down to the closest even minute. |
|
191 ; |
|
192 ;include => daytime|9:00-17:00|mon-fri|*|* |
|
193 ;include => weekend|*|sat-sun|*|* |
|
194 ;include => weeknights|17:02-8:58|mon-fri|*|* |
|
195 ; |
|
196 ; ignorepat can be used to instruct drivers to not cancel dialtone upon |
|
197 ; receipt of a particular pattern. The most commonly used example is |
|
198 ; of course '9' like this: |
|
199 ; |
|
200 ;ignorepat => 9 |
|
201 ; |
|
202 ; so that dialtone remains even after dialing a 9. |
|
203 ; |
|
204 |
|
205 ; |
|
206 ; Sample entries for extensions.conf |
|
207 ; |
|
208 ; |
|
209 ;[dundi-e164-canonical] |
|
210 ; |
|
211 ; List canonical entries here |
|
212 ; |
|
213 ;exten => 12564286000,1,Macro(stdexten,6000,IAX2/foo) |
|
214 ;exten => _125642860XX,1,Dial(IAX2/otherbox/${EXTEN:7}) |
|
215 |
|
216 ;[dundi-e164-customers] |
|
217 ; |
|
218 ; If you are an ITSP or Reseller, list your customers here. |
|
219 ; |
|
220 ;exten => _12564286000,1,Dial(SIP/customer1) |
|
221 ;exten => _12564286001,1,Dial(IAX2/customer2) |
|
222 |
|
223 ;[dundi-e164-via-pstn] |
|
224 ; |
|
225 ; If you are freely delivering calls to the PSTN, list them here |
|
226 ; |
|
227 ;exten => _1256428XXXX,1,Dial(Zap/G2/${EXTEN:7}) ; Expose all of 256-428 |
|
228 ;exten => _1256325XXXX,1,Dial(Zap/G2/${EXTEN:7}) ; Ditto for 256-325 |
|
229 |
|
230 ;[dundi-e164-local] |
|
231 ; |
|
232 ; Context to put your dundi IAX2 or SIP user in for |
|
233 ; full access |
|
234 ; |
|
235 ;include => dundi-e164-canonical |
|
236 ;include => dundi-e164-customers |
|
237 ;include => dundi-e164-via-pstn |
|
238 |
|
239 ;[dundi-e164-switch] |
|
240 ; |
|
241 ; Just a wrapper for the switch |
|
242 ; |
|
243 ;switch => DUNDi/e164 |
|
244 |
|
245 ;[dundi-e164-lookup] |
|
246 ; |
|
247 ; Locally to lookup, try looking for a local E.164 solution |
|
248 ; then try DUNDi if we don't have one. |
|
249 ; |
|
250 ;include => dundi-e164-local |
|
251 ;include => dundi-e164-switch |
|
252 ; |
|
253 ; DUNDi can also be implemented as a Macro instead of using |
|
254 ; the Local channel driver. |
|
255 ; |
|
256 ;[macro-dundi-e164] |
|
257 ; |
|
258 ; ARG1 is the extension to Dial |
|
259 ; |
|
260 ; Extension "s" is not a wildcard extension that matches "anything". |
|
261 ; In macros, it is the start extension. In most other cases, |
|
262 ; you have to goto "s" to execute that extension. |
|
263 ; |
|
264 ; For wildcard matches, see above - all pattern matches start with |
|
265 ; an underscore. |
|
266 ;exten => s,1,Goto(${ARG1},1) |
|
267 ;include => dundi-e164-lookup |
|
268 |
|
269 ; |
|
270 ; Here are the entries you need to participate in the IAXTEL |
|
271 ; call routing system. Most IAXTEL numbers begin with 1-700, but |
|
272 ; there are exceptions. For more information, and to sign |
|
273 ; up, please go to www.gnophone.com or www.iaxtel.com |
|
274 ; |
|
275 ;[iaxtel700] |
|
276 ;exten => _91700XXXXXXX,1,Dial(IAX2/${GLOBAL(IAXINFO)}@iaxtel.com/${EXTEN:1}@iaxtel) |
|
277 |
|
278 ; |
|
279 ; The SWITCH statement permits a server to share the dialplan with |
|
280 ; another server. Use with care: Reciprocal switch statements are not |
|
281 ; allowed (e.g. both A -> B and B -> A), and the switched server needs |
|
282 ; to be on-line or else dialing can be severly delayed. |
|
283 ; |
|
284 ;[iaxprovider] |
|
285 ;switch => IAX2/user:[key]@myserver/mycontext |
|
286 |
|
287 ;[trunkint] |
|
288 ; |
|
289 ; International long distance through trunk |
|
290 ; |
|
291 ;exten => _9011.,1,Macro(dundi-e164,${EXTEN:4}) |
|
292 ;exten => _9011.,n,Dial(${GLOBAL(TRUNK)}/${EXTEN:${GLOBAL(TRUNKMSD)}}) |
|
293 |
|
294 ;[trunkld] |
|
295 ; |
|
296 ; Long distance context accessed through trunk |
|
297 ; |
|
298 ;exten => _91NXXNXXXXXX,1,Macro(dundi-e164,${EXTEN:1}) |
|
299 ;exten => _91NXXNXXXXXX,n,Dial(${GLOBAL(TRUNK)}/${EXTEN:${GLOBAL(TRUNKMSD)}}) |
|
300 |
|
301 ;[trunklocal] |
|
302 ; |
|
303 ; Local seven-digit dialing accessed through trunk interface |
|
304 ; |
|
305 ;exten => _9NXXXXXX,1,Dial(${GLOBAL(TRUNK)}/${EXTEN:${GLOBAL(TRUNKMSD)}}) |
|
306 |
|
307 ;[trunktollfree] |
|
308 ; |
|
309 ; Long distance context accessed through trunk interface |
|
310 ; |
|
311 ;exten => _91800NXXXXXX,1,Dial(${GLOBAL(TRUNK)}/${EXTEN:${GLOBAL(TRUNKMSD)}}) |
|
312 ;exten => _91888NXXXXXX,1,Dial(${GLOBAL(TRUNK)}/${EXTEN:${GLOBAL(TRUNKMSD)}}) |
|
313 ;exten => _91877NXXXXXX,1,Dial(${GLOBAL(TRUNK)}/${EXTEN:${GLOBAL(TRUNKMSD)}}) |
|
314 ;exten => _91866NXXXXXX,1,Dial(${GLOBAL(TRUNK)}/${EXTEN:${GLOBAL(TRUNKMSD)}}) |
|
315 |
|
316 ;[international] |
|
317 ; |
|
318 ; Master context for international long distance |
|
319 ; |
|
320 ;ignorepat => 9 |
|
321 ;include => longdistance |
|
322 ;include => trunkint |
|
323 |
|
324 ;[longdistance] |
|
325 ; |
|
326 ; Master context for long distance |
|
327 ; |
|
328 ;ignorepat => 9 |
|
329 ;include => local |
|
330 ;include => trunkld |
|
331 |
|
332 ;[local] |
|
333 ; |
|
334 ; Master context for local, toll-free, and iaxtel calls only |
|
335 ; |
|
336 ;ignorepat => 9 |
|
337 ;include => default |
|
338 ;include => trunklocal |
|
339 ;include => iaxtel700 |
|
340 ;include => trunktollfree |
|
341 ;include => iaxprovider |
|
342 |
|
343 ;Include parkedcalls (or the context you define in features conf) |
|
344 ;to enable call parking. |
|
345 ;include => parkedcalls |
|
346 ; |
|
347 ; You can use an alternative switch type as well, to resolve |
|
348 ; extensions that are not known here, for example with remote |
|
349 ; IAX switching you transparently get access to the remote |
|
350 ; Asterisk PBX |
|
351 ; |
|
352 ; switch => IAX2/user:password@bigserver/local |
|
353 ; |
|
354 ; An "lswitch" is like a switch but is literal, in that |
|
355 ; variable substitution is not performed at load time |
|
356 ; but is passed to the switch directly (presumably to |
|
357 ; be substituted in the switch routine itself) |
|
358 ; |
|
359 ; lswitch => Loopback/12${EXTEN}@othercontext |
|
360 ; |
|
361 ; An "eswitch" is like a switch but the evaluation of |
|
362 ; variable substitution is performed at runtime before |
|
363 ; being passed to the switch routine. |
|
364 ; |
|
365 ; eswitch => IAX2/context@${CURSERVER} |
|
366 |
|
367 ;[macro-trunkdial] |
|
368 ; |
|
369 ; Standard trunk dial macro (hangs up on a dialstatus that should |
|
370 ; terminate call) |
|
371 ; ${ARG1} - What to dial |
|
372 ; |
|
373 ;exten => s,1,Dial(${ARG1}) |
|
374 ;exten => s,n,Goto(s-${DIALSTATUS},1) |
|
375 ;exten => s-NOANSWER,1,Hangup |
|
376 ;exten => s-BUSY,1,Hangup |
|
377 ;exten => _s-.,1,NoOp |
|
378 |
|
379 ;[macro-stdexten]; |
|
380 ; |
|
381 ; Standard extension macro: |
|
382 ; ${ARG1} - Extension (we could have used ${MACRO_EXTEN} here as well |
|
383 ; ${ARG2} - Device(s) to ring |
|
384 ; |
|
385 ;exten => s,1,Dial(${ARG2},20) ; Ring the interface, 20 seconds maximum |
|
386 ;exten => s,2,Goto(s-${DIALSTATUS},1) ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER) |
|
387 |
|
388 ;exten => s-NOANSWER,1,Voicemail(${ARG1},u) ; If unavailable, send to voicemail w/ unavail announce |
|
389 ;exten => s-NOANSWER,2,Goto(default,s,1) ; If they press #, return to start |
|
390 |
|
391 ;exten => s-BUSY,1,Voicemail(${ARG1},b) ; If busy, send to voicemail w/ busy announce |
|
392 ;exten => s-BUSY,2,Goto(default,s,1) ; If they press #, return to start |
|
393 |
|
394 ;exten => _s-.,1,Goto(s-NOANSWER,1) ; Treat anything else as no answer |
|
395 |
|
396 ;exten => a,1,VoicemailMain(${ARG1}) ; If they press *, send the user into VoicemailMain |
|
397 |
|
398 ;[macro-stdPrivacyexten]; |
|
399 ; |
|
400 ; Standard extension macro: |
|
401 ; ${ARG1} - Extension (we could have used ${MACRO_EXTEN} here as well |
|
402 ; ${ARG2} - Device(s) to ring |
|
403 ; ${ARG3} - Optional DONTCALL context name to jump to (assumes the s,1 extension-priority) |
|
404 ; ${ARG4} - Optional TORTURE context name to jump to (assumes the s,1 extension-priority)` |
|
405 ; |
|
406 ;exten => s,1,Dial(${ARG2},20|p) ; Ring the interface, 20 seconds maximum, call screening |
|
407 ; option (or use P for databased call screening) |
|
408 ;exten => s,2,Goto(s-${DIALSTATUS},1) ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER) |
|
409 |
|
410 ;exten => s-NOANSWER,1,Voicemail(${ARG1},u) ; If unavailable, send to voicemail w/ unavail announce |
|
411 ;exten => s-NOANSWER,2,Goto(default,s,1) ; If they press #, return to start |
|
412 |
|
413 ;exten => s-BUSY,1,Voicemail(${ARG1},b) ; If busy, send to voicemail w/ busy announce |
|
414 ;exten => s-BUSY,2,Goto(default,s,1) ; If they press #, return to start |
|
415 |
|
416 ;exten => s-DONTCALL,1,Goto(${ARG3},s,1) ; Callee chose to send this call to a polite "Don't call again" script. |
|
417 |
|
418 ;exten => s-TORTURE,1,Goto(${ARG4},s,1) ; Callee chose to send this call to a telemarketer torture script. |
|
419 |
|
420 ;exten => _s-.,1,Goto(s-NOANSWER,1) ; Treat anything else as no answer |
|
421 |
|
422 ;exten => a,1,VoicemailMain(${ARG1}) ; If they press *, send the user into VoicemailMain |
|
423 |
|
424 ;[macro-page]; |
|
425 ; |
|
426 ; Paging macro: |
|
427 ; |
|
428 ; Check to see if SIP device is in use and DO NOT PAGE if they are |
|
429 ; |
|
430 ; ${ARG1} - Device to page |
|
431 |
|
432 ;exten => s,1,ChanIsAvail(${ARG1}|js) ; j is for Jump and s is for ANY call |
|
433 ;exten => s,n,GoToIf([${AVAILSTATUS} = "1"]?autoanswer:fail) |
|
434 ;exten => s,n(autoanswer),Set(_ALERT_INFO="RA") ; This is for the PolyComs |
|
435 ;exten => s,n,SIPAddHeader(Call-Info: Answer-After=0) ; This is for the Grandstream, Snoms, and Others |
|
436 ;exten => s,n,NoOp() ; Add others here and Post on the Wiki!!!! |
|
437 ;exten => s,n,Dial(${ARG1}||) |
|
438 ;exten => s,n(fail),Hangup |
|
439 |
|
440 |
|
441 ;[demo] |
|
442 ; |
|
443 ; We start with what to do when a call first comes in. |
|
444 ; |
|
445 ;exten => s,1,Wait(1) ; Wait a second, just for fun |
|
446 ;exten => s,n,Answer ; Answer the line |
|
447 ;exten => s,n,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds |
|
448 ;exten => s,n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 seconds |
|
449 ;exten => s,n(restart),BackGround(demo-congrats) ; Play a congratulatory message |
|
450 ;exten => s,n(instruct),BackGround(demo-instruct) ; Play some instructions |
|
451 ;exten => s,n,WaitExten ; Wait for an extension to be dialed. |
|
452 |
|
453 ;exten => 2,1,BackGround(demo-moreinfo) ; Give some more information. |
|
454 ;exten => 2,n,Goto(s,instruct) |
|
455 |
|
456 ;exten => 3,1,Set(LANGUAGE()=fr) ; Set language to french |
|
457 ;exten => 3,n,Goto(s,restart) ; Start with the congratulations |
|
458 |
|
459 ;exten => 1000,1,Goto(default,s,1) |
|
460 ; |
|
461 ; We also create an example user, 1234, who is on the console and has |
|
462 ; voicemail, etc. |
|
463 ; |
|
464 ;exten => 1234,1,Playback(transfer,skip) ; "Please hold while..." |
|
465 ; (but skip if channel is not up) |
|
466 ;exten => 1234,n,Macro(stdexten,1234,${GLOBAL(CONSOLE)}) |
|
467 |
|
468 ;exten => 1235,1,Voicemail(1234,u) ; Right to voicemail |
|
469 |
|
470 ;exten => 1236,1,Dial(Console/dsp) ; Ring forever |
|
471 ;exten => 1236,n,Voicemail(1234,b) ; Unless busy |
|
472 |
|
473 ; |
|
474 ; # for when they're done with the demo |
|
475 ; |
|
476 ;exten => #,1,Playback(demo-thanks) ; "Thanks for trying the demo" |
|
477 ;exten => #,n,Hangup ; Hang them up. |
|
478 |
|
479 ; |
|
480 ; A timeout and "invalid extension rule" |
|
481 ; |
|
482 ;exten => t,1,Goto(#,1) ; If they take too long, give up |
|
483 ;exten => i,1,Playback(invalid) ; "That's not valid, try again" |
|
484 |
|
485 ; |
|
486 ; Create an extension, 500, for dialing the |
|
487 ; Asterisk demo. |
|
488 ; |
|
489 ;exten => 500,1,Playback(demo-abouttotry); Let them know what's going on |
|
490 ;exten => 500,n,Dial(IAX2/guest@pbx.digium.com/s@default) ; Call the Asterisk demo |
|
491 ;exten => 500,n,Playback(demo-nogo) ; Couldn't connect to the demo site |
|
492 ;exten => 500,n,Goto(s,6) ; Return to the start over message. |
|
493 |
|
494 ; |
|
495 ; Create an extension, 600, for evaluating echo latency. |
|
496 ; |
|
497 ;exten => 600,1,Playback(demo-echotest) ; Let them know what's going on |
|
498 ;exten => 600,n,Echo ; Do the echo test |
|
499 ;exten => 600,n,Playback(demo-echodone) ; Let them know it's over |
|
500 ;exten => 600,n,Goto(s,6) ; Start over |
|
501 |
|
502 ; |
|
503 ; You can use the Macro Page to intercom a individual user |
|
504 ;exten => 76245,1,Macro(page,SIP/Grandstream1) |
|
505 ; or if your peernames are the same as extensions |
|
506 ;exten => _7XXX,1,Macro(page,SIP/${EXTEN}) |
|
507 ; |
|
508 ; |
|
509 ; System Wide Page at extension 7999 |
|
510 ; |
|
511 ;exten => 7999,1,Set(TIMEOUT(absolute)=60) |
|
512 ;exten => 7999,2,Page(Local/Grandstream1@page&Local/Xlite1@page&Local/1234@page/n|d) |
|
513 |
|
514 ; Give voicemail at extension 8500 |
|
515 ; |
|
516 ;exten => 8500,1,VoicemailMain |
|
517 ;exten => 8500,n,Goto(s,6) |
|
518 ; |
|
519 ; Here's what a phone entry would look like (IXJ for example) |
|
520 ; |
|
521 ;exten => 1265,1,Dial(Phone/phone0,15) |
|
522 ;exten => 1265,n,Goto(s,5) |
|
523 |
|
524 ; |
|
525 ; The page context calls up the page macro that sets variables needed for auto-answer |
|
526 ; It is in is own context to make calling it from the Page() application as simple as |
|
527 ; Local/{peername}@page |
|
528 ; |
|
529 ;[page] |
|
530 ;exten => _X.,1,Macro(page,SIP/${EXTEN}) |
|
531 |
|
532 ;[mainmenu] |
|
533 ; |
|
534 ; Example "main menu" context with submenu |
|
535 ; |
|
536 ;exten => s,1,Answer |
|
537 ;exten => s,n,Background(thanks) ; "Thanks for calling press 1 for sales, 2 for support, ..." |
|
538 ;exten => s,n,WaitExten |
|
539 ;exten => 1,1,Goto(submenu,s,1) |
|
540 ;exten => 2,1,Hangup |
|
541 ;include => default |
|
542 ; |
|
543 ;[submenu] |
|
544 ;exten => s,1,Ringing ; Make them comfortable with 2 seconds of ringback |
|
545 ;exten => s,n,Wait,2 |
|
546 ;exten => s,n,Background(submenuopts) ; "Thanks for calling the sales department. Press 1 for steve, 2 for..." |
|
547 ;exten => s,n,WaitExten |
|
548 ;exten => 1,1,Goto(default,steve,1) |
|
549 ;exten => 2,1,Goto(default,mark,2) |
|
550 |
|
551 ;[default] |
|
552 ; |
|
553 ; By default we include the demo. In a production system, you |
|
554 ; probably don't want to have the demo there. |
|
555 ; |
|
556 ;include => demo |
|
557 |
|
558 ; |
|
559 ; An extension like the one below can be used for FWD, Nikotel, sipgate etc. |
|
560 ; Note that you must have a [sipprovider] section in sip.conf |
|
561 ; |
|
562 ;exten => _41X.,1,Dial(SIP/${EXTEN:2}@sipprovider,,r) |
|
563 |
|
564 ; Real extensions would go here. Generally you want real extensions to be |
|
565 ; 4 or 5 digits long (although there is no such requirement) and start with a |
|
566 ; single digit that is fairly large (like 6 or 7) so that you have plenty of |
|
567 ; room to overlap extensions and menu options without conflict. You can alias |
|
568 ; them with names, too, and use global variables |
|
569 |
|
570 ;exten => 6245,hint,SIP/Grandstream1&SIP/Xlite1,Joe Schmoe ; Channel hints for presence |
|
571 ;exten => 6245,1,Dial(SIP/Grandstream1,20,rt) ; permit transfer |
|
572 ;exten => 6245,n(dial),Dial(${HINT},20,rtT) ; Use hint as listed |
|
573 ;exten => 6245,n,Voicemail(6245,u) ; Voicemail (unavailable) |
|
574 ;exten => 6245,s+1,Hangup ; s+1, same as n |
|
575 ;exten => 6245,dial+101,Voicemail(6245,b) ; Voicemail (busy) |
|
576 ;exten => 6361,1,Dial(IAX2/JaneDoe,,rm) ; ring without time limit |
|
577 ;exten => 6389,1,Dial(MGCP/aaln/1@192.168.0.14) |
|
578 ;exten => 6390,1,Dial(JINGLE/caller/callee) ; Dial via jingle using labels |
|
579 ;exten => 6391,1,Dial(JINGLE/asterisk@digium.com/mogorman@astjab.org) ;Dial via jingle using asterisk as the transport and calling mogorman. |
|
580 ;exten => 6394,1,Dial(Local/6275/n) ; this will dial ${MARK} |
|
581 |
|
582 ;exten => 6275,1,Macro(stdexten,6275,${MARK}) ; assuming ${MARK} is something like Zap/2 |
|
583 ;exten => mark,1,Goto(6275|1) ; alias mark to 6275 |
|
584 ;exten => 6536,1,Macro(stdexten,6236,${WIL}) ; Ditto for wil |
|
585 ;exten => wil,1,Goto(6236|1) |
|
586 |
|
587 ;If you want to subscribe to the status of a parking space, this is |
|
588 ;how you do it. Subscribe to extension 6600 in sip, and you will see |
|
589 ;the status of the first parking lot with this extensions' help |
|
590 ;exten => 6600,hint,park:701@parkedcalls |
|
591 ;exten => 6600,1,noop |
|
592 ; |
|
593 ; Some other handy things are an extension for checking voicemail via |
|
594 ; voicemailmain |
|
595 ; |
|
596 ;exten => 8500,1,VoicemailMain |
|
597 ;exten => 8500,n,Hangup |
|
598 ; |
|
599 ; Or a conference room (you'll need to edit meetme.conf to enable this room) |
|
600 ; |
|
601 ;exten => 8600,1,Meetme(1234) |
|
602 ; |
|
603 ; Or playing an announcement to the called party, as soon it answers |
|
604 ; |
|
605 ;exten = 8700,1,Dial(${MARK},30,A(/path/to/my/announcemsg)) |
|
606 ; |
|
607 ; For more information on applications, just type "core show applications" at your |
|
608 ; friendly Asterisk CLI prompt. |
|
609 ; |
|
610 ; "core show application <command>" will show details of how you |
|
611 ; use that particular application in this file, the dial plan. |
|
612 ; "core show functions" will list all dialplan functions |
|
613 ; "core show function <COMMAND>" will show you more information about |
|
614 ; one function. Remember that function names are UPPER CASE. |