FreeSWITCH中文Wiki
目录:
* 1 Lua特性
* 1.1 可用来写IVR脚本
* 1.2 可作为事件钩子
* 1.3 可作为Directory Server(与mod_xml_curl功能相同)
* 1.4 可用于发起呼叫
* 1.5 轻量级
* 1.6 高度内嵌
* 1.7 关于lua学习
* 1.8 Cli中的lua与luarun
* 1.8.1 参数传递
* 2 配置
* 2.1 事件钩子
* 2.1.1 事件钩子脚本
* 2.2 针对IVR用途的配置
* 2.3 针对API呼叫的配置
* 2.4 调用其他lua脚本
* 2.5 提供配置文件服务
* 2.6 lua自启动脚本配置
* 3 拨号方案示例
* 4 拨号方案示例 - 内嵌扩展
* 5 IVR示例
* 5.1 Hello Lua示例
* 6 模式匹配 (正则表达式)
* 6.1 API函数regex示例
* 6.2 Lua自带模式匹配
* 7 杂例
* 7.1 运行shell命令
* 8 更多示例
* 9 FAQ
* 9.1 我的debug信息在哪里?
* 9.2 如何使用第三方的lua脚本或模块?
* 9.3 如何让FreeSWITCH使用系统安装的lua环境?
* 9.4 第三方类库
* 9.5 怎么让lua通过require函数识别我自己的库?
* 9.6 如何通过ODBC访问数据库?
* 9.7 如何出有用但是非正式的Session函数?
* 9.8 如何判断文件是否存在?
* 10 API
* 10.1 Events
* 10.1.1 event:addBody
* 10.1.2 event:addHeader
* 10.1.3 event:delHeader
* 10.1.4 event:fire
* 10.1.5 event:getBody
* 10.1.6 event:getHeader
* 10.1.7 event:getType
* 10.1.8 event:serialize
* 10.1.9 event:setPriority
* 10.1.10 Sending an Event
* 10.2 Sessions
* 10.2.1 session:answer
* 10.2.2 session:answered
* 10.2.3 session:bridged
* 10.2.4 session:check_hangup_hook
* 10.2.5 session:collectDigits
* 10.2.6 session:consoleLog
* 10.2.7 session:destroy
* 10.2.8 session:execute
* 10.2.9 session:executeString
* 10.2.10 session:flushDigits
* 10.2.11 session:flushEvents
* 10.2.12 session:get_uuid
* 10.2.13 session:getDigits
* 10.2.14 session:getState
* 10.2.15 session:getVariable
* 10.2.16 session:hangup
* 10.2.17 session:hangupCause
* 10.2.18 session:hangupState
* 10.2.19 session:insertFile
* 10.2.20 session:mediaReady
* 10.2.21 session:originate
* 10.2.22 session:playAndGetDigits
* 10.2.22.1 Syntax
* 10.2.22.2 Arguments
* 10.2.22.3 Discussion
* 10.2.22.4 Examples
* 10.2.23 session:preAnswer
* 10.2.24 session:read
* 10.2.25 session:ready
* 10.2.26 session:recordFile
* 10.2.27 session:sayPhrase
* 10.2.28 session:sendEvent
* 10.2.29 session:setAutoHangup
* 10.2.30 session:setHangupHook
* 10.2.31 session:setInputCallback
* 10.2.32 session:setVariable
* 10.2.33 session:sleep
* 10.2.34 session:speak
* 10.2.35 session:say
* 10.2.36 session:streamFile
* 10.2.37 session:transfer
* 10.2.38 session:unsetInputCallback
* 10.2.39 session:waitForAnswer
* 10.3 Non-Session API
* 10.3.1 freeswitch.API
* 10.3.2 freeswitch.bridge
* 10.3.3 soleCleanLog
* 10.3.4 soleLog
* 10.3.5 freeswitch.Dbh
* 10.3.6 ail
* 10.3.7 freeswitch.Event
* 10.3.8 freeswitch.EventConsumer
* 10.3.9 GlobalVariable
* 10.3.10 freeswitch.IVRMenu
* 10.3.11 freeswitch.msleep
* 10.3.12 freeswitch.Session
* 10.3.13 stream:write
* 10.3.13.1 API commands
* 10.3.13.2 Web page interaction (via mod_xml_rpc)
* 10.3.14 Example: Call Control
* 10.3.15 Special Case: env object
* 11 See Also
Lua特性
可用来写IVR脚本
Lua的语法非常简单易用。查看示例: Hello Lua 脚本。
可作为事件钩子
你可以定义一个Lua脚本,用于每次特定事件被触发的时候执行。 查看示例: Event_Hooks
可作为Directory Server(与mod_xml_curl功能相同)
正则匹配是什么Lua可以为xml_curl模块提供配置文件服务,不需要xml_curl去请求web服务器。具体请看:Serving_Configuration
可用于发起呼叫
Examples
轻量级
精简过的mod_lua.so文件只有272k大小。
高度内嵌
就嵌入能力来说,Python得分2,Perl得分4,JavaScript得分5,而Lua是10!
关于Lua学习
这里有一份Lua与JavaScript在某些特性方面的对比,详见Learning Lua From JS.
Cli中的lua与luarun
你可以通过使用命令“luarun /path/to/script.lua”,启动一个线程来跑你的lua脚本。“lua”命令用于拨号方案的内联lua,如 ${lua(codehere)}。“luarun”会创建一个进程来异步运行,而“lua”将会阻塞直到代码执行结束。在参数前面加上“~”,会运行单行的lua命令。
需要注意的是,通过luarun执行的脚本不能通过stream:write API向控制台写入,因为没有stream对象。
参数传递
在向lua传递参数时,是用空格隔开各个参数值,如下:
luarun arg1 arg2 arg3
lua中是以argv对象来获取传递进来的参数,如下:
my_first_var = argv[1];
my_next_var = argv[2];
以此类推。。。
freeswitch@DVORAK> lua ~print(string.find("1234#5678", "(%d+)#(%d+)"))
1 9 1234 5678
freeswitch@DVORAK> luarun ~print(string.find("1234#5678", "(%d+)#(%d+)"))
+OK
1 9 1234 5678
freeswitch@DVORAK> luarun ~stream:write("1234#5678")
+OK
2011-06-20 13:35:35.274782 [ERR] mod_lua.cpp:191 [string "line"]:1: attempt to index global 'stream' (a nil value)
stack traceback:
[string "line"]:1: in main chunk
freeswitch@DVORAK> lua ~stream:write("1234#5678")
1234#5678
配置
事件钩子
下面的配置实例将会告诉你如何在每次DETECTED_TONE事件被触发的时候,执行tone_event.lua脚本。
<configuration name="f" description="LUA Configuration">
<settings>
<param name="script-directory" value="$${base_dir}/scripts/?.lua"/>
<hook event="DETECTED_TONE" script="tone_event.lua"/>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论