当前位置: 首页 > article >正文

手机打电话时由对方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: #…...

远程访问家里的路由器:异地访问内网设备或指定端口网址

在一些情况下&#xff0c;我们可能需要远程访问家里的路由器&#xff0c;以便进行设置调整或查看网络状态等&#xff0c;我们看看怎么操作&#xff1f; 1.开启远程访问 在路由本地电脑或手机&#xff0c;登录浏览器访问路由管理后台&#xff0c;并设置开启WEB远程访问。 2.内…...

根据参数量,如何推断需要多少数据才能够使模型得到充分训练?

✅ 一、经验法则&#xff1a;数据量 vs. 模型参数量 经典经验法则&#xff08;适用于监督学习场景&#xff09;&#xff1a; 训练样本数 ≈ 模型参数数量的 10~100 倍对于 BERT-base&#xff08;1.1亿参数&#xff09;&#xff0c;你通常需要 10亿到100亿标注样本 才能从头训…...

PycharmFlask 学习心得:路由(3-4)

对路由的理解&#xff1a; 用户输入网址 例如&#xff1a;http://localhost:5000/hello 浏览器会向这个地址发起一个 HTTP 请求&#xff08;比如 GET 请求&#xff09; 请求到达 Flask 的服务器 Flask 监听着某个端口&#xff08;如 5000&#xff09;&#xff0c;收到请求后…...

从逻辑学视角严谨证明数据加密的数学方法与实践

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

敦煌网测评从环境搭建到风控应对,精细化运营打造安全测评体系

自养号测评&#xff0c;抢占流量为快速提升产品权重和销量&#xff0c;很多卖家常采用自己养号补单测评的方式&#xff0c;技术搭建需要很多要素 一、硬件参数的关联性 在我们使用设备进行注册或操作账号的过程中&#xff0c;系统会记录下大量的系统与网络参数&#xff0c;其中…...

现代化SQLite的构建之旅——解析开源项目Limbo

现代化SQLite的构建之旅——解析开源项目Limbo 在当今飞速发展的技术世界中,轻量级且功能强大的数据库已成为开发者的得力助手。当我们谈论轻量级数据库时,SQLite无疑是一个举足轻重的名字。然而,随着技术的进步,我们对数据库的需求也变得更加多样化。这正是Limbo项目诞生…...

本地分支git push 报错 fatal: The current branch XXXX has no upstream branch.

背景&#xff1a; 我新建了一个本地分支叫做 “新增Saas修改需求”&#xff0c;然后当我提交代码执行 git push时报错如下&#xff0c;并且代码仓库中没有我新建的“新增Saas修改需求”这个分支。 报错信息&#xff1a; 解决方法&#xff1a; 直接采用方法2 ”git push -u orig…...

人工智能100问☞第27问:神经网络与贝叶斯网络的关系?

神经网络与贝叶斯网络是两种互补的智能模型:神经网络通过多层非线性变换从数据中学习复杂模式,擅长大规模特征提取和预测,而贝叶斯网络基于概率推理建模变量间的条件依赖关系,擅长处理不确定性和因果推断。两者的融合(如贝叶斯神经网络)结合了深度学习的表征能力与概率建…...

Python----循环神经网络(WordEmbedding词嵌入)

一、编码 当我们用数字来让电脑“认识”字符或单词时&#xff0c;最简单的方法是为每个字符或单词分配一个唯一的编号&#xff0c;然后用一个长长的向量来表示它。比如&#xff0c;假设“我”这个字在字典中的编号是第10个&#xff0c;那么它的表示就是一个很多0组成的向量&…...

ElasticSearch各种查询语法示例

1. 每种查询语法的区别与优缺点 Query DSL 区别: JSON 格式的结构化查询&#xff0c;功能强大&#xff0c;支持复杂查询逻辑&#xff0c;适用于 Elasticsearch 的核心查询场景。优点: 灵活&#xff0c;功能全面&#xff0c;支持全文搜索、精确匹配、聚合等&#xff1b;可组合…...

CUDA的设备,流处理器(Streams),核,线程块(threadblock),线程,网格(‌gridDim),块(block)和多gpu设备同步数据概念

