创建一个Lua Dialplan
我们创建一个dp.lua文件,内容如下
-- 定义一个打印日志的函数
function log(k, v)
if not v then v = "[NIL]" end
freeswitch.consoleLog("INFO", k .. ": " .. v .. "\n") -- 打印INFO级别信息
end
cid = session:getVariable("caller_id_number") -- 获取主叫号码
dest = session:getVariable("destination_number") -- 获取被叫号码
-- 打印日志
log("From Lua: cid_number ", cid);
log("From Lua: dest_number ", dest);
-- 添加一些ACTION,FreeSWITCH在ROUTING阶段获得该Table后,便可进入EXECUTING阶段执行ACTIONS中定义的一些动作
-- 注意: 该Table名字必须是ACTIONS
ACTIONS = {
{"log", "INFO I'm from lua dialplan"}, -- 打印日志
{"log", "Playing MOH..."}, -- 打印日志
"answer", -- 应答
{"playback", "local_stream://moh"} -- 播放声音
}
测试
执行originate user/1000 test666 LUA /usr/local/freeswitch/test/dp.lua命令我们测试下
freeswitch@debianh61> originate user/1000 test666 LUA /usr/local/freeswitch/test/dp.lua
2025-04-06 13:33:07.315159 99.50% [NOTICE] switch_channel.c:1142 New Channel sofia/internal/1000@192.168.0.11:51606 [9b9f8c5f-c97d-4329-8823-1cacbb42b86d]
2025-04-06 13:33:07.315159 99.50% [NOTICE] switch_ivr_originate.c:3059 Cannot create outgoing channel of type [error] cause: [USER_NOT_REGISTERED]
2025-04-06 13:33:07.315159 99.50% [INFO] sofia_glue.c:1659 sofia/internal/1000@192.168.0.11:51606 sending invite call-id: (null)
2025-04-06 13:33:08.515168 99.50% [NOTICE] sofia.c:7604 Ring-Ready sofia/internal/1000@192.168.0.11:51606!
2025-04-06 13:33:09.735166 99.47% [NOTICE] sofia.c:8681 Channel [sofia/internal/1000@192.168.0.11:51606] has been answered
+OK 9b9f8c5f-c97d-4329-8823-1cacbb42b86d
2025-04-06 13:33:09.735166 99.47% [NOTICE] switch_ivr.c:2303 Transfer sofia/internal/1000@192.168.0.11:51606 to LUA[test666@/usr/local/freeswitch/test/dp.lua]
2025-04-06 13:33:09.735166 99.47% [INFO] mod_lua.cpp:577 Processing ->test666 in context/script /usr/local/freeswitch/test/dp.lua
2025-04-06 13:33:09.735166 99.47% [INFO] switch_cpp.cpp:1466 From Lua: cid_number : 0000000000
2025-04-06 13:33:09.735166 99.47% [INFO] switch_cpp.cpp:1466 From Lua: dest_number : test666
2025-04-06 13:33:09.735166 99.47% [INFO] switch_channel.c:3289 sofia/internal/1000@192.168.0.11:51606 Flipping CID from "" <0000000000> to "Outbound Call" <1000>
EXECUTE [depth=0] sofia/internal/1000@192.168.0.11:51606 log(INFO I'm from lua dialplan)
2025-04-06 13:33:09.735166 99.47% [INFO] mod_dptools.c:1865 I'm from lua dialplan
EXECUTE [depth=0] sofia/internal/1000@192.168.0.11:51606 log(Playing MOH...)
freeswitch@debianh61> EXECUTE [depth=0] sofia/internal/1000@192.168.0.11:51606 answer()
EXECUTE [depth=0] sofia/internal/1000@192.168.0.11:51606 playback(local_stream://moh)
电话接通后此时1000分机开始播放音乐了。