7

语音机器人SIP通话场景下如何捕获用户电话按键信号

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=MzI1NDc5MzIxMw%3D%3D&%3Bmid=2247490862&%3Bidx=1&%3Bsn=97e24eb8c24d67abd2d334e630be7312
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

导读

随着互联网技术的发展的网络的普及,线上告警已经由早期的短信/邮件通知发展为微信/电话语音等方式,由于短信/邮件等告警方式存在延时问题,不能及时告知被通知对象,业内开始流行将服务器接收到的告警内容通过TTS(语音合成)合成语音后告知用户,用户按键选择主动处理或移交给其他负责人。  

背景

智能语音机器人基于TTS和SIP实现了语音播报功能与按键识别功能的结合,应用于58运维告警以更及时、更便捷、更多元的方式通知开发维护人员,并将此功能应用于校招邀约等场景,代替或辅助人工完成一些流程固定的工作,可以有效地节省成本提高人效,如图1。

QzuuieR.png!mobile

图1 应用场景

整体流程

智能语音机器人基于SIP线路实现的呼出场景下,用户电话按键信号捕获需要借助SIP线路实现,整体流程如图2,在代理终端A(用户)与代理终端B(机器人)持续通话的过程中,用户会持续向机器人发送媒体流,机器人在接收媒体流时会判断当前流属于语音流还是按键信号,如果当前流属于语音流则经过语音解码器,如果是按键信号则经过按键信号识别模块,最终产生语音数据/按键信息再做下一步处理。

7vA3iuM.png!mobile

图2 整体流程

如何传输

1、按键信号如何传输

目前所有的电话和传真机按键都采用DTMF信号进行编码和传输,DTMF信号是利用模拟信号对数字符号进行编码,该编码方案共使用8个模拟频率对16个符号进行编码,分为高音群和低音群,所以称为双音多频(Dual-Tone Multiple-Frequency)编码,每个符号由一个高音频率和一个低音频率唯一确定(0~9*#ABCD),如图3。

vuYzIvB.png!mobile

图3 DTMF信号编码

2、SIP如何检测DTMF信号

目前传输DTMF信号主要有三个方式:通过通信协议传输(SIPINFO)、遵循RFC2833规范传输、通过RTP的数据内容传输(INBAND)。

  • SIPINFO

通过SIP信令INFO包中的signal字段携带DTMF信号传输,这种方式的好处是不影响RTP数据包的传输,但SIP信令和媒体传输是分开的,很容易造成DTMF信号和媒体包不同步。

  • RFC2833

通信前使用SDP协议协商telephone-event参数,通过RTP包传输,由RTP包包头的PT(payload type)来标识RFC2833的数据包(如图4)。

  • INBAND

将DTMF信号不经任何处理直接打成RTP包与普通的RTP语音包混在一起传输,要获得DTMF信号则必须提取RTP数据包进行频谱分析,得到高频和低频的频率,然后查表得到对应的按键。

yYNbm2J.png!mobile

图4 RTP包格式

如何识别

综合考虑,遵循RFC2833规范实现基于SIP的电话按键信号识别成本最低,下面将详细介绍下SIP会话如何建立,媒体如何协商、基于会话和媒体协商结果如何实现电话按键信号的解析。

1、会话建立

SIP(Session Initiation Protocol)是一种信令协议,用于初始化、管理和终止网络语音和视频会话,如图5,终端代理A为主叫代理,终端代理B为被叫代理,A与B的会话建立流程如下:

  • A先发送INVITE请求至代理服务器(一般为SIP运营商提供),代理服务器将INVITE请求转发给B;

  • 代理服务器给A返回呼叫处理中的100 TRYING应答消息;

  • B向代理服务器发送呼叫处理中的100 TRYING应答消息;

  • B发现用户振铃后,向代理服务器发送180 RINGING振铃消息,代理服务器收到后转发给A;

  • B发现用户接听后,向代理服务器发送200 OK消息表示连接成功,代理服务器将200 OK转发给A;

  • A收到请求后,发送ACK消息进行确认,代理服务器再将ACK消息转发给B;

  • 主被叫用户之间建立通信连接,开始通信;

nyQVnmI.png!mobile

图5  SIP信令交互

2、媒体协商

SDP( Session Description Protocol)协议主要用于两个会话实体的媒体协商,描述会话所使用的流媒体细节,协议格式如图6,以<type>=<value>形式存储,其中:

  • c表示连接信息,用于约定IP协议版本、IP地址等信息;

  • a表示会话信息,用于约定会话使用的编解码器、按键事件(telephone-event)的RTP包包头等信息;

  • m表示媒体信息,用于约定会话为音频或视频通话、接收媒体流的端口等信息;

NzMjA37.png!mobile

图6 SDP协议格式

主被叫通过SDP协议协商媒体信息流程如下:

  • 在会话建立过程中,主叫向被叫发送INVITE请求时携带SDP协议,约定主叫接收媒体流的IP地址及端口、编解码器、按键事件等信息;

  • 在被叫给主叫回复180 RINGING振铃消息时携带SDP协议,同样也约定了被叫的相关信息;

  • 主被叫通信建立,按照SDP协议约定的媒体信息进行通信;

3、按键信号解析

遵循RFC2833规范,按键DTMF信号使用RTP包发送,通过RTP包头PT(payload type)来标示RFC2833数据包,基于以上信息并参考图6中SDP协议约定信息(a=rtpmap:126 telephone-event/8000)可将按键解析步骤总结如下:

  • 在接收RTP包时,当包头PT=126时,RTP包体中存储的内容即为按键信息;

  • 由于RTP是基于UDP协议封装的,为了防止丢包,同一个按键信号会产生多个RTP包且包头中Timestamp相同,我们可根据包头的时间戳去重;

  • 至此我们就可以成功解析基于SIP的电话按键信号;

bQbYJvQ.png!mobile

图7 按键解析

总结

目前业内关于SIP语音通话场景下的用户按键信号捕获的技术资料相对较少,本文介绍的RFC2833技术文档主要用于规范DTMF数字信号的RTP负载格式,58同城TEG AI Lab自研的智能语音机器人的按键信号捕获功能遵循该技术文档实现,希望为读者实现类似功能提供思路。    

作者简介:

李鸿勋,58同城TEG技术工程平台群AI Lab资深后端工程师

参考文献:

RFC2833:https://www.ietf.org/rfc/rfc2833.txt  


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK