#curl #lua #freeswitch
#curl #lua #freeswitch
Вопрос:
У меня есть рабочая настройка freeswitch с опцией модуля xml_curl
<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"/>
но с этим модуль sofia выдает ошибку Error Creating SIP UA for profile
. Есть ли какие-либо проблемы с модулем lua? Может быть, мне следует установить какие-то другие параметры для модуля lua?
У меня есть FreeSWITCH 1.6
Комментарии:
1. Сначала используйте
,
вместо|
. Затем проверьте, что ваш код Lua возвращает в FS. Он должен возвращать полную структуру XML для конфигурации, начиная с<?xml version="1.0" encoding="UTF-8" standalone="no"?><document type="freeswitch/xml"><section name="configuration">
2. Lua читает те же файлы, что и CURL, поэтому разницы быть не должно. Изменение
|
на,
не помогает
Ответ №1:
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'
Ответ №2:
Полвека спустя на случай, если кто-то еще столкнется с этим:
Проблема в том, что ${foo}
переменные не расширяются по умолчанию. Этот код включит его:
local rpc = require("rpc")
freeswitch.consoleLog("NOTICE", table.concat({
"Loading configuration " ..
tostring(XML_REQUEST["section"]) ..
" -> "..
tostring(XML_REQUEST["key_value"]) ..
" using luan"
}, " "))
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