手机转SIP-手机做中继网关-落地线路对接软交换呼叫中心

Android手机转SIP对接软交换呼叫中心

--手机拦截电话通话语音的后续处理

前面的篇章中,我们通过"蓝牙电话"的方案,拦截了手机打电话时SIM卡通话的声音和接通状态事件。本篇章将讲述如何将电话卡的这个语音和通话事件,通过SIP协议,对接到软交换的呼叫中心系统当中。

通常在支持软交换的系统中,手机设备与手机APP所扮演的角色一般称为****"网关"、"落地线路"或"中继线路"****。即呼叫中心坐席的电话,会经由此网关的线路,通过这个手机拨打出去给目标电话号码。

当前市面上的手机,海外版的基本都是esim卡或普通sim卡,但基本上都是单卡。中国大陆上发行的手机基本都是双卡双待单通的手机,非洲大陆或某些运营商环境比较复杂的地区可能会存在多卡多通的手机。如果要将手机转SIP对接到呼叫中心,就应该规划方案将手机设备的这种异构型考虑进去。

作为通话的中继设备而不是呼叫终端,手机转SIP之后会涉及到另一个跟业务相关的三方通话问题:手机空闲但坐席繁忙时,来电或第三方接口外呼时,要如何处理这个话务?以及在手机APP转SIP的使用过程中,手机会不会被拿起来直接拨打电话出去,这种拨打跟呼叫中心的坐席之间又是如何处理这个话务呢?

本文将分门别类的详细阐述,如何在技术层面上消除和规避这方面的问题,使一台普通的手机,能正常通过SIP协议,将通话业务和语音数据,对接转换到支持软交换的系统。

体验和下载地址:

智能拨号器App: http://120.78.211.195:8060/Dialer.apk

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

  • 二、通话相关的事件汇总

本篇章主要针对常见的软交换中心的SIP协议对接进行事件归类分析,将其与手机Android系统自带的通话事件,以及我们"蓝牙电话"方案所使用的HFP协议进行对比。评估和确认如果要将双卡双待手机、甚至是多卡多待多通手机,如果要对接到SIP软交换中心,如阿里云呼叫中心、磐石云、昆石VOS、OKCC等支持软交换的系统,在技术方案上需要Android手机具备哪些接口,才能正确的匹配到SIP呼叫的绝大部分需求。

SIP协议对照手机APP的功能映射表如下所示:

|------------|-----------------------------|------------------------------------------------------------------|-----------------|
| 功能 | SIP协议 | Android通话 | 蓝牙HFP协议 |
| 外呼 | INVITE消息 | new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + dialerNumber)) | ATD10086; |
| 外呼响应 | 100 Trying | TelephonyManager.CALL_STATE_OFFHOOK消息 | +CIEV: 2,2 |
| 振铃 | 180振铃/183彩铃 | 无 | +CIEV: 2,3 |
| 外呼取消 | CANCEL消息 | TelephonyManager.CALL_STATE_IDLE | +CIEV: 2,0 |
| 接通 | SIP/2.0 200 OK | 无 | +CIEV: 1,1 |
| 挂断 | BYE消息 | TelephonyManager.CALL_STATE_IDLE | +CIEV: 1,0 |
| 来电 | INVITE消息 | TelephonyManager.CALL_STATE_RINGING | +CIEV: 2,1 |
| 拒接 | 480 Temporarily Unavailable | TelephonyManager.CALL_STATE_IDLE | +CIEV: 2,0 |

总体上来看,蓝牙HFP协议和SIP软交换协议之间,基本能做到一一对应,语音通话数据也能通过建立sco连接实现上行和下行数据的交互,但蓝牙HFP协议有个问题:它无法做双卡外呼!蓝牙协议更多的是适配类似蓝牙耳机、车载终端这样的场景,在双卡方面它们均需要手机上做适配,配置"默认拨号卡",一次只能使用一张SIM手机卡进行呼叫。

