手机打电话时由对方DTMF响应切换多级IVR语音菜单(话术脚本与实战)

手机打电话时由对方DTMF响应切换多级IVR语音菜单

(话术脚本与实战)

--本地AI电话机器人

上一篇:手机打电话时由对方DTMF响应切换多级IVR语音应答(二)

下一篇:手机打电话时由对方DTMF响应切换多级IVR语音菜单(完结)


  • 一、前言

接上一篇《手机打电话时由对方DTMF响应切换多级IVR语音应答(二)》,我们设计了“多级IVR的编辑界面列表”,允许手机用户对IVR菜单进行八个层级的嵌套,并可以对每个IVR菜单项单独录音或语音导入。

在这个篇章中,我们尝试规划一些经典的多级IVR导航的话术脚本,使用TTS来将这些文字脚本内容生成对应的语音文件。并将这些话术逻辑和语音数据整合到【蓝牙电话SDK示例App】中。(这个功能和能力跟SDK没有关系,主要就是上层示例App的逻辑。换句话说本篇的所有逻辑都是开源的,感兴趣的读者可以获取源代码,在这个基础上进行修改以适配自己的话术和逻辑。)

另外,由于多级IVR菜单的功能逻辑比较复杂,一上来就把它整合到打电话逻辑中,拨打电话时按下DTMF才可以调试和验证的话,感觉有点浪费电话费的嫌疑。本篇章中针对多级IVR层级菜单的逻辑调试,在界面中增加了【开启多级IVR按键测试】的复选框。

用户修改或编辑好自己的IVR语音导航菜单后,可以勾选该复选框后,依次点击示例App右上角的【设置】图标->【发送DTMF】,在弹出的DTMF发送的对话框中按键测试并收听IVR菜单的语音进行检验和对照修正。(此操作不需要打电话,即可正常收听和操作)

经示例App验证和修订完毕后,再插入USB蓝牙。供其它手机来电后,真实环境下试验手机拨号盘的数字按键来回复不同的IVR语音应答。

体验和下载地址:

智能拨号器App:http://120.78.211.195:8060/Dialer.apk

拨号器SDK示例app:http://120.78.211.195:8060/sdk/SdkDemo.apk

USB蓝牙配件购买路径(参考):https://item.taobao.com/item.htm?_u=pk10l4ccbcd&id=649368472986

  • 二、话术和脚本

正常的IVR语音导航会在通话接通后主动播放一个简短的开场白(当然也可以没有),然后进入IVR的主菜单,提示对方按下不同的按键来实现不同的功能和服务。

本次设计的【多级IVR - 话术】示例如下:

开场白:欢迎致电SDK,400电话。普通话请按1,for english press two

按下1:请您按下1到9,访问不同的功能业务。重新听请按0,返回请按井号键。

按下2:how are you, fine, thank you, and you? i'm fine too.重新听请按0,返回请按井号键。

二级菜单按下1:您按下了1。

                您按下了2。

                您按下了3。

                您按下了4。

                您按下了5。

                您按下了6。

                您按下了7。

                您按下了8。

                您按下了9。

                您按下了0。

                您按下了星号键。

                您按下了井号键。

例外:按键错误,请重新输入。

超时:您已长时间没有操作,系统即将挂机,欢迎您再次使用。。

  • 三、在线TTS的网址和语料转换

有了上述的话术以及隐含的操作和响应逻辑,我们需要逐个句子的将这些文字转换为语音数据,用于在电话接通了之后能直接播放给对方收听。

示例App后续也可以接入实时TTS,但个人不建议这么做,毕竟TTS转换一般都能听出一股机器人的口音。没有任何人希望打个电话或接个电话就听出对方是一个机器人的。

为了简便操作,我们在网上找了个在线TTS的网址,用于将上述话术中每个句子,分别单独生成wav语音文件,网址如下:

【在线免费文字转语音网址:https://ttsmaker.cn】。

网址的操作界面如下图所示:

我们将句子粘贴进去后,直接点击【开始转换】,语音文件转换完成后会自动播放。如果觉得音色或句子等话术内容不合适,可以在这个过程不断的修订。

语音效果确认无误后,可以点击【下载文件到本地】,将网址生成的mp3文件,下载到本地电脑备用。如下图所示:

由于直接下载下来的mp3文件(示例中文件名为ttsmaker-file-2025-5-22-9-0-19.mp3),默认是【24000Hz单声道的mp3】数据。如下图所示:

但是我们SDK-Demo示例App能够导入和直接播放的是【8000Hz单声道的wav】数据,因此需要进行两次转换:先将“24000Hz采样率转为8000Hz”,再将“mp3格式数据转为wav”。对应于在GoldWave的操作,就是做两次【另存为】操作,界面效果分别如下:

经过两次“另存为”操作后,生成的最终的【ttsmaker-file-2025-5-22-9-0-19.wav】即为可以导入到手机正常播放的wav语音文件。

  • 四、多级IVR菜单的创建

多级IVR菜单的创建和编辑操作,在上一篇《手机打电话时由对方DTMF响应切换多级IVR语音应答(二)》已经讲过,此处不再赘述。反正就是点左上角的+号,需要哪个DTMF下创建子IVR菜单就点击【子菜单】区域,在弹出的对话框中点击左上角的+号,创建即可。

