手机打电话时由对方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】的功能范畴,开源的。感兴趣的读者可以获取源代码,在这个基础上进行修改以适配自己的话术和逻辑。
相关文章:

手机打电话时由对方DTMF响应切换多级IVR语音菜单(话术脚本与实战)
手机打电话时由对方DTMF响应切换多级IVR语音菜单 (话术脚本与实战) --本地AI电话机器人 上一篇:手机打电话时由对方DTMF响应切换多级IVR语音应答(二) 下一篇:手机打电话时由对方DTMF响应切换多级IVR语音…...

面试题——JDBC|Maven|Spring的IOC思想|DI思想|SpringMVC
目录 一、JDBC 1、jdbc连接数据库的基本步骤(掌握**) 2、Statement和PreparedStatement的区别 (掌握***) 二、Maven 1、maven的作用 2、maven 如何排除依赖 3、maven scope作用域有哪些? 三、Spring的IOC思想 …...

DETR3D- 3D Object Detection from Multi-view Images via 3D-to-2D Queries
MIT CORL 2021 纯视觉BEV方案transformer网络3D检测 paper:[2110.06922] DETR3D: 3D Object Detection from Multi-view Images via 3D-to-2D Queries code:GitHub - WangYueFt/detr3d DNN提图像特征,FPN提多尺度特征 pts_bbox_head Detr3…...

SpringBoot3整合WebSocket
一、WebSocket简介 WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信,允许服务器主动向客户端推送数据。 与传统的 HTTP 请求-响应模式不同,WebSocket 在建立连接后,允许服务器和客户端之间进行双向…...