同时,由于蓝牙电话方案采用外置USB配件的模式进行外呼。实践发现,短时间内通过蓝牙ATD指令高频进行外呼,会导致USB配件硬件故障,需要复位才能正常继续工作。

因此为了规避上述问题并兼容手机上的双卡双待的场景,将外呼和来电操作的触发指令,改为Android系统自带的操作事件进行处理。

但是,Android系统的功能在不修改手机操作系统的情况下,APP无法捕获到通话的语音,也无法获取的到通话的接通事件状态。因此,我们可以把外呼响应、振铃、接通、挂断、拒接等指令继续保持走蓝牙HFP协议的方式,实现【蓝牙HFP协议】与【Android系统通话功能】的互相融合,共同完成双卡双待业务的需求。

  • 三、双卡双待手机SIP选择

由上个章节的分析可知,市面上,至少在中国大陆,双卡双待手机是一个非常普遍的需求。从呼叫中心SIP协议的角度分析,对于双卡的支持通常有下述3种做法:

1、两张SIM卡用两个落地SIP线路同时注册到服务器,然后开两个坐席或一个号码池来进行调度和呼叫。

2、两张SIM卡用一个SIP线路注册到服务器,然后由服务器通过在SIP的INVITE消息中增加X-Param参数指定用某一个SIM卡发起呼叫

3、两张SIM卡用一个SIP线路注册到服务器,外呼时由app做轮流呼叫或随机指派一张卡进行外呼。

一般来说,第三种方案,与"双卡双待"这个概念基本就没什么关系了,这不就是Android手机设置里面的"默认外呼卡"管理的功能嘛:呼叫时使用默认外呼卡去呼叫,等到切换SIM卡呼叫时,手动或半自动的切换"默认外呼卡"然后再发起新的外呼。(事实上,拨号器APP的【固定SIM账号密码】起到的也是默认外呼卡的功能)。

在剩余的做法1和做法2中,做法2要求对SIP协议进行定制化的支持,大多数支持软交换的系统并不会专门支持你增加的X-Param参数,选用做法2会面临对接的SIP平台不兼容的风险。

因此,智能拨号器APP针对双卡设置多卡的做法采用做法1的方式,即APP检测到手机插入了多张SIM卡,将同时采用多条SIP中继线路,全部注册到SIP软交换平台

  • 四、手机转SIP的界面提示

智能拨号器APP中,"呼叫统计"选项卡的【拨号器平台信息】区域,用来展示拦截通话语音的SDK协议栈的工作状态(蓝牙电话方案由于采用蓝牙HFP协议来拦截语音,蓝牙连接成功则背景恢复白色)。

【SIP账号信息】和【SIM账号2信息】区域分别对应于手机上插入的SIM卡槽1和SIM卡槽2的手机卡号。若手机只插入了SIM卡1,则界面不会显示【SIM账号2信息】区域。

当两路中继SIP线路均成功连接到SIP软交换平台,则对应的区域的背景才会由黄色切换为白色背景,如下图右侧所示,表示"手机转SIP的功能已就绪",用户可以放心的由呼叫中心坐席进行外呼,手机产生的来电也将同步的转接到呼叫中心坐席上。

  • 五、APP应用设置

智能拨号器APP的应用设置中,可以配置上述描述的三方通话"手机空闲但坐席繁忙时,来电或第三方接口外呼时,要如何处理这个话务?以及在手机APP转SIP的使用过程中,手机会不会被拿起来直接拨打电话出去,这种拨打跟呼叫中心的坐席之间又是如何处理这个话务?"的场景。

用户可以在手机APP中,对手机这个中继设备的使用偏好进行个性化调整,使其能在通话转SIP和日常单机使用的场景,都能够正常的兼容和使用。如下图所示:

手机APP作为SIP软交换平台的落地线路的使用过程中,若要配置为【一机一账号】的模式,可在智能拨号器APP的应用设置中,开启"固定SIP账号密码"。

