1. 编写目的
编写一个特别简单脑残的小游戏,算是记录一下在FreeSwitch通话时,如何记录用户的按键信息的一个小例子。
2. 效果展示
用户连接FreeSwitch并拨打 1236 后,接通后可以听到背景音乐,然后按键,可以在FreeSwitch控制台看到按键信息的结果。
具体规则:按0~9中的数x,输出40X;按 * 时输出40和(x-1);按 # 时输出40和(x+1)。
如图所示:
3. 具体步骤
-
编写lua脚本文件game.lua
local x = 1
function onInput(s,type,obj,arg)
if (type == "dtmf") then
freeswitch.consoleLog("INFO", "DTMF: ".. obj.digit .. "Duration:" .. obj.duration .. "\n")
if (obj.digit == "*") then
x = x - 1
if (x<0) then x = 0 end
elseif (obj.digit == "#") then
x = x + 1
else
x = obj.digit
end
s:execute("system","banner -w 40" .. x)
end
return ''
end
session:setInputCallback('onInput','')
session:streamFile("local_stream://moh")
-
安装banner,因为为了控制台很好的展示效果,Linux下可以安装一下banner,安装方法特别简单。
yum -y install banner
-
将这个脚本文件放到路径 /usr/share/freeswitch/scripts 文件夹中。
-
编辑/etc/freeswitch/dialplan路径下的 default.xml 文件。
<extension name="Number Game">
<condition field="destination_number" expression="^1236$">
<action application="lua" data="game.lua"/>
</condition>
</extension>
-
在FreeSwitch控制台(也就是运行FreeSwitch成功后的那个控制台)中输入reloadxml。
-
使用SIP客户端软件连接后,拨打1236,然后就可以开始玩游戏了,注意同时查看FreeSwitch控制台的输出。
4. 注意事项
可能是自己操作不当,我使用Windows下安装的XLite,然后拨打电话后按按键并没有任何效果!
但是后来我选择在windows系统上安装了一个安卓模拟器,然后安装APP Sipdroid,然后拨打后按键就管用了。
也就是说,我自己使用的是windows系统,安装了VMWare虚拟机,并安装了蓝叠安卓模拟器,然后再蓝叠上装Sipdroid,VMWare的CentOS7上跑FreeSwitch。
5. 总结
这个简单例子可以发展成为一个IVR(Interractive Voice Response,交互式语音响应),主要是用Lua来检测按键检测的功能。
Smileyan 2019年3月17日
|
请发表评论