手机实时提取SIM卡打电话的信令声音
--智能拨号器的SIP线路-双卡双待单通方案
- 一、前言
蓝牙电话的技术方案最初是从蓝牙耳机和车机蓝牙的使用领域延伸出来的技术方式。通过蓝牙的HFP协议,把手机通话的声音和通话事件状态提取出来进行复用和处理。但中国大陆现行的手机基本都是双卡双待手机,在外呼的时候通常采用默认呼叫卡或者呼叫的时候在手机屏幕中弹框进行实时选择后外呼。通常的蓝牙耳机和车机拨打手机电话外呼时基本都是手机中设置了默认拨号卡的方式进行呼叫。
来电时,不同的SIM卡来电在手机上是可以正常的展示是SIM1或SIM2卡产生的来电。但在蓝牙耳机中,由于它没有界面,以及蓝牙HFP协议并不存在卡1卡2的扩展指令,因此它们仅仅能够知道有来电、对方号码是多少。但是并不会知道本地到底是哪个SIM卡接收的来电。
智能拨号器Android的app中,前期由于采用蓝牙电话的方案进行外呼和来电的处理,在技术上同样无法做出SIM卡1和SIM卡2的区分。因此才衍生出了一系列的“切换SIM卡”、“手机固定SIP账号”等这些需求。
事实上,经过了前面几个篇章的技术预研,我们发现做为一个纯Android的app,其实完全可以做到代码在呼叫过程中指定到底是由哪一个SIM卡发起呼叫,也能做到来电时感知到是哪个SIM卡产生的来电。
这样的话,原先规划的配置一个SIP坐席,通过呼叫中心一对多配置,然后拨打一定周期和频率后就自动切换SIM卡的操作方式已经不能适应实际用户的使用场景。
我们依托现有技术,完全可以把配置两个SIP坐席号,使它们同时在线;呼叫时随机选择一个坐席对应的中继SIM卡进行呼叫即可,当手机处于呼叫状态时,当前SIP坐席或者另一个SIP坐席打算发起新呼叫时,由手机主动返回486-busy here即可。
来电的时候采用同样的调度方式,识别出来电的本地SIM卡的手机号,找到对应的SIP坐席,将通话业务和语音调度到对应的SIP坐席上接听或操作即可。
这样的话,就构成了【智能拨号器SIP线路的双卡双待单通】的方案,使SIP坐席跟双卡SIM手机一样,能同一时刻同时在线两个坐席,可以分别进行外呼和来电的操作。如果手机本身是“双卡双待双通”的手机,就更加不用考虑,默认就能支持两路并发的呼叫。
- 二、双SIP坐席+双SIM卡的外呼方案
本章的详细技术细节可以参考《手机实时提取SIM卡打电话的信令声音-智能拨号器的双SIM卡切换方案》这篇文档的实现方式。主要是Android操作系统本身天然就具备了双卡或多卡的对外呼叫方式。
在本次方案中,我们基于这个技术实现,将两个SIM卡的手机号,分别注册为SIP中继号码,并将其分别分流到两个局域网的SIP坐席上,使这两个SIP坐席号同时在线。
SIP坐席外呼时,由于手机设备是双卡双待“单通”的方式,因此这两个SIP坐席之间、以及单SIP坐席同时外呼多个目标时,手机均会自动的拒绝新呼叫的发起(直接返回486-busy here),最大限度的保障当前呼叫会话的完整进行。
- 三、双SIM卡的来电方案
本章的详细技术细节,在上一篇的《手机实时提取SIM卡打电话的信令声音-双卡手机来电如何获取哪一个卡的来电》中进行了详细的论述。来电时,手机设备的app,能够根据内部广播的事件触发,从广播参数中读取得到来电所在的SIM卡槽和来电号码。
手机app可以根据这个卡1/卡2的来电、以及来电号码,从SIP连接中找到对应的局域网SIP坐席,并将来电和对应的呼叫会话调度到对应的SIP坐席当中。
在呼叫过程中,由于通话状态和控制命令仍然依赖蓝牙的AT指令来进行,并且通话的声音仍然需要依赖蓝牙SLC连接建立的sco连接来进行传输,因此手机app仍然需要依赖外置的USB蓝牙模块+手机自带的蓝牙模块来进行,这部分的功能和呼叫逻辑与之前的蓝牙电话方案保持一致。
- 四、单SIM卡的呼叫方案
智能拨号器app在以下两种场景会存在单SIM卡的呼叫场景:
- 手机只插入了1张SIM卡。
- App中配置了【固定SIP账号密码】
在这些情况下,智能拨号器app仍然采用手机自带的【默认拨号卡】的呼叫策略。此时,蓝牙电话方案与蓝牙耳机、蓝牙车机拨打手机电话的使用方式完全相同。
- 五、手机固定SIP账号密码的方案
在实际使用过程中,手机终端作为运营商基站入网的终端节点,理论上不管它插入几张SIM卡甚至根本没有插入卡,只要手机它能正常发起电话呼叫,蓝牙电话方案都应该能将其分流到局域网SIP坐席中。
在这样的情况下,把手机设备作为SIP坐席的目标节点来进行对接,app中增设了【固定SIP账号密码】的功能,用户使用时可以在app的设置界面中手动录入中继SIP账号密码与局域网SIP服务器地址,或者输入序号或手机号进行账号的拉取。录入完毕后保存即可将中继SIP号码保存到手机中。
在SIP注册和呼叫时,手机app自动会读取这个【固定SIP账号密码】的数据,注册到局域网SIP平台中。这样,不管手机中插入或更换了什么SIM卡,手机号有任何不同,均不影响局域网SIP这一侧的功能和业务。
【固定SIP账号密码】的功能,就是为了这种场景而使用的,不管手机更换了多少张SIM卡,SIP坐席中对这个是不关注的。相反,默认方式是根据手机号来进行局域网中继SIP账号的注册和登录,插入1张SIM卡就注册一个SIP坐席,插入2张SIM卡就注册两个SIP坐席,若中途更换了SIM卡,则SIP会退出旧坐席号登录新手机号,调度得更加灵活。
- 六、切换SIM卡的操作方式
新的【双SIP坐席+双SIM卡的外呼方案】不再需要做切换SIM卡的操作,默认两张SIM卡的SIP坐席都同时在线。
针对上章节的“单SIM卡的呼叫方案”,手机app仍然保留了切换SIM卡的操作方式。用户在主界面右上角的设置图标点击出现的菜单中,可以点击【切换SIM卡】的菜单项,点击后自动跳转到手机本身的设置应用中,对手机SIM卡的默认拨号卡和默认上网卡进行设置。
SIM卡的默认拨号卡切换后,SIP坐席在【单SIM卡的呼叫方案】外呼时,将采用默认拨号卡的方式进行外呼,此部分功能与蓝牙电话方案之前的呼叫方式保持一致。
- 七、局限性和风险点
由上一篇文章《手机实时提取SIM卡打电话的信令声音-双卡手机来电如何获取哪一个卡的来电》中可知,当前这一批双SIM卡呼叫方案的功能,对Android操作系统的版本依赖相当的大。目前基本都要求手机安卓系统版本要在Android6.0及以上。
在Android系统中,API Level大于等于23,即Android6.0版本的手机,在大陆乃至全球市场上占据几乎100%的市场份额。因此在手机设备选型上,当前的双SIM卡呼叫方案基本不存在设备选型的问题。
同时,由于通话状态和控制命令仍然依赖蓝牙的AT指令来进行,并且通话的声音仍然需要依赖蓝牙SLC连接建立的sco连接来进行传输,因此手机app仍然需要依赖外置的USB蓝牙模块+手机自带的蓝牙模块来进行。
蓝牙电话方案中针对接通状态、来电接听/拒接操作,均通过蓝牙HFP协议的AT指令来完成。假设蓝牙模块在使用中因故障不能正常工作,或者后续规划的去掉外置蓝牙模块的场景下,手机的多SIM卡呼叫需要针对这块内容进行专项的分析和深入挖掘。
- 八、总结
从这一期的版本起,智能拨号器的手机app默认自动支持局域网双SIP坐席同时在线的能力。在呼叫和来电时手机app自动可以根据电话的呼叫方的手机号码,自动选择SIM1/SIM2的的手机卡进行外呼和来电的调度。真正的实现了局域网SIP坐席的双卡双待单通的电话呼叫方案。
上一篇:手机实时提取SIM卡打电话的信令声音-双卡手机来电如何获取哪一个卡的来电
下一篇:编写中。