FreeSWITCH: ошибка при загрузке конфигурации с Lua вместо CURL

#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