手机打电话通话时如何向对方播放录制的IVR引导词声音

手机打电话通话时如何向对方播放录制的IVR引导词声音

--本地AI电话机器人

  • 前言

生活中,我们常常遇到这样的电话使用场景:电话打通后,呼叫方先播放一段简短的开场白,筛选出目标客户的意向;如果客户听了一下就挂断了说明就没有需求,如果客户能继续听完IVR或有语言反馈,再做进一步的人工语音对话。

上述这个用法,在营销电话、客服电话等场景较为常见。但由于目前使用手机SIM卡拨打的电话,局限于一定要用手机来做接听。通常做法是在手机旁边准备一个音箱,电话接通后手动从音箱播放声音,使声音从音箱播放后传输到手机麦克风,然后播放给对方收听。

这种做法,说实在的,弊端还是比较明显的,主要体现在两个方面:

  1. 通话事件和音箱声音不联动,操作员需要人工识别电话被接通,然后再手工点一下进行音箱声音的播放,增加了操作复杂度。外呼和来电接听都没办法做自动接听。
  2. 声音是由音箱经空气传播到手机麦克风,再采集到手机然后发送给通话对方的,这个过程如果环境周边有人说话,手机麦克风会将环境音一起采集被通话对方听见,通话私密性存疑。(集中办公时多个同事都在打电话时怎么办?)

那么,问题来了。我们有没有办法在普通手机使用SIM卡打电话给对方的通话过程中,插播一些预录制的语音片段,或者IVR语音导航等语音内容呢?

这个就是本篇章内容编写的由来。得益于上一篇章中《Android应用app实现AI电话机器人接打电话》实现的蓝牙电话方案,本篇章使用该方案的SDK示例app,仅仅通过为Android手机外置一个USB配件的情况下,拦截电话通话的事件和语音数据,进行数据识别和语音二次加工。实现手机app在电话通话过程中插播预先录制的开场白等语音片段的功能

蓝牙电话SDK示例app的下载路径为:

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

USB蓝牙配件购买路径 (参考):电脑蓝牙适配器5.0台式机笔记本pc外接无线耳机鼠标键盘发射接收-淘宝网

  • 通话语音传输路径

普通的手机电话之所以无法在通话中插播语音片段,是由于GSM模块出来的声音数据被直接送入了手机的扬声器播放(极端情况下GSM模块中甚至直接输出模拟信号的声音数据)。

在这种情况下,想要提取、拦截通话声音数据是非常困难的,而插播语音片段这个操作属于对通话语音内容进行篡改,它包含拦截、修改、继续发送传输这三部分的功能。如果用普通的录音监听或监控功能,想要实现此类效果,非常难搞。

使用上一篇章中的蓝牙电话方案,我们增加外置USB手机配件,对手机正常通话的数据进行拦截并上抛到普通的手机App进行处理。依托于这个方式,我们可以对手机通话事件进行捕获和加工,对通话状态事件进行检测和识别,对通话声音进行加工和处理。

从而实现前文所说的:来电自动接听电话接通后自动播放开场白 、通话过程中自动插播语音片段 、通话转手机接听/转坐席接听 、根据通话对方DTMF按键切换多级IVR语音应答等业务操作和功能。

通话语音传输路径(修改前--修改后):

(如上图所示,方案通过增加一个外置的USB蓝牙与手机自带的蓝牙进行配对和连接,即可对手机中进行的所有通话的语音数据进行拦截和处理。手机app通过USB接口进行输入输出操作,app通过编写蓝牙协议栈的方式与外置USB蓝牙进行通信。)

  • SDK示例App界面

由于蓝牙电话SDK依赖一个外置的USB蓝牙的手机配件,对于手机App来说,插入和不插入该USB配件,在App界面上应需要做出区分。

App主界面的中部区域,增设了【USB蓝牙信息】的显示区域。未插入USB蓝牙时这个区域是隐藏的,插入【vid=0x0a12 pid=0x0001】的USB设备后App会弹出USB授权提示框(这个是Android的授权机制),如下图所示:

USB授权后【USB蓝牙信息】会显示出来,开始进入USB蓝牙和手机本机蓝牙模块之间的【发现-配对-绑定-连接】的基础流程(第一次运行才需要配对和绑定,配对成功后面App运行只有【发现-连接】的步骤)。

USB蓝牙和手机蓝牙完成连接后,【USB蓝牙信息】左侧区域的黄色会消失,这个时候会尝试去发现局域网内的"远程声音设备"(Android手机没办法又拦截电话又使用听筒麦克风硬件,只能上抛给App做AI识别或转发给电脑坐席进行播放)。

如果当前手机之前绑定过"远程声音设备",并且该设备的程序处于运行状态时,【蓝牙电话SDK示例app】会通过一组私有协议跟它进行连接,连接成功后【USB蓝牙信息】右侧区域的黄色会消失。后面经由此手机拨打的电话,声音和通话事件将全部转发给连接的"远程声音设备",由它进行通话声音的播放和麦克风数据的注入,如下图右侧所示。

