It was pretty sparsely documented. This update fleshes out the pbx_lua module, to add the switch statements to the extensions in the extensions.lua file, as well as removing them when the module is unloaded. Many thanks to Matt Nicholson for his fine contribution! git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@144523 65c4cc65-6c06-0410-ace0-fbb531ad65f3
200 lines
5.3 KiB
Text
200 lines
5.3 KiB
Text
|
|
|
|
CONSOLE = "Console/dsp" -- Console interface for demo
|
|
--CONSOLE = "DAHDI/1"
|
|
--CONSOLE = "Phone/phone0"
|
|
|
|
IAXINFO = "guest" -- IAXtel username/password
|
|
--IAXINFO = "myuser:mypass"
|
|
|
|
TRUNK = "DAHDI/G2"
|
|
TRUNKMSD = 1
|
|
-- TRUNK = "IAX2/user:pass@provider"
|
|
|
|
|
|
--
|
|
-- Extensions are expected to be defined in a global table named 'extensions'.
|
|
-- The 'extensions' table should have a group of tables in it, each
|
|
-- representing a context. Extensions are defined in each context. See below
|
|
-- for examples.
|
|
--
|
|
-- 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.
|
|
--
|
|
-- If your extension has special characters in it such as '.' and '!' you must
|
|
-- explicitly make it a string in the tabale definition:
|
|
--
|
|
-- ["_special."] = function;
|
|
-- ["_special!"] = function;
|
|
--
|
|
-- There are no priorities. All extensions to asterisk appear to have a single
|
|
-- priority as if they consist of a single priority.
|
|
--
|
|
-- Each context is defined as a table in the extensions table. The
|
|
-- context names should be strings.
|
|
--
|
|
-- One context may be included in another context using the 'includes'
|
|
-- extension. This extension should be set to a table containing a list
|
|
-- of context names. Do not put references to tables in the includes
|
|
-- table.
|
|
--
|
|
-- include = {"a", "b", "c"};
|
|
--
|
|
-- Channel variables can be accessed thorugh the global 'channel' table.
|
|
--
|
|
-- v = channel.var_name
|
|
-- v = channel["var_name"]
|
|
-- v.value
|
|
-- v:get()
|
|
--
|
|
-- channel.var_name = "value"
|
|
-- channel["var_name"] = "value"
|
|
-- v:set("value")
|
|
--
|
|
-- channel.func_name(1,2,3):set("value")
|
|
-- value = channel.func_name(1,2,3):get()
|
|
--
|
|
-- channel["func_name(1,2,3)"]:set("value")
|
|
-- channel["func_name(1,2,3)"] = "value"
|
|
-- value = channel["func_name(1,2,3)"]:get()
|
|
--
|
|
-- Note the use of the ':' operator to access the get() and set()
|
|
-- methods.
|
|
--
|
|
-- Also notice the absence of the following constructs from the examples above:
|
|
-- channel.func_name(1,2,3) = "value" -- this will NOT work
|
|
-- value = channel.func_name(1,2,3) -- this will NOT work as expected
|
|
--
|
|
--
|
|
-- Dialplan applications can be accessed through the global 'app' table.
|
|
--
|
|
-- app.Dial("DAHDI/1")
|
|
-- app.dial("DAHDI/1")
|
|
--
|
|
-- More examples can be found below.
|
|
--
|
|
-- Before starting long running operations, an autoservice should be started
|
|
-- using the autoservice_start() function. This autoservice will automatically
|
|
-- be stopped before executing applications and dialplan functions and will be
|
|
-- restarted afterwards. The autoservice can be stopped using
|
|
-- autoservice_stop() and the autoservice_status() function will return true if
|
|
-- an autoservice is currently running.
|
|
--
|
|
|
|
function outgoing_local(c, e)
|
|
app.dial("DAHDI/1/" .. e, "", "")
|
|
end
|
|
|
|
function demo_instruct()
|
|
app.background("demo-instruct")
|
|
app.waitexten()
|
|
end
|
|
|
|
function demo_congrats()
|
|
app.background("demo-congrats")
|
|
demo_instruct()
|
|
end
|
|
|
|
-- Answer the chanel and play the demo sound files
|
|
function demo_start(context, exten)
|
|
app.wait(1)
|
|
app.answer()
|
|
|
|
channel.TIMEOUT("digit"):set(5)
|
|
channel.TIMEOUT("response"):set(10)
|
|
-- app.set("TIMEOUT(digit)=5")
|
|
-- app.set("TIMEOUT(response)=10")
|
|
|
|
demo_congrats(context, exten)
|
|
end
|
|
|
|
function demo_hangup()
|
|
app.playback("demo-thanks")
|
|
app.hangup()
|
|
end
|
|
|
|
extensions = {
|
|
demo = {
|
|
s = demo_start;
|
|
|
|
["2"] = function()
|
|
app.background("demo-moreinfo")
|
|
demo_instruct()
|
|
end;
|
|
["3"] = function ()
|
|
channel.LANGUAGE():set("fr") -- set the language to french
|
|
demo_congrats()
|
|
end;
|
|
|
|
["1000"] = function()
|
|
app.goto("default", "s", 1)
|
|
end;
|
|
|
|
["1234"] = function()
|
|
app.playback("transfer", "skip")
|
|
-- do a dial here
|
|
end;
|
|
|
|
["1235"] = function()
|
|
app.voicemail("1234", "u")
|
|
end;
|
|
|
|
["1236"] = function()
|
|
app.dial("Console/dsp")
|
|
app.voicemail(1234, "b")
|
|
end;
|
|
|
|
["#"] = demo_hangup;
|
|
t = demo_hangup;
|
|
i = function()
|
|
app.playback("invalid")
|
|
demo_instruct()
|
|
end;
|
|
|
|
["500"] = function()
|
|
app.playback("demo-abouttotry")
|
|
app.dial("IAX2/guest@misery.digium.com/s@default")
|
|
app.playback("demo-nogo")
|
|
demo_instruct()
|
|
end;
|
|
|
|
["600"] = function()
|
|
app.playback("demo-echotest")
|
|
app.echo()
|
|
app.playback("demo-echodone")
|
|
demo_instruct()
|
|
end;
|
|
|
|
["8500"] = function()
|
|
app.voicemailmain()
|
|
demo_instruct()
|
|
end;
|
|
|
|
};
|
|
|
|
default = {
|
|
-- by default, do the demo
|
|
include = {"demo"};
|
|
};
|
|
|
|
["local"] = {
|
|
["_NXXXXXX"] = outgoing_local;
|
|
};
|
|
}
|
|
|