rtp_engine: allocate RTP dynamic payloads per session
[asterisk/asterisk.git] / configs / samples / extensions.lua.sample
1
2
3 CONSOLE = "Console/dsp" -- Console interface for demo
4 --CONSOLE = "DAHDI/1"
5 --CONSOLE = "Phone/phone0"
6
7 IAXINFO = "guest"       -- IAXtel username/password
8 --IAXINFO = "myuser:mypass"
9
10 TRUNK = "DAHDI/G2"
11 TRUNKMSD = 1
12 -- TRUNK = "IAX2/user:pass@provider"
13
14
15 --
16 -- Extensions are expected to be defined in a global table named 'extensions'.
17 -- The 'extensions' table should have a group of tables in it, each
18 -- representing a context.  Extensions are defined in each context.  See below
19 -- for examples.
20 --
21 -- Extension names may be numbers, letters, or combinations thereof. If
22 -- an extension name is prefixed by a '_' character, it is interpreted as
23 -- a pattern rather than a literal.  In patterns, some characters have
24 -- special meanings:
25 --
26 --   X - any digit from 0-9
27 --   Z - any digit from 1-9
28 --   N - any digit from 2-9
29 --   [1235-9] - any digit in the brackets (in this example, 1,2,3,5,6,7,8,9)
30 --   . - wildcard, matches anything remaining (e.g. _9011. matches
31 --       anything starting with 9011 excluding 9011 itself)
32 --   ! - wildcard, causes the matching process to complete as soon as
33 --       it can unambiguously determine that no other matches are possible
34 --
35 -- For example the extension _NXXXXXX would match normal 7 digit
36 -- dialings, while _1NXXNXXXXXX would represent an area code plus phone
37 -- number preceded by a one.
38 --
39 -- If your extension has special characters in it such as '.' and '!' you must
40 -- explicitly make it a string in the tabale definition:
41 --
42 --   ["_special."] = function;
43 --   ["_special!"] = function;
44 --
45 -- There are no priorities.  All extensions to asterisk appear to have a single
46 -- priority as if they consist of a single priority.
47 --
48 -- Each context is defined as a table in the extensions table.  The
49 -- context names should be strings.
50 --
51 -- One context may be included in another context using the 'includes'
52 -- extension.  This extension should be set to a table containing a list
53 -- of context names.  Do not put references to tables in the includes
54 -- table.
55 --
56 --   include = {"a", "b", "c"};
57 --
58 -- Channel variables can be accessed thorugh the global 'channel' table.
59 --
60 --   v = channel.var_name
61 --   v = channel["var_name"]
62 --   v.value
63 --   v:get()
64 --
65 --   channel.var_name = "value"
66 --   channel["var_name"] = "value"
67 --   v:set("value")
68 --
69 --   channel.func_name(1,2,3):set("value")
70 --   value = channel.func_name(1,2,3):get()
71 --
72 --   channel["func_name(1,2,3)"]:set("value")
73 --   channel["func_name(1,2,3)"] = "value"
74 --   value = channel["func_name(1,2,3)"]:get()
75 --
76 -- Note the use of the ':' operator to access the get() and set()
77 -- methods.
78 --
79 -- Also notice the absence of the following constructs from the examples above:
80 --   channel.func_name(1,2,3) = "value"  -- this will NOT work
81 --   value = channel.func_name(1,2,3)    -- this will NOT work as expected
82 --
83 --
84 -- Dialplan applications can be accessed through the global 'app' table.
85 --
86 --    app.Dial("DAHDI/1")
87 --    app.dial("DAHDI/1")
88 --    app["dial"]("DAHDI/1")
89 --
90 -- More examples can be found below.
91 --
92 -- An autoservice is automatically run while lua code is executing.  The
93 -- autoservice can be stopped and restarted using the autoservice_stop() and
94 -- autoservice_start() functions.  The autservice should be running before
95 -- starting long running operations. The autoservice will automatically be
96 -- stopped before executing applications and dialplan functions and will be
97 -- restarted afterwards.  The autoservice_status() function can be used to
98 -- check the current status of the autoservice and will return true if an
99 -- autoservice is currently running.
100 --
101 -- Note about naming conflicts:
102 -- Lua allows you to refer to table entries using the '.' notation,
103 -- I.E. app.goto(something), only if the entry doesn't conflict with an Lua
104 -- reserved word.  In the 'goto' example, with Lua 5.1 or earlier, 'goto' is
105 -- not a reserved word so you'd be calling the Asterisk dialplan application
106 -- 'goto'.  Lua 5.2 however, introduced the 'goto' control statement which
107 -- makes 'goto' a reserved word.  This casues the interpreter to fail parsing
108 -- the file and pbx_lua.so will fail to load.  The same applies to any use of
109 -- Lua tables including extensions, channels and any tables you create.
110 --
111 -- There are two ways around this:  Since Lua is case-sensitive, you can use
112 -- capitalized names, I.E. app.Goto(something) to refer to the Asterisk apps,
113 -- functions, etc. Or you can use the full syntax, I.E. app["goto"](something).
114 -- Both syntaxes are backwards compatible with earlier Lua versions.  To make
115 -- your Lua dialplans easier to maintain and to reduce the chance of future
116 -- conflicts you may want to use the app["goto"](something) syntax for all
117 -- table accesses.
118 --
119
120 function outgoing_local(c, e)
121         app.dial("DAHDI/1/" .. e, "", "")
122 end
123
124 function demo_instruct()
125         app.background("demo-instruct")
126         app.waitexten()
127 end
128
129 function demo_congrats()
130         app.background("demo-congrats")
131         demo_instruct()
132 end
133
134 -- Answer the chanel and play the demo sound files
135 function demo_start(context, exten)
136         app.wait(1)
137         app.answer()
138
139         channel.TIMEOUT("digit"):set(5)
140         channel.TIMEOUT("response"):set(10)
141         -- app.set("TIMEOUT(digit)=5")
142         -- app.set("TIMEOUT(response)=10")
143
144         demo_congrats(context, exten)
145 end
146
147 function demo_hangup()
148         app.playback("demo-thanks")
149         app.hangup()
150 end
151
152 extensions = {
153         demo = {
154                 s = demo_start;
155
156                 ["2"] = function()
157                         app.background("demo-moreinfo")
158                         demo_instruct()
159                 end;
160                 ["3"] = function ()
161                         channel.LANGUAGE():set("fr") -- set the language to french
162                         demo_congrats()
163                 end;
164
165                 ["1000"] = function()
166 --      See the naming conflict note above.
167                         app['goto']("default", "s", 1)
168                 end;
169
170                 ["1234"] = function()
171                         app.playback("transfer", "skip")
172                         -- do a dial here
173                 end;
174
175                 ["1235"] = function()
176                         app.voicemail("1234", "u")
177                 end;
178
179                 ["1236"] = function()
180                         app.dial("Console/dsp")
181                         app.voicemail(1234, "b")
182                 end;
183
184                 ["#"] = demo_hangup;
185                 t = demo_hangup;
186                 i = function()
187                         app.playback("invalid")
188                         demo_instruct()
189                 end;
190
191                 ["500"] = function()
192                         app.playback("demo-abouttotry")
193                         app.dial("IAX2/guest@misery.digium.com/s@default")
194                         app.playback("demo-nogo")
195                         demo_instruct()
196                 end;
197
198                 ["600"] = function()
199                         app.playback("demo-echotest")
200                         app.echo()
201                         app.playback("demo-echodone")
202                         demo_instruct()
203                 end;
204
205                 ["8500"] = function()
206                         app.voicemailmain()
207                         demo_instruct()
208                 end;
209
210         };
211
212         default = {
213                 -- by default, do the demo
214                 include = {"demo"};
215         };
216
217         public = {
218                 -- ATTENTION: If your Asterisk is connected to the internet and you do
219                 -- not have allowguest=no in sip.conf, everybody out there may use your
220                 -- public context without authentication.  In that case you want to
221                 -- double check which services you offer to the world.
222                 --
223                 include = {"demo"};
224         };
225
226         ["local"] = {
227                 ["_NXXXXXX"] = outgoing_local;
228         };
229 }
230
231 hints = {
232         demo = {
233                 [1000] = "SIP/1000";
234                 [1001] = "SIP/1001";
235         };
236
237         default = {
238                 ["1234"] = "SIP/1234";
239         };
240 }
241