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

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

--本地AI电话机器人

  • 前言

书接上一篇,《手机打电话通话时如何向对方播放录制的IVR引导词声音》中介绍了【蓝牙电话SDK示例App】可以实现手机app在电话通话过程中插播预先录制的开场白等语音片段的功能

然而Android手机操作系统的声音调度策略,限制了声音的处理通道,没办法又拦截电话又使用听筒麦克风硬件,只能上抛给App做AI识别或转发给电脑坐席进行播放。

本篇章中,重点描述将语音转发给电脑坐席。Windows电脑与蓝牙电话的手机(插入外置USB蓝牙的手机)部署于同一个局域网(可以通过UDP广播寻址发现),在电脑中安装和运行一个软件App,充当"远程声音设备"。

通过"电脑CPU"+"手机CPU"的方式,把手机SIM电话卡通话的声音,通过局域网转发到电脑上进行播放和声音录制。并在这个基础之上实现通话过程中自动插播语音片段 的能力,最终实现【通话过程中,电脑坐席一边收听对方声音,一边插播IVR预录的语音片段】的实现方案。

Windows版"远程声音设备"程序的下载路径为:

拨号器 声音程序http://120.78.211.195:8060/sdk/DialerAudio_fx4.zip

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

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

  • 远程声音设备的界面入口

Windows版"远程声音设备"程序,又称拨号器声音程序。是基于Windows DotNet Framework4构建的普通界面应用程序,能正常免安装运行于Win7及以上的Windows操作系统中。

程序运行后,会尝试通过局域网的UDP广播,寻找和配对连接同一个局域网内,已插入外置USB配件并正常运行【蓝牙电话SDK示例App】的手机。

不能正常连接上蓝牙电话的手机时,界面区域会标黄显示。若已成功连接上【蓝牙电话SDK示例App】的手机(简称"远程声音源"),则黄色消失且顶部状态文字将提示"声音源已连接"的字样,分别如下所示。

主界面:

首次启动拨号器声音程序,若之前从未配对过任何声音源时,拨号器声音程序会自动发起局域网UDP广播,并等待所有未处于连接状态的"远程声音源"反馈的应答。

如程序收到一个或多个"远程声音源"的应答,界面将显示标红的【声音源绑定提示区域】。用户可点击【重新绑定】按钮,在弹出的"局域网声音设备列表"中单选中要绑定的【蓝牙电话SDK示例App】的手机(每个手机或电脑使用单独固定的uuid来识别),点击【绑定声音源】按钮即可完成"远程声音设备--远程声音源"的绑定。如下图所示:

