全双工通话PortSIP目前的功能实现

为了实现智能客服,我们在研究全双工的通话系统。目前底层使用的是商用软件 PortSIP,对方可以付费定制开发需要的功能,同时也提供了较便宜的 SDK 供用户自己开发。经过三周左右的调研与测试,目前已经把我们需要的功能进行了基础的实现。但是由于本人知识水平有限,对 C# 、C 编程语言不熟悉,所以实际实现有些拙劣。本文主要讲如下内容:1. 介绍理想化系统,2. 介绍目前的实际实现,3. 实现中遇到的问题与解决。

图一 理想化流程的一种

 

 

一. 理想化系统

我们的主要目标是实现智能客服,根据业务需要自动打电话给用户或者接听用户的来电,自动询问用户问题或者回复用户问题。举一个简单的例子比如自动订票客服,如果用户打电话来想要订票,智能客服可以询问用户的姓名,出发地目的地,订票时间以及其他需要的信息,完成必要信息的收集之后可以帮用户订票。订票完成之后可以打电话给用户进行一些调研或者别的信息交流。流程如图一所示。

为了完成以上需求,我们需要如下系统功能:1. 通话系统。该系统可以跟普通的手机/固定电话进行通话,而且我们是通过电脑自动处理通话,这里需要 VoIP 功能。2. 语音文字转换系统。这个是比较常见的功能,有很多工具,需要实现的功能简单分为 ASR(Automatic Speech Recognition,语音转文字)和 TTS(Text To Speech,文字转语音)两种。3. 对话系统。该系统是整个系统的核心,也是人工智能目前的热点,本人了解不多,不做过多阐述。

 

二. 目前的实际实现

其实理想化系统主要的功能是对话系统,做出来对话系统的话其他都只是一个形式的问题,打电话还是发邮件都可以。本人的工作就是在做“形式”方面的事情,了解一下全双工通话系统怎么部署,然后把语音文字转换功能加上,仅仅如此。经过和同事的讨论,使用了 PortSIP 的 SDK 来实现通话功能,使用了百度的 SDK 来实现语音文字转换功能,对话系统也没有接入,只做了简单的模拟。

首先安装 PortSIP 的服务器端 PortSIP PBX,这样就搭建了一个小型的交换机系统,用户可以注册到服务器上并且进行用户间的通话了。直接安装其 Windows 版本的客户端就可以部署,非常简单。安装之后根据使用手册进入管理页面,把基本的功能初始化,同时创建几个分机用户(Extensions),分机用户可以使用客户端连接到系统进行通话。

然后使用其客户端 Softphone 测试,输入刚刚创建的分机用户信息,连接到服务器,就可以进行通话了。这里需要注意就是 Softphone 需要填写比较多的字段才能登陆,这些字段分别是 User Name、Password、Display Name、Auth Name、SIP Domain、SIP Server、 Server Port 等。其他还有一些字段已经选中了默认值,无需更改,如图二所示。

图二 需要填写的登陆字段

最后就是修改其客户端的代码,使用 SDK 来完成我们的定制化需求。为了实时获取用户的语音,我们不可以使用 Record 功能,因为 Record 是通话结束后才写完录音文件,我们使用了 AudioStreamCallback 功能,可以实时获取用户语音并且执行回调函数。这样就实现了图一中5. Speech 的获取,然后使用 ASR 将用户语音转化为文字,实现6. Text,为了模拟对话系统对用户输入进行回复的情况,我们直接把刚刚转换的文字再用 TTS 转化为语音,这样就实现了图一中 1. Text 到 2. Speech 的转换,再把这段语音播放给用户,就完成了需要的所有功能。为什么不直接把用户刚刚录下来的语音发给他呢?当然不能这样偷懒了,要实现系统的功能。

 

三. 实现中遇到的问题与解决

问题很多,但是主要都是本人的问题。先记录下来以后再详细说。

  1. Debug 查找代码插入的地方
  2. 字节数组写成音频文件,粗略实现,未增加VAD
  3. 多线程
  4. 语音回复的时间

欢迎共同探讨。 [email protected]

猜你喜欢

转载自blog.csdn.net/yuguo7336761/article/details/81544910
今日推荐