FreeSwitch+lua实现IVR(互动式语音应答)

IVR(Interactive Voice Response)交互式语言应答,是呼叫中心的1个经典应用场景,FreeSwitch官方有一个利用lua实现的简单示例,大致原理是利用lua脚本+TTS实现,记录一下:(环境:FreeSwitch 1.10.11 + Windows 10)

步骤1:安装TTS

FreeSwitch自带了1个TTS引擎(发音效果比较生硬,仅支持英文,不过用来学习足够了),找到安装目录下的 freeswitch/conf/modules.conf.xml

1
2
3
4
5
6
<!-- ASR /TTS -->
<load module="mod_flite"/>
<!-- <load module="mod_pocketsphinx"/> -->
<!-- <load module="mod_cepstral"/> -->
<!-- <load module="mod_tts_commandline"/> -->
<!-- <load module="mod_rss"/> -->

找到ASR /TTS这一节,把mode_flite注释去掉,然后重启FreeSwitch 生效(如果没生效,检查是否有mod_flite.dll这个文件)

 

步骤2:配置路由

\FreeSWITCH\conf\dialplan\default\welcome.xml,在default目录 下,创建welcome.xml文件,内容如下:

1
2
3
4
5
6
7
<include>
  <extension name="welcome_ivr">
    <condition field="destination_number" expression="^2910$">
      <action application="lua" data="welcome.lua"/>
    </condition>
  </extension>
</include>

这段的意思是 如果被叫号码是2910,将由welcome.lua脚本来执行后续逻辑。

 

步骤3:编写交互逻辑lua脚本

\FreeSWITCH\scripts\welcome.lua (创建该文件),内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
-- 先应答,防止电话断掉
session:answer();
while (session:ready() == true) do
    -- 防止自动挂断
    session:setAutoHangup(false);
    -- 设置TTS引擎参数
    session:set_tts_params("flite", "kal");
    -- 播放欢迎语音
    session:speak("Hello. Welcome to the VoIp World!");
    -- 睡100ms
    session:sleep(100);
    -- 播放提示语音
    session:speak("please select an Action.");
    session:sleep(100);
    -- 按1转到1001分机
    session:speak("to call 1001, press 1");
    session:sleep(100);
    -- 按2挂断
    session:speak("to hangup , press 2");
    session:sleep(2000);
    -- 等待按键(5秒超时)
    digits = session:getDigits(1, "", 5000);
    if (digits == "1"then
        -- 按1,转到1001分机
        session:execute("bridge","user/1001");
    end
    if (digits == "2"then
        -- 按2,播放bye,bye语音,然后挂断
        session:speak("bye bye");
        session:hangup();
    end
end

 

参考文档:

https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Client-and-Developer-Interfaces/Lua-API-Reference/Lua-examples/Lua-Welcome-IVR-example_3965157/#about

posted @   菩提树下的杨过  阅读(425)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2019-01-13 pygame 笔记-10 摩擦力与屏幕环绕
2017-01-13 netty-socketio 示例代码
2016-01-13 bash/shell编程学习(2)
2013-01-13 MAC本遭遇ARP攻击的处理办法
2010-01-13 windows 2008 使用注意事项
点击右上角即可分享
微信分享提示