【绑定声音源】按钮点击后,目标手机上会立即弹出"远程声音设备主动绑定"的确认提示框。如上一篇章的内容所述,绑定后手机就可以跟局域网内的电脑坐席进行通话声音和事件的互动了。(电脑坐席绑定手机,需要手机弹框提示确认。但手机主动去绑电脑坐席不会弹框,请知悉。

主界面中,由于电脑程序和手机App启动先后顺序的原因,可能存在电脑坐席从未绑定声音源且蓝牙电话手机也未配对远程声音的情况。不用着急,这个是正常现象。此时点击界面右上角的设置图标,在弹出的菜单项中点击【搜索声音源】菜单项,程序会再次发送局域网UDP广播寻找在线的声音源,如下图所示:

如程序收到一个或多个"远程声音源"的应答,界面将显示标红的【声音源绑定提示区域】。用户可点击【重新绑定】按钮,进行绑定即可。

正常连接到声音源的主界面中,如果有来电,且"来电自动接听"的复选框未勾选,则底部图标处会显示【接听】的字样,此时点击文字或图标,均会做接听操作,如上图右侧内容所示。

  • 手动录制和试听IVR开场白声音

与【蓝牙电话SDK示例App】手机程序类似,拨号器声音程序也增设了"接通后播放IVR引导提示语"的复选框。

拨号器声音程序默认存放一条voice_10086.wav的wav语音片段,用户可以自由选择从电脑中【导入】8000采样单声道16位深的wav文件进行导入,也可以使用【录制】按钮,自己手动录制语音文件进行IVR声音引导播放。

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

文件导入时,只能导入wav文件,且为了程序能正常解析和播放,请务必选择下述格式的采样和声道的声音数据的文件:

采样率:8000采样

声道数:单声道

比特位:16位位深

  • 外呼拨打和DTMF发送

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

  • 附:Windows11安全的"解除锁定"未签名程序

与Win7、Win8、Win10版本的操作系统不同,在Windows11中,使用免安装的exe程序,会莫名其妙触发"此文件来自其它计算机,可能被阻止以帮助保护该计算机"的锁定。

用户需要在电脑中右键【DialerAudio.exe】文件后,在【属性】界面中勾选"解除锁定"的复选框。之后双击运行才不会弹框提示风险。

用户也可右键【DialerAudio.exe】文件,"以管理员身份运行"来规避这个弹框。

在Windows11的操作系统中,进行上述额外操作后,即可正常双击运行免安装的exe程序。

否则,双击运行exe程序时将会弹出下述的【Windows已保护你的电脑】的对话框,阻止用户进一步运行这个程序。如下图所示:

在对话框界面中,用户也可以点击【更多信息】这个按钮,在之后显示的【仍要运行】按钮中点击后,即可正常跳过这个弹出框。后续再次双击运行【DialerAudio.exe】文件也不再弹出提示框。仅供参考。

  • 总结

本文介绍了Windows电脑上运行的【蓝牙电话SDK示例app】的远程声音坐席的程序。用户可使用本程序,搭配上一篇章的【蓝牙电话SDK示例app】,实现通话过程中自动插播语音片段 的能力,最终实现【通话过程中,电脑坐席一边收听对方声音,一边插播IVR预录的语音片段】的实现方案。

有细心的读者可能已经发现:【蓝牙电话SDK示例app】手机程序有"接通后播放IVR引导提示语"的功能,现在【拨号器声音程序】也有"接通后播放IVR引导提示语"的复选框,那么它们之间是如何协同工作的呢?

从通话声音的传输来看,当前我们一路通话的声音数据传递顺序是:电脑坐席--蓝牙电话App--手机--呼叫目标。

因此,当两个程序的复选框都勾选时,若【蓝牙电话SDK示例app】的IVR文件内容未播放完毕,则目标手机听到的就是【蓝牙电话SDK示例app】的IVR声音;当【蓝牙电话SDK示例app】的IVR文件内容已播放完毕且【拨号器声音程序】的IVR文件内容仍然没有播放完时,继续播放【拨号器声音程序】的IVR文件内容的声音。全部都播放完毕后,才会切换到电脑坐席的麦克风的声音。

(举个例子,手机的IVR语音时长5s,电脑坐席的IVR语音时长17s,电话接通后,目标手机前5s听到的是手机的IVR语音内容,第6s开始听到的是电脑坐席第6s的IVR语音内容。通话17s后,目标手机听到的是电脑坐席的麦克风的声音内容)

因此,本篇章的内容,是与上一篇章《手机打电话通话时如何向对方播放录制的IVR引导词声音》强关联的一个附属应用。【蓝牙电话SDK示例app】没有本篇章的【拨号器声音程序】也能正常工作。但由于Android声音调度策略的特性,要实现【通话过程中,电脑坐席一边收听对方声音,一边插播IVR预录的语音片段】的能力,仅仅单靠一个手机是无法实现的,需要引入另外一个CPU的设备进行协同工作才行。

本篇章编写的内容,仅仅是在Windows操作系统中对上述能力的一个实现,而且这个【拨号器声音程序】的源代码是开放的。

读者或用户也可根据我们的程序和交互协议和逻辑,扩展出适合自己的业务和商业逻辑。本篇章的内容,对电脑--手机相互协同的逻辑交互和打电话能力扩展的演进方向,也能起到一定的参考作用。


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

下一篇:编写中。

相关推荐
Ya-Jun2 小时前
常用第三方库:flutter_boost混合开发
android·flutter·ios
_一条咸鱼_3 小时前
深度剖析:Android NestedScrollView 惯性滑动原理大揭秘
android·面试·android jetpack
_一条咸鱼_3 小时前
深度揭秘!Android NestedScrollView 绘制原理全解析
android·面试·android jetpack
_一条咸鱼_3 小时前
揭秘 Android CoordinatorLayout:从源码深度解析其协同工作原理
android·面试·android jetpack
_一条咸鱼_3 小时前
揭秘 Android View 的 TranslationY 位移原理:源码深度剖析
android·面试·android jetpack
_一条咸鱼_3 小时前
揭秘 Android NestedScrollView 滑动原理:源码深度剖析
android·面试·android jetpack
_一条咸鱼_3 小时前
深度揭秘:Android NestedScrollView 拖动原理全解析
android·面试·android jetpack
_小马快跑_3 小时前
重温基础:LayoutInflater.inflate(resource, root, attachToRoot)参数解析
android
_一条咸鱼_3 小时前
揭秘!Android RecyclerView 预取(Prefetch)原理深度剖析
android·面试·android jetpack
_一条咸鱼_3 小时前
揭秘 Android ImageView:从源码深度剖析使用原理
android·面试·android jetpack