mirror of https://github.com/asterisk/asterisk
Reported by: mnicholson Patch by: mnicholson Closes issue #11140 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@88250 65c4cc65-6c06-0410-ace0-fbb531ad65f31.6.0
parent
b6c7daa804
commit
e8c781b215
@ -0,0 +1,208 @@
|
||||
|
||||
|
||||
CONSOLE = "Console/dsp" -- Console interface for demo
|
||||
--CONSOLE = "Zap/1"
|
||||
--CONSOLE = "Phone/phone0"
|
||||
|
||||
IAXINFO = "guest" -- IAXtel username/password
|
||||
--IAXINFO = "myuser:mypass"
|
||||
|
||||
TRUNK = "Zap/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.
|
||||
--
|
||||
-- This file can be automatically included in the extensions.conf file using
|
||||
-- the 'utils/build-extensions-conf.lua' script and a #exec statement in
|
||||
-- extensions.conf.
|
||||
--
|
||||
-- #exec /usr/bin/utils/build-extensions.conf.lua -c
|
||||
--
|
||||
-- The 'execincludes' option must be set to 'yes' in the [options] section of
|
||||
-- asterisk.conf for this to work properly.
|
||||
--
|
||||
-- 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("Zap/1")
|
||||
-- app.dial("Zap/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("zap/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;
|
||||
};
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,81 @@
|
||||
#!/usr/bin/env lua
|
||||
--[[
|
||||
|
||||
This utility can be used to generate an extensions.conf file to match an
|
||||
existing extensions.lua file. As an argument it takes the patch of the
|
||||
extensions.lua file to read from, otherwise it uses
|
||||
/etc/asterisk/extensions.lua.
|
||||
|
||||
This script can also be used to automatically include extensions.lua in
|
||||
extensions.conf via a #exec as well.
|
||||
|
||||
#exec /usr/bin/build-extensions-conf.lua -c
|
||||
|
||||
--]]
|
||||
|
||||
usage = [[
|
||||
|
||||
Usage:
|
||||
]] .. arg[0] .. [[ [options] [extensions.lua path]
|
||||
|
||||
This utility can generate an extensions.conf file with all of the contexts in
|
||||
your extensions.lua file defined as including the Lua switch. This is useful
|
||||
if you want to use your extensions.lua file exclusively. By using this utility
|
||||
you dont't have to create each extension in extensions.conf manually.
|
||||
|
||||
The resulting extensions.conf file is printed to standard output.
|
||||
|
||||
--contexts-only, -c Don't print the [global] or [general] sections. This
|
||||
is useful for including the generated file into an
|
||||
existing extensions.conf via #include or #exec.
|
||||
|
||||
--help, -h Print this message.
|
||||
|
||||
]]
|
||||
|
||||
extensions_file = "/etc/asterisk/extensions.lua"
|
||||
|
||||
options = {}
|
||||
|
||||
for k, v in ipairs(arg) do
|
||||
if v:sub(1, 1) == "-" then
|
||||
if v == "-h" or v == "--help" then
|
||||
print("match")
|
||||
options["help"] = true
|
||||
elseif v == "-c" or v == "--contexts-only" then
|
||||
options["contexts-only"] = true
|
||||
end
|
||||
else
|
||||
options["extensions-file"] = v
|
||||
end
|
||||
end
|
||||
|
||||
if options["help"] then
|
||||
io.stderr:write(usage)
|
||||
os.exit(0)
|
||||
end
|
||||
|
||||
if options["extensions-file"] then
|
||||
extensions_file = options["extensions-file"]
|
||||
end
|
||||
|
||||
result, error_message = pcall(dofile, extensions_file)
|
||||
|
||||
if not result then
|
||||
io.stderr:write(error_message .. "\n")
|
||||
os.exit(1)
|
||||
end
|
||||
|
||||
if not extensions then
|
||||
io.stderr:write("Error: extensions table not found in '" .. extensions_file .. "'\n")
|
||||
os.exit(1)
|
||||
end
|
||||
|
||||
if not options["contexts-only"] then
|
||||
io.stdout:write("[general]\n\n[globals]\n\n")
|
||||
end
|
||||
|
||||
for context, extens in pairs(extensions) do
|
||||
io.stdout:write("[" .. tostring(context) .. "]\nswitch => Lua\n\n")
|
||||
end
|
||||
|
Loading…
Reference in new issue