我想从我的主脚本中调用另一个lua脚本 session:execute(“lua”,“/ path / somefile.lua”..somearg1 ..“”.. somegg2 ..) 它工作正常,somefile.lua正在执行,但假设我也想在那里使用会话,即我在somefile.lua中访问数据库,并想通过使用session在somefile.lua中说出查询结果。 (会议:发言(QueryResult中))。
我也试过发送会话作为参数之一 session:execute(“lua”,“/ path / somefile.lua”..session) 但它给出了一个错误“尝试连接全局'会话'(用户数据值)” 任何建议.. ??
第一个lua文件的代码
session:answer();
session:setAutoHangup(false);
session:set_tts_params("flite","kal");
callerId = session:getVariable("caller_id_number");
session:execute("lua ","/etc/freeswitch/scripts/checkbal.lua "..callerId.." "..session);
session:destroy();
第二个lua文件的代码
callerId=argv[1];
session=argv[2];
luasql = require "luasql.postgres";
env=assert(luasql:postgres());
con=assert(env:connect("mydb","postgres","password","127.0.0.1","5432"));
cur=assert(con:execute("select balance from bal where number='"..callerId.."'"));
session:set_tts_params("flite","kal");
row=cur:fetch({},"a");
res=row.balance;
session:speak(res);
答案 0 :(得分:1)
将您的第二个文件设置为返回函数或函数表的模块。这是一个示例,其中第二个文件返回"说"然后可以根据需要重复使用多次的功能:
第一个Lua文件的代码:
session:answer()
session:setAutoHangup(false)
session:set_tts_params("flite","kal")
callerId = session:getVariable("caller_id_number")
speak = require 'checkbal'
speak(session, callerId)
-- session:execute("lua ","/etc/freeswitch/scripts/checkbal.lua "..callerId.." "..session)
session:destroy()
第二个Lua文件的代码:
luasql = require "luasql.postgres"
local env=assert(luasql:postgres())
local con=assert(env:connect("mydb","postgres","password","127.0.0.1","5432"))
local function speak(session, callerId)
local cur = assert(con:execute("select balance from bal where number='"..callerId.."'"))
session:set_tts_params("flite","kal")
row=cur:fetch({},"a")
res=row.balance
session:speak(res)
end
return speak
注意:这是Lua:不需要分号。
我会考虑制作" session"一个对象(带有方法的表),带有"说"方法,但这超出了这个问题的范围并且没有必要,可能会导致以后更易于维护的代码。