鸿蒙进阶——驱动框架UHDF 机制核心源码解读(一)
文章大纲 引言一、uhdf 概述二、uhdf 的核心参与角色1、drivers/hdf_core/adapter/uhdf2/manager/device_manager.c1.1、drivers/hdf_core/framework/core/manager/src/devmgr_service.c#DevmgrServiceGetInstance通过objectId获取IDevmgrService实例1.2、drivers/hdf_core/fra…...
电子电路:能认为电抗也是在做功吗?
阻抗是什么,我记得在交流电路中,阻抗是电阻、电感和电容的综合作用,用Z表示,单位是欧姆。 那阻抗和做功的关系,可能需要从阻抗的组成来分析。阻抗分为电阻部分和电抗部分,也就是 Z = R + jX,其中R是电阻,X是电抗(包括感抗和容抗)。而做功可能主要和电阻有关,因为电…...
DEEPSEEK + 其他工具的玩法
1. deepseek 即梦,批量生成图片 1)给deepseek提出需求,让他生成一个海报设计框架 2)让deepseek把上面的框架转换为文生图的提示词,方便用来制作图片 3)将提示词复制到 即梦(即梦电脑…...

Idea 配合 devtools 依赖 实现热部署
核心依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency> yaml配置 spring: #…...
远程访问家里的路由器:异地访问内网设备或指定端口网址
在一些情况下,我们可能需要远程访问家里的路由器,以便进行设置调整或查看网络状态等,我们看看怎么操作? 1.开启远程访问 在路由本地电脑或手机,登录浏览器访问路由管理后台,并设置开启WEB远程访问。 2.内…...
根据参数量,如何推断需要多少数据才能够使模型得到充分训练?
✅ 一、经验法则:数据量 vs. 模型参数量 经典经验法则(适用于监督学习场景): 训练样本数 ≈ 模型参数数量的 10~100 倍对于 BERT-base(1.1亿参数),你通常需要 10亿到100亿标注样本 才能从头训…...
PycharmFlask 学习心得:路由(3-4)
对路由的理解: 用户输入网址 例如:http://localhost:5000/hello 浏览器会向这个地址发起一个 HTTP 请求(比如 GET 请求) 请求到达 Flask 的服务器 Flask 监听着某个端口(如 5000),收到请求后…...

从逻辑学视角严谨证明数据加密的数学方法与实践
文章目录 一、加密数据的数学指纹:信息论基础1.1 加密检测的核心原理1.2 香农熵:量化信息的不确定性 二、统计检验方法:从随机性到加密性2.1 卡方检验的数学原理2.2 游程检验与序列相关性2.3 NIST统计测试套件 三、加密算法的特征识别3.1 对称…...

敦煌网测评从环境搭建到风控应对,精细化运营打造安全测评体系
自养号测评,抢占流量为快速提升产品权重和销量,很多卖家常采用自己养号补单测评的方式,技术搭建需要很多要素 一、硬件参数的关联性 在我们使用设备进行注册或操作账号的过程中,系统会记录下大量的系统与网络参数,其中…...
现代化SQLite的构建之旅——解析开源项目Limbo
现代化SQLite的构建之旅——解析开源项目Limbo 在当今飞速发展的技术世界中,轻量级且功能强大的数据库已成为开发者的得力助手。当我们谈论轻量级数据库时,SQLite无疑是一个举足轻重的名字。然而,随着技术的进步,我们对数据库的需求也变得更加多样化。这正是Limbo项目诞生…...

本地分支git push 报错 fatal: The current branch XXXX has no upstream branch.
背景: 我新建了一个本地分支叫做 “新增Saas修改需求”,然后当我提交代码执行 git push时报错如下,并且代码仓库中没有我新建的“新增Saas修改需求”这个分支。 报错信息: 解决方法: 直接采用方法2 ”git push -u orig…...
人工智能100问☞第27问:神经网络与贝叶斯网络的关系?
神经网络与贝叶斯网络是两种互补的智能模型:神经网络通过多层非线性变换从数据中学习复杂模式,擅长大规模特征提取和预测,而贝叶斯网络基于概率推理建模变量间的条件依赖关系,擅长处理不确定性和因果推断。两者的融合(如贝叶斯神经网络)结合了深度学习的表征能力与概率建…...

Python----循环神经网络(WordEmbedding词嵌入)
一、编码 当我们用数字来让电脑“认识”字符或单词时,最简单的方法是为每个字符或单词分配一个唯一的编号,然后用一个长长的向量来表示它。比如,假设“我”这个字在字典中的编号是第10个,那么它的表示就是一个很多0组成的向量&…...
ElasticSearch各种查询语法示例
1. 每种查询语法的区别与优缺点 Query DSL 区别: JSON 格式的结构化查询,功能强大,支持复杂查询逻辑,适用于 Elasticsearch 的核心查询场景。优点: 灵活,功能全面,支持全文搜索、精确匹配、聚合等;可组合…...

CUDA的设备,流处理器(Streams),核,线程块(threadblock),线程,网格(gridDim),块(block)和多gpu设备同步数据概念
CUDA的设备,流处理器,核,线程块(threadblock),线程,网格(gridDim),块(block)和多gpu设备同步数据概念 CUDA的设备,流处理器,核&…...
PyTorch的dataloader制作自定义数据集
PyTorch的dataloader是用于读取训练数据的工具,它可以自动将数据分割成小batch,并在训练过程中进行数据预处理。以下是制作PyTorch的dataloader的简单步骤: 导入必要的库 import torch from torch.utils.data import DataLoader, Dataset定…...

LeetCode 1340. 跳跃游戏 V(困难)
题目描述 给你一个整数数组 arr 和一个整数 d 。每一步你可以从下标 i 跳到: i x ,其中 i x < arr.length 且 0 < x < d 。i - x ,其中 i - x > 0 且 0 < x < d 。 除此以外,你从下标 i 跳到下标 j 需要满…...

x-cmd install | cargo-selector:优雅管理 Rust 项目二进制与示例,开发体验升级
目录 功能亮点安装优势特点适用场景总结 还在为 Rust 项目中众多的二进制文件和示例而烦恼吗?cargo-selector 让你告别繁琐的命令行,轻松选择并运行目标程序! 功能亮点 交互式选择: 在终端中以交互方式浏览你的二进制文件和示例&…...
数据库设计文档撰写攻略
数据库设计文档撰写攻略 一、数据库设计文档的核心价值二、数据库设计文档的核心框架与内容详解2.1 文档基础信息2.2 需求分析与设计原则2.2.1 业务需求概述2.2.2 设计原则 2.3 数据模型设计2.3.1 概念模型(ER 图)2.3.2 逻辑模型(表结构设计&…...
Python爬虫(10)Python数据存储实战:基于pymongo的MongoDB开发深度指南
目录 一、为什么需要文档型数据库?1.1 数据存储的范式变革1.2 pymongo的核心优势 二、pymongo核心操作全解析2.1 环境准备2.2 数据库连接与CRUD操作2.3 聚合管道实战2.4 分批次插入百万级数据(进阶)2.5 分批次插入百万级数据(进阶…...

大模型「瘦身」指南:从LLaMA到MobileBERT的轻量化部署实战
大模型「瘦身」指南:从LLaMA到MobileBERT的轻量化部署实战 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 大模型「瘦身」指南:从LLaMA到MobileBERT的轻量化部署实战摘要引言一、轻量化技术…...

从逻辑视角学习信息论:概念框架与实践指南
文章目录 一、信息论的逻辑基础与哲学内涵1.1 信息的逻辑本质:区分与差异1.2 逆范围原理与信息内容 二、信息论与逻辑学的概念交汇2.1 熵作为逻辑不确定性的度量2.2 互信息与逻辑依赖2.3 信道容量的逻辑极限 三、信息论的核心原理与逻辑基础3.1 最大熵原理的逻辑正当…...
springboot配置mysql druid连接池,以及连接池参数解释
文章目录 前置配置方式参数解释 前置 springboot 项目javamysqldruid 连接池 配置方式 在 springboot 的 application.yml 中配置基本方式 # Druid 配置(Spring Boot YAML 格式) spring:datasource:url: jdbc:mysql://localhost:3306/testdb?useSSL…...
Spring Boot集成Resilience4j实现微服务容错机制
在Spring Boot中集成Resilience4j实现微服务容错 引言 在微服务架构中,服务之间的调用不可避免,但由于网络延迟、服务不可用等问题,调用失败的情况时有发生。为了提高系统的稳定性和可用性,我们需要引入容错机制。Resilience4j是…...
(一) 本地hadoop虚拟机系统设置
1.配置固定IP地址(每一台都配置) 开启node1,修改主机名为node1,并修改固定IP为:192.168.88.131 # 修改主机名 hostnamectl set-hostname node1# 修改IP vim /etc/sysconfig/network-scripts/ifcfg-ens33 IPADDR"…...

TDengine 运维—容量规划
概述 若计划使用 TDengine 搭建一个时序数据平台,须提前对计算资源、存储资源和网络资源进行详细规划,以确保满足业务场景的需求。通常 TDengine 会运行多个进程,包括 taosd、taosadapter、taoskeeper、taos-explorer 和 taosx。 在这些进程…...