将手机设备固定使用某一个SIP软交换平台分配好的中继线路或落地线路的SIP号码。使其不随着手机插入不同的手机卡而切换SIP登录的账号。

  • 六、固定SIP账号密码

智能拨号器APP对用户类型进行了分类:【个人】、【企业】、【代理商】,仅【代理商】级别以上的用户才具有"固定SIP账号密码"和"修改SIP平台接口"入口的能力。

用户可在界面中,将软交换平台配置的网关账号、落地线路SIP账号,填写到对应的属性栏中,确定保存即可正常生效。如下图所示:

  • 七、接口配置和落地线路SIP拉取

如果不想手动填写固定的SIP账号密码,也可点击界面右侧的【拉取SIP号】按钮,在弹框中,输入手机号或01、02这种序号,手动拉取SIP软交换系统中分配的落地线路的中继SIP账号。如下图所示:

用户也可以手动修改账号拉取的http://接口,进行自定义平台的配置和管理。

  • 八、动态绑定手机号

如前面章节所述,非【固定SIP账号密码】时,中继线路的SIP平台账号主要根据手机插入的SIM卡手机号进行读取和登录。智能拨号器APP初次使用时,若手机号尚未注册到SIP软交换平台,则手机APP会主动识别并弹窗提示框,提醒使用者将识别到的手机号添加到SIP软交换平台。便于后续手机APP进行转SIP中继线路的连接和使用。

添加界面如下图所示,按提示文本的描述进行填写即可。

  • 九、小结

至此,我们实现了将"手机转SIP软交换呼叫中心"对接的所有功能,用户可以使用电脑坐席,通过这个手机及SIM手机卡,正常的拨打电话给目标电话。APP对手机双卡双待的支持和并发呼叫也设置了一定程度的调度策略,方便用户在SIP软交换平台中组建号码池,进行批量外呼和智能通话调度。

同时,在各家软交换系统和呼叫中心的接入上,我们前期对接和适配了多家SIP软交换平台,如阿里云呼叫中心、磐石云、昆石VOS、OKCC等支持软交换的系统,将手机当作中继设备和落地线路,进行呼叫业务的使用,稳定性还算可以。

有兴趣和需求的朋友,可以下载APP进行功能和业务的尝试,看看是否符合自身业务的需求。

最后再次特意声明:此文章及文章内阐述的方法,仅为手机APP连接局域网内搭建SIP软交换平台和呼叫中心系统而使用,文中的"手机做SIP中继网关"是指做局域网内的中继网关,实现的是局域网内的互联互通。依照《中华人民共和国反电信诈骗法》等法律法规的要求,任何单位和个人不得非法制造、买卖、提供或者使用"具有改变主叫号码,虚拟拨号,互联网电话违规接入公用电话网络等功能的设备、软件"。请各位读者和朋友不要将其接入互联网进行使用,请勿触碰法律的红线,谢谢。

相关推荐
RainbowC03 小时前
GapBuffer高效标记管理算法
android·算法
程序员码歌4 小时前
豆包Seedream4.0深度体验:p图美化与文生图创作
android·前端·后端
、花无将4 小时前
PHP:下载、安装、配置,与apache搭建
android·php·apache
shaominjin1235 小时前
Android 约束布局(ConstraintLayout)的权重机制:用法与对比解析
android·网络
我命由我123456 小时前
Android 对话框 - 对话框全屏显示(设置 Window 属性、使用自定义样式、继承 DialogFragment 实现、继承 Dialog 实现)
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
怪兽20147 小时前
请例举 Android 中常用布局类型,并简述其用法以及排版效率
android·面试
应用市场7 小时前
Android Bootloader启动逻辑深度解析
android
爱吃水蜜桃的奥特曼8 小时前
玩Android Harmony next版,通过项目了解harmony项目快速搭建开发
android·harmonyos
shaominjin1238 小时前
Android 中 RecyclerView 与 ListView 的深度对比:从设计到实践
android