Some example extensions.lua
files can be found below. They demonstrate various ways to organize extensions.
Less Clutter
Instead of defining every extension inline, you can use this method to create a neater extensions.lua
file. Since the extensions table and each context are both normal lua tables, you can treat them as such and build them piece by piece.
-- this function serves as an extension function directly function call_user(c, user) app.dial("SIP/" .. user, 60) end -- this function returns an extension function function call_sales_queue(queue) return function(c, e) app.queue(queue) end end e = {} e.default = {} e.default.include = {"users", "sales"} e.users = {} e.users["100"] = call_user e.users["101"] = call_user e.sales = {} e.sales["5000"] = call_sales_queue("sales1") e.sales["6000"] = call_sales_queue("sales2") extensions = e
Less Clutter v2
In this example, we use a fancy function to register extensions.
function register(context, extension, func) if not extensions then extensions = {} end if not extensions[context] then extensions[context] = {} end extensions[context][extension] = func end function include(context, included_context) if not extensions then extensions = {} end if not extensions[context] then extensions[context] = {} end if not extensions[context].include then extensions[context].include = {} end table.insert(extensions[context].include, included_context) end -- this function serves as an extension function directly function call_user(c, user) app.dial("SIP/" .. user, 60) end -- this function returns an extension function function call_sales_queue(queue) return function(c, e) app.queue(queue) end end include("default", "users") include("default", "sales") register("users", "100", call_user) register("users", "101", call_user) register("sales", "5000", call_sales_queue("sales1")) register("sales", "6000", call_sales_queue("sales2")) register("sales", "7000", function() app.queue("sales3") end)
Comments:
This page ( Examples ) could cause issues with the namespace. I would suggest "Lua Examples" or "Examples of Lua usage". The same could be said for Dialplan Hints, Advanced Topics, Tips and Tricks, and Interacting with Asterisk (apps, variables, and functions). ![]() |
We can rename the page if that becomes an issue. ![]() |
OK, I have dealt with namespace issues on larger projects. It becomes a problem fast. ![]() |