FreeSWITCH的Lua拨号计划

156 阅读2分钟

创建一个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)

image.png

电话接通后此时1000分机开始播放音乐了。