如果当前手机之前没有绑定"远程声音设备",或者绑定的声音设备没有对应的程序运行,【蓝牙电话SDK示例app】将自动上抛事件到界面,进行本地AI识别模块接口的注入,后续此手机拨打的电话,声音和通话事件将由【蓝牙电话SDK示例app】自己来消费或转发,蓝牙电话SDK不再做额外的处理,如下图左侧界面所示:

【蓝牙电话SDK示例app】绑定"远程声音设备"时,若对方远程声音设备主动绑定和配对本手机,则会弹出【主动绑定】的提示框。用户可以手动进行局域网声音设备的绑定操作(绑定后手机就可以跟局域网内的电脑坐席进行通话声音和事件的互动),如下图所示:

  • IVR开场白声音插入的方法

【蓝牙电话SDK示例app】界面中,功能设置区域增设了"接通后播放IVR引导提示语"的复选框。

App默认存放一条10086的wav语音片段,用户可以自由选择从手机中【导入】8000采样单声道16位深的wav文件进行导入,也可以使用【录制】按钮,自己手动录制语音文件进行IVR声音引导播放。如下图所示:

【录制】按钮的弹出框和【播放】按钮的弹出框如下图所示,用户可以在下述界面进行IVR文件的试听和手动录制操作。

  • 外呼拨打和DTMF发送

【蓝牙电话SDK示例app】界面中,右上角有个设置图标。用户可以点击菜单中的【拨打电话】和【发送dtmf】按钮,在弹出框中进行对应的内容输入和按钮操作。如下图所示:

  • 来电自动接听

【蓝牙电话SDK示例app】界面中,功能设置区域增设了"来电自动接听"的复选框。勾选后,对于本地手机产生的所有来电,都会做自动接听的操作。

接通后,若同时勾选了"接通后播放IVR引导提示语"的复选框,则来电一呼过来就级联播放前面章节中录制的IVR引导提示语音给对方,如下图所示:

【蓝牙电话SDK示例app】界面不设置手动接听的功能按钮。具体的接听操作一般放置在"远程声音设备"坐席或AI解析和调用代码逻辑当中。

  • 播放完毕转手机接听

应用中若存在播放完IVR引导语音后,就直接转人工接听的需求,可勾选功能设置区域增设的"播放完毕转手机接听"的复选框。

SDK用户可在代码中对"转手机接听"/"转坐席接听"的逻辑开关做切换。此处仅对"转手机接听"的功能进行筛选。

转手机接听后,蓝牙电话SDK将不再对通话语音内容进行拦截,手机用户可以直接使用手机的听筒/扬声器和手机麦克风进行通话语音的沟通。如下图所示:

  • 总结

我们在本篇章中花了五六个章节的篇幅,大致介绍了【****手机卡打电话时,如何在手机通话过程中插播预先录制的开场白等语音片段的功能】****的实现方式和具体的操作办法。

这个功能和使用方式,或许可以帮助对这方面有需求或有想法的行业人士。

对这个探索方向有兴趣的友商和朋友,本篇内容或许也能起到一定的启发和引导作用,这里也算抛砖引玉吧。

事实上,【蓝牙电话SDK示例app】这个App是开放源代码的,开发者并没有对SDK的调用逻辑和业务处理进行闭锁的想法。^V^。只是源代码不是面向公众开放而已,但源代码是可以获取得到的。

有兴趣的读者或朋友,其实可以获取App最新的源代码,自己解析、优化、以及在这个基础之上扩展出更多的自己关于电话通话方面的新能力。


上一篇:Android应用app实现AI电话机器人接打电话

下一篇:手机打电话时电脑坐席同时收听对方说话并插入IVR预录声音片段

相关推荐
投笔丶从戎1 小时前
Kotlin Multiplatform--01:项目结构基础
android·开发语言·kotlin
Lary_Rock2 小时前
Android 编译问题 prebuilts/clang/host/linux-x86
android·linux·运维
王江奎2 小时前
Android FFmpeg 交叉编译全指南:NDK编译 + CMake 集成
android·ffmpeg
hepherd3 小时前
Flutter 环境搭建 (Android)
android·flutter·visual studio code
_一条咸鱼_4 小时前
揭秘 Android ListView:从源码深度剖析其使用原理
android·面试·android jetpack
_一条咸鱼_4 小时前
深入剖析 Android NestedScrollView 使用原理
android·面试·android jetpack
_一条咸鱼_4 小时前
揭秘 Android ScrollView:深入剖析其使用原理与源码奥秘
android·面试·android jetpack
_一条咸鱼_4 小时前
深入剖析 Android View:从源码探寻使用原理
android·面试·android jetpack