FreeSwitch 用Lua脚本写个小游戏

时间:2024-05-18 21:52:46

1. 编写目的

编写一个特别简单脑残的小游戏,算是记录一下在FreeSwitch通话时,如何记录用户的按键信息的一个小例子。

2. 效果展示

用户连接FreeSwitch并拨打 1236 后,接通后可以听到背景音乐,然后按键,可以在FreeSwitch控制台看到按键信息的结果。

具体规则:按0~9中的数x,输出40X;按 * 时输出40和(x-1);按 # 时输出40和(x+1)。
如图所示:
FreeSwitch 用Lua脚本写个小游戏

3. 具体步骤

  1. 编写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")
    
  2. 安装banner,因为为了控制台很好的展示效果,Linux下可以安装一下banner,安装方法特别简单。

    yum -y install banner
    
  3. 将这个脚本文件放到路径 /usr/share/freeswitch/scripts 文件夹中。

  4. 编辑/etc/freeswitch/dialplan路径下的 default.xml 文件。

    <extension name="Number Game">
      <condition field="destination_number" expression="^1236$">
        <action application="lua" data="game.lua"/>
      </condition>
    </extension>
    
  5. 在FreeSwitch控制台(也就是运行FreeSwitch成功后的那个控制台)中输入reloadxml。

  6. 使用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日