淘先锋技术网

首页 1 2 3 4 5 6 7

在FreeSWITCH中控制IVR流程或者处理IVR中的一些逻辑事务时,lua扮演着一个重要角色,有时我们需要向脚本中传递一些参数,并且lua脚本也支持该功能。但是在FS中使用lua向脚本传递参数的时候,有一点需要注意:lua脚本中的接收参数的表名是argv,而不是普通lua脚本中的arg。

我在调用脚本的时候,需要向脚本中传递一个音频的文件名,(下面是脚本中的部分内容)

local fileName = arg[1];    --获取文件名
--freeswitch.consoleLog("INFO", "fileName:"..fileName);
print(fileName);

这样写,在命令行中,直接使用

lua /usr/local/freeswitch2/scripts/yuxxx.lua test
在命令行中,会正确输出test,但是在FS中通过

 <action application="lua" data="${path}/scripts/yuxxx.lua ${fileName}.wav" />
则会出现错误信息

[ERR] mod_lua.cpp:203 /usr/local/freeswitch2/scripts/yuxxx:1: attempt to index global 'arg' (a nil value)
stack traceback:
	/usr/local/freeswitch2/scripts/yuxxx.lua:1: in main chunk 

通过搜索资料,在WIKI上看到资料,里面有关于参数传递的部分,里面说是使用argv对象来获取传递的参数
将脚本中的arg换成argv,再在FS环境中通过lua来调用该脚本,并传递参数,果然正常了。

但是,随后又直接在命令行中使用

lua /usr/local/freeswitch2/scripts/yuxxx.lua test

则又会出现错误

lua: /usr/local/freeswitch2/scripts/yuxxx.lua:1: attempt to index global 'argv' (a nil value)
stack traceback:
    /usr/local/freeswitch2/scripts/yuxxx.lua:1: in main chunk
    [C]: in ?

一个问题折腾了一下午,虽然最后问题解决了,但还是不知道为啥会这样。。。

FreeSWITCH lua 中文WIKI。。