FreeSWITCH:使用 Lua 而非 CURL 加载配置时出错

我已经通过 xml_curl 模块选项设置了可工作的 FreeSWITCH 配置

<param name="gateway-url"
       value="http://localhost:444/index.php"
       bindings="directory|dialplan|configuration"/>

我想要将 xml_curl 模块更改为 lua 模块,因此我关闭了 xml_curl 模块并将以下选项设置为 lua 模块

<param name="xml-handler-script"
       value="/var/www/callcenter/current/freeswitch/index.lua"/>
<param name="xml-handler-bindings"
       value="dialplan|directory|configuration"/>

但是,使用它时 module sofia 抛出错误 Error Creating SIP UA for profile。lua 模块是否存在问题?也许我应该为 lua 模块设置其他选项?

我使用的是 FreeSWITCH 1.6

点赞
用户3541556
用户3541556

mod_lua 在初始启动期间加载,然后在初始启动后加载的模块可能会在请求配置时由绑定的脚本提供配置,对于许多模块来说,这是加载时的操作。

<configuration name="lua.conf" description="LUA Configuration">
   <settings>
      <param name="xml-handler-script" value="configuration.lua"/>
      <param name="xml-handler-bindings" value="configuration"/>
   </settings>
</configuration>

然后当模块启动时,XML_REQUEST 将具有:

key_value = 'iax.conf'|'event_socket.conf'|sofia.conf'|...
key_name = 'name'
section = 'configuration'
tag_name = 'configuration'

2016-10-21 11:08:59
用户1672598
用户1672598

半个十年后,以防有人遇到这种情况:

问题是${foo}变量默认情况下不会被扩展。以下代码将启用它:

local rpc = require("rpc")

freeswitch.consoleLog("NOTICE", table.concat({
    "Loading configuration " ..
    tostring(XML_REQUEST["section"]) ..
    " -> "..
    tostring(XML_REQUEST["key_value"]) ..
    " using lua\n"
}, " "))

local ret

rpc.context(function(rpc_api)
    local conf = rpc_api.get_configuration {
        section   = XML_REQUEST.section,
        tag_name  = XML_REQUEST.tag_name,
        key_name  = XML_REQUEST.key_name,
        key_value = XML_REQUEST.key_value,
        params    = params and params:serialize("json") or false,
    }

    ret = type(conf.result) == "string" and conf.result or conf.result[1]
end)

assert(ret, tostring(XML_REQUEST["section"]) .. " "..  tostring(XML_REQUEST["key_value"]) .. " lacks a config generator")

-- Apply the global variables
local function apply_globals(txt)
    return txt:gsub('([$]+%b{})', function(w)
        local var = w:match("[{]([^}]+)[}]")
        freeswitch.consoleLog("WARNING", "Apply global: "..var .. " = ".. tostring(freeswitch.getGlobalVariable(var)).."\n")
        return freeswitch.getGlobalVariable(var)
    end)
end

XML_STRING = apply_globals(ret)

if XML_REQUEST.key_value == "sofia.conf" then
    freeswitch.consoleLog("WARNING", "CONF   " .. XML_STRING.. "\n")
end

此外,请确保您的文档具有正常文件中找不到的额外标题:

local CONF_HEADER = [[<?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <document type="freeswitch/xml">
        <section name="configuration">
]]

local CONF_FOOTER = [[
    </section>
</document>
]]

return CONF_HEADER..read_xml_from_disk()..CONF_FOOTER
2022-01-24 14:54:44