Below is a quick reference that can be used to translate traditional extensions.conf dialplan concepts to their analog in extensions.lua.
Extension Patterns
Extension pattern matching syntax on logic works the same for extensions.conf and extensions.lua.
extensions.conf
[users]
exten => _1XX,1,Dial(SIP/${EXTEN})
exten => _2XX,1,Voicemail(${EXTEN:1})
extensions.lua
extensions = {}
extensions.users = {}
extensions.users["_1XX"] = function(c, e)
app.dial("SIP/" .. e)
end
extensions.users["_2XX"] = function(c, e)
app.voicemail("1" .. e:sub(2))
end
Context Includes
extensions.conf
[users]
exten => 100,1,Noop
exten => 100,n,Dial("SIP/100")
[demo]
exten => s,1,Noop
exten => s,n,Playback(demo-congrats)
[default]
include => demo
include => users
extensions.lua
extensions = {
users = {
[100] = function()
app.dial("SIP/100")
end;
};
demo = {
["s"] = function()
app.playback(demo-congrats)
end;
};
default = {
include = {"demo", "users"};
};
}
Loops
extensions.conf
exten => 100,1,Noop
exten => 100,n,Set(i=0)
exten => 100,n,While($[i < 10])
exten => 100,n,Verbose(i = ${i})
exten => 100,n,EndWhile
extensions.lua
i = 0
while i < 10 do
app.verbose("i = " .. i)
end
Variables
extensions.conf
exten => 100,1,Set(my_variable=my_value)
exten => 100,n,Verbose(my_variable = ${my_variable})
extensions.lua
channel.my_variable = "my_value"
app.verbose("my_variable = " .. channel.my_variable:get())
Applications
extensions.conf
exten => 100,1,Dial("SIP/100",,m)
extensions.lua
app.dial("SIP/100", nil, "m")
Macros/GoSub
Macros can be defined in pbx_lua by naming a context 'macro-*' just as in extensions.conf, but generally where you would use macros or gosub in extensions.conf you would simply use a function in lua.
extensions.conf
[macro-dial]
exten => s,1,Noop
exten => s,n,Dial(${ARG1})
[default]
exten => 100,1,Macro(dial,SIP/100)
extensions.lua
extensions = {}
extensions.default = {}
function dial(resource)
app.dial(resource)
end
extensions.default[100] = function()
dial("SIP/100")
end
Goto
While Goto is an extenstions.conf staple, it should generally be avoided in pbx_lua in favor of functions.
extensions.conf
[default]
exten => 100,1,Goto(102,1)
exten => 102,1,Playback("demo-thanks")
exten => 102,n,Hangup
extensions.lua
extensions = {}
extensions.default = {}
function do_hangup()
app.playback("demo-thanks")
app.hangup()
end
extensions.default[100] = function()
do_hangup()
end