CUDA的设备,流处理器&#xff0c;核&#xff0c;线程块&#xff08;threadblock&#xff09;&#xff0c;线程&#xff0c;网格&#xff08;‌gridDim&#xff09;&#xff0c;块&#xff08;block&#xff09;和多gpu设备同步数据概念 CUDA的设备,流处理器&#xff0c;核&…...

PyTorch的dataloader制作自定义数据集

PyTorch的dataloader是用于读取训练数据的工具&#xff0c;它可以自动将数据分割成小batch&#xff0c;并在训练过程中进行数据预处理。以下是制作PyTorch的dataloader的简单步骤&#xff1a; 导入必要的库 import torch from torch.utils.data import DataLoader, Dataset定…...

LeetCode 1340. 跳跃游戏 V(困难)

题目描述 给你一个整数数组 arr 和一个整数 d 。每一步你可以从下标 i 跳到&#xff1a; i x &#xff0c;其中 i x < arr.length 且 0 < x < d 。i - x &#xff0c;其中 i - x > 0 且 0 < x < d 。 除此以外&#xff0c;你从下标 i 跳到下标 j 需要满…...

x-cmd install | cargo-selector:优雅管理 Rust 项目二进制与示例,开发体验升级

目录 功能亮点安装优势特点适用场景总结 还在为 Rust 项目中众多的二进制文件和示例而烦恼吗&#xff1f;cargo-selector 让你告别繁琐的命令行&#xff0c;轻松选择并运行目标程序&#xff01; 功能亮点 交互式选择&#xff1a; 在终端中以交互方式浏览你的二进制文件和示例&…...

数据库设计文档撰写攻略

数据库设计文档撰写攻略 一、数据库设计文档的核心价值二、数据库设计文档的核心框架与内容详解2.1 文档基础信息2.2 需求分析与设计原则2.2.1 业务需求概述2.2.2 设计原则 2.3 数据模型设计2.3.1 概念模型&#xff08;ER 图&#xff09;2.3.2 逻辑模型&#xff08;表结构设计&…...

Python爬虫(10)Python数据存储实战:基于pymongo的MongoDB开发深度指南

目录 一、为什么需要文档型数据库&#xff1f;1.1 数据存储的范式变革1.2 pymongo的核心优势 二、pymongo核心操作全解析2.1 环境准备2.2 数据库连接与CRUD操作2.3 聚合管道实战2.4 分批次插入百万级数据&#xff08;进阶&#xff09;2.5 分批次插入百万级数据&#xff08;进阶…...

大模型「瘦身」指南:从LLaMA到MobileBERT的轻量化部署实战

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

从逻辑视角学习信息论:概念框架与实践指南

文章目录 一、信息论的逻辑基础与哲学内涵1.1 信息的逻辑本质&#xff1a;区分与差异1.2 逆范围原理与信息内容 二、信息论与逻辑学的概念交汇2.1 熵作为逻辑不确定性的度量2.2 互信息与逻辑依赖2.3 信道容量的逻辑极限 三、信息论的核心原理与逻辑基础3.1 最大熵原理的逻辑正当…...

springboot配置mysql druid连接池,以及连接池参数解释

文章目录 前置配置方式参数解释 前置 springboot 项目javamysqldruid 连接池 配置方式 在 springboot 的 application.yml 中配置基本方式 # Druid 配置&#xff08;Spring Boot YAML 格式&#xff09; spring:datasource:url: jdbc:mysql://localhost:3306/testdb?useSSL…...

Spring Boot集成Resilience4j实现微服务容错机制

在Spring Boot中集成Resilience4j实现微服务容错 引言 在微服务架构中&#xff0c;服务之间的调用不可避免&#xff0c;但由于网络延迟、服务不可用等问题&#xff0c;调用失败的情况时有发生。为了提高系统的稳定性和可用性&#xff0c;我们需要引入容错机制。Resilience4j是…...

(一) 本地hadoop虚拟机系统设置

1.配置固定IP地址&#xff08;每一台都配置&#xff09; 开启node1&#xff0c;修改主机名为node1&#xff0c;并修改固定IP为&#xff1a;192.168.88.131 # 修改主机名 hostnamectl set-hostname node1# 修改IP vim /etc/sysconfig/network-scripts/ifcfg-ens33 IPADDR"…...

TDengine 运维—容量规划

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