点击左上角+号新增时,会先弹出【请先选择触发的DTMF值】的提示框。由于多级IVR导航菜单是依赖对方手机按下的DTMF按键操作来触发的,因此每个DTMF按键应只能有一个IVR菜单的响应。如下图所示:

  • 五、IVR菜单语料的导入或录制

每一项的IVR菜单中,菜单项都有【导入】【录制】【播放】三个按钮,用户在IVR菜单编辑时,可以使用【录制】按钮来做人工语料的录制。也可以使用【导入】按钮,将前面章节中在线生成的wav文件,从手机中导入到示例App中使用。

在录制或导入完成后,可以使用【播放】按钮,在示例App中进行单个文件的播放,体验一下语音数据的音质效果。

  • 六、多级IVR菜单的验算

如前文所述,由于多级IVR菜单的功能逻辑比较复杂,一上来就把它整合到打电话逻辑中,拨打电话时按下DTMF才可以调试和验证的话,感觉有点浪费电话费的嫌疑。

此处针对多级IVR层级菜单的逻辑调试,在界面中增加了【开启多级IVR按键测试】的复选框。

用户修改或编辑好自己的IVR语音导航菜单后,可以勾选该复选框后,依次点击示例App右上角的【设置】图标->【发送DTMF】,在弹出的DTMF发送的对话框中按键测试并收听IVR菜单的语音进行检验和对照修正。(此操作不需要打电话,即可正常收听和操作)

当对话框【按下发送DTMF字符(IVR测试)】界面弹出时,将自动播放“IVR引导提示语”(本篇话术中开场白为:欢迎致电SDK,400电话。普通话请按1,for english press two)

用户可以在对话框界面中按照提示的语音,依次按下界面不同的按钮,收听和体验不同的IVR菜单的功能。如果中途感觉IVR逻辑不合理,可以点击界面空白处,关闭该对话框。回到主界面【多级IVR语音片段-编辑】区域,重新调整IVR菜单的逻辑。

调整完毕的逻辑是实时生效的,调整完毕后可以再次打开对话框【按下发送DTMF字符(IVR测试)】界面进行效果的直接验证。

  • 七、真实的打电话和多级IVR语音应答

上述“多级IVR菜单的验证”的响应逻辑,与真实打电话使用的DTMF响应逻辑,使用的是同一套代码。理论上,只要上章节中用户自己验算没有问题,那么在真实打电话时(来电或主动外呼)对方手机的拨号盘上按下的数字按键,收到的语音响应结果应该是没有区别的。

用户对多级IVR菜单调试和验算完毕后,可以放心的直接在手机上插入USB蓝牙,用其它手机去拨打当前这个手机号。真实的实际体验一下个人400电话IVR语音应答的效果。

  • 八、总结

本篇中,我们通过预设的话术脚本,设计了自己的DTMF响应逻辑。并通过在线TTS和语料转换,实现将脚本文字转换为一段一段语音,并将它们成功导入了【蓝牙电话SDK示例App】中进行使用。

我们可以通过主界面中对多级IVR菜单的逻辑和响应内容进行编辑,并提供了不用打通电话就可以直接检验和验证IVR菜单的体验效果的途径。

另外,由于本篇章的所有的逻辑和代码均属于【示例App】的功能范畴,开源的。感兴趣的读者可以获取源代码,在这个基础上进行修改以适配自己的话术和逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/81904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flutter dart class语法说明、示例

🔹 Dart 中的 class 基本语法 class ClassName {// 属性(字段)数据类型 属性名;// 构造函数ClassName(this.属性名);// 方法返回类型 方法名() {// 方法体} }✅ 示例:创建一个简单的 Person 类 class Person {// 属性String name;…

Apollo10.0学习——planning模块(10)之依赖注入器injector_

好不好奇injector_是干什么用的?为什么planning每个模块都要初始化这个变量? 类功能概述 DependencyInjector(依赖注入器)是一个 集中管理规划模块关键数据和服务 的容器类。它通过提供统一的访问接口,解耦各个组件之…

关于vue彻底删除node_modules文件夹

Vue彻底删除node_modules的命令 vue的node_modules文件夹非常大,常规手段根本无法删除. 解决方法: 在node_modules文件夹所在的路径运行命令窗口,并执行下面的命令. npm install rimraf -g rimraf node_modules说明: npm install rimraf -g 该命令是安装 node…

MCTS-RAG:通过树搜索重塑小模型中的检索增强生成(RAG)

https://arxiv.org/pdf/2503.20757v1这篇论文提出了MCTS-RAG框架,用于解决小型语言模型在知识密集型任务上的推理能力不足问题。具体来说, ​​MCTS-RAG框架​​:MCTS-RAG通过迭代地精炼检索和推理过程来工作。给定一个查询,它探…

数据结构:绪论之时间复杂度与空间复杂度

作者主页 失踪人口回归,陆续回三中。 开辟文章新专栏——数据结构,恳请各位大佬批评指正! 文章目录 作者主页 数据结构的基本知识数据:数据元素:数据对象:数据类型:数据结构:逻辑结…

位图算法——判断唯一字符

这道题有多种解法,可以创建hash数组建立映射关系判断,但不用新的数据结构会加分,因此我们有“加分”办法——用位图。 我们可以创建一个整型变量(32位)而一共才26个字母,所以我们只要用到0-25位即可&#…

深度学习之-目标检测算法汇总(超全面)

YOLO目标检测改进 YOLO V1- YOLO V10: 点这进入https://www.researchgate.net/publication/381470743_YOLOv1_to_YOLOv10_A_comprehensive_review_of_YOLO_variants_and_their_application_in_the_agricultural_domain YOLO V11: YOLO11 🚀Ultralytics YOLO11 &…

软考中级软件设计师——计算机网络篇

一、计算机网络体系结构 1.OSI七层模型 1. 物理层(Physical Layer) 功能:传输原始比特流(0和1),定义物理介质(如电缆、光纤)的电气、机械特性。 关键设备:中继器&#…

高等数学-空间中的曲线与曲面

一、 向量的数量积: 直线与直线的夹角: 直线与平面的夹角: 平面与平面的夹角(锐角): 方向余弦: 注:空间向量与坐标轴的夹角定义为向量与坐标轴正方向的夹角 例1: 二、 1、z0所…

使用计算机视觉实现目标分类和计数!!超详细入门教程

什么是物体计数和分类 在当今自动化和技术进步的时代,计算机视觉作为一项关键工具脱颖而出,在物体计数和分类任务中提供了卓越的功能。 无论是在制造、仓储、零售,还是在交通监控等日常应用中,计算机视觉系统都彻底改变了我们感知…

javaweb-html

1.交互流程: 浏览器向服务器发送http请求,服务器对浏览器进行回应,并发送字符串,浏览器能对这些字符串(html代码)进行解释; 三大web语言:(1)html&#xff1a…

图漾相机错误码解析

文章目录 1.相机错误码汇总2.常见报错码2.1 -1001报错2.1.1 没有找到相机2.1.2 SDK没有进行初始化2.1.3 相机不支持Histo属性 2.2 -1005报错2.2.1 跨网段打开相机2.2.2 旧版本SDK在软触发失败后提示的报错2.2.3 相机初始化上电时报错2.2.4 USB相机被占用 2.3 -1009报错2.3.1 相…

18. 结合Selenium和YAML对页面继承对象PO的改造

18. 结合Selenium和YAML对页面继承对象PO的改造 一、架构改造核心思路 1.1 改造前后对比 #mermaid-svg-ziagMhNLS5fIFWrx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ziagMhNLS5fIFWrx .error-icon{fill:#5522…

将VMware上的虚拟机和当前电脑上的Wifi网卡处在同一个局域网下,实现同一个局域网下实现共享

什么是桥接模式:桥接模式(Bridging Mode)是一种网络连接模式,常用于虚拟机环境中,将虚拟机的虚拟网络适配器直接连接到主机的物理网络适配器上,使虚拟机能够像独立的物理设备一样直接与物理网络通信 1.打开…

gitee错误处理总结

背景 如上图,根据图片中的 Git 错误提示,我们遇到的问题是 ​本地分支落后于远程分支,导致 git push 被拒绝。 ​问题原因​ 远程仓库的 master 分支有其他人推送的新提交,而您的本地 master 分支未同步这些更新(即本…

如何提高独立服务器的安全性?

独立服务器相对于其它服务器来说,整体的硬件设备都是独立的同时还有着强大的服务器性能,其中CPU设备能够决定着服务器的运算能力,所以独立服务器的安全性受到企业格外的重视,严重的话会给企业造成巨大的资金损失。 那么&#xff0…

Spark,集群搭建-Standalone

以下是 Spark Standalone 集群搭建 的详细步骤(基于 Linux 系统,以伪分布式为例): 一、环境准备 1. 硬件要求 - 至少 2 台节点(1 台 Master,1 台 Worker,可扩展)。 - 每节点配置…

如何在WordPress中使用ChatGPT

ChatGPT 自 2022 年 11 月问世以来,极大地影响了我们的创作方式。ChatGPT 可以帮助您制作大纲、标题、段落或完整的博客文章,各地的数字创作者都在热衷于使用人工智能(AI)创建内容。随着人工智能的不断发展,我们看到了…

spring5-配外部文件-spEL-工厂bean-FactoryBean-注解配bean

spring配外部文件 我们先在Spring里配置一个数据源 1.导c3p0包,这里我们先学一下hibernate持久化框架&#xff0c;以后用mybites. <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.2.…

GStreamer (三)常⽤插件

常⽤插件 1、Source1.1、filesrc1.2. videotestsrc1.3. v4l2src1.4. rtspsrc和rtspclientsink 2、 Sink2.1. filesink2.2. fakesink2.3. xvimagesink2.4. kmssink2.5. waylandsink2.6. rkximagesink2.7. fpsdisplaysink 3 、视频推流/拉流3.1. 本地推流/拉流3.1.1 USB摄像头3.1…