手机实时提取SIM卡打电话的信令声音-智能拨号器的SIP线路-双卡双待单通方案

手机实时提取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. 手机只插入了1张SIM卡。
  2. 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卡打电话的信令声音-双卡手机来电如何获取哪一个卡的来电

下一篇:编写中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/498066.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++--类与对象

1.封装 封装是c面向对象的三大特性之一 将属性和行为作为一个整体 将属性和行为加以权限控制 语法: class 类名{ 访问权限: 属性/行为 }; 访问权限 public 公共权限 类内类外均可以访问 protected 保护权限 类内可以访问,类外不可以访问 pr…

遗传算法与深度学习实战(29)——编码卷积自编码器架构

遗传算法与深度学习实战(29)——编码卷积自编码器架构 0. 前言1. 构建卷积自编码器2. 构建卷积自编码器基因序列3. 解析基因序列构建模型小结系列链接 0. 前言 使用遗传算法 (Genetic Algorithm, GA) 构建自编码器 (AutoEncoder, AE) 优化器时&#xff…

蓝桥杯(Java)(ing)

Java前置知识 输入流: (在Java面向对象编程里面有提过相关知识) // 快读快写 static BufferedReader in new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter out new BufferedWriter(new OutputStreamWriter…

Ajax数据爬取

有时我们用requests 抓取页面得到的结果,可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,而使用requests 得到的结果中并没有这些数据。这是因为 requests 获取的都是原始 HTML 文档,而浏览器中的页面是JavaScript 处理…

tcpdump 网络数据包分析工具

简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的…

手机发烫怎么解决?

在当今这个智能手机不离手的时代,手机发烫成了不少人头疼的问题。手机发烫不仅影响使用手感,长期过热还可能损害手机硬件、缩短电池寿命,甚至引发安全隐患。不过别担心,下面这些方法能帮你有效给手机 “降温”。 一、使用习惯方面…

BUUCTF Pwn ciscn_2019_es_2 WP

1.下载 checksec 用IDA32打开 定位main函数 发现了个假的后门函数: 看看vul函数: 使用read读取 想到栈溢出 但是只有48个 只能覆盖EBP和返回地址 长度不够构造 所以使用栈迁移: 栈迁移需要用到leave ret 使用ROPgadget找地址: …

IEDA 使用auto Dev编码助手配置Deep Seek V3

文章目录 API Key的申请和创建auto Dev的下载auto Dev的安装Deep seek V3的连接配置和注意事项错误解决:You LLM server Key is empty API Key的申请和创建 登陆Deep Seek开放平台,创建API Key 并复制 auto Dev的下载 auto Dev项目地址,发…

vue3学习笔记(6)-生命周期、hooks

1.生命周期 <template><div><div>{{ a }}</div><div click"test"></div></div> </template> <script setup lang"ts" name"hi"> import { ref, onBeforeMount, onMounted, onBeforeUpdat…

#端云一体化开发# #HarmonyOS Next#《说书人》鸿蒙原生基于角色的对话式文本编辑开发方案

1、写在前面 过去的一百年里&#xff0c;在“编程”的这个行业诞生之初&#xff0c;人们采用面向过程的方式进行开发&#xff0c;但是&#xff0c;伴随着程序规模的日益增大&#xff0c;程序的复杂度也随之增加&#xff0c;使用结构化编程方法来管理复杂的程序逻辑变得越来越困…

【ELK】ES单节点升级为集群模式--太细了!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言准备工作1. 查看现状【单节点】2. 原节点改集群模式3. 改es配置文件&#xff0c;增加集群相关配置项4. *改docker映射的端口* 启动新节点5. docker-compose起一…

Python跨年烟花

目录 系列文章 写在前面 技术需求 完整代码 下载代码 代码分析 1. 程序初始化与显示设置 2. 烟花类 (Firework) 3. 粒子类 (Particle) 4. 痕迹类 (Trail) 5. 烟花更新与显示 6. 主函数 (fire) 7. 游戏循环 8. 总结 注意事项 写在后面 系列文章 序号直达链接爱…

未来网络技术的新征程:5G、物联网与边缘计算(10/10)

一、5G 网络&#xff1a;引领未来通信新潮流 &#xff08;一&#xff09;5G 网络的特点 高速率&#xff1a;5G 依托良好技术架构&#xff0c;提供更高的网络速度&#xff0c;峰值要求不低于 20Gb/s&#xff0c;下载速度最高达 10Gbps。相比 4G 网络&#xff0c;5G 的基站速度…

艾体宝方案丨全面提升API安全:AccuKnox 接口漏洞预防与修复

一、API 安全&#xff1a;现代企业的必修课 在现代技术生态中&#xff0c;应用程序编程接口&#xff08;API&#xff09;扮演着不可或缺的角色。从数据共享到跨平台集成&#xff0c;API 成为连接企业系统与外部服务的桥梁。然而&#xff0c;伴随云计算的普及与微服务架构的流行…

# 【鸿蒙开发】多线程之Worker的使用

【鸿蒙开发】多线程之Worker的使用 文章目录 【鸿蒙开发】多线程之Worker的使用前言一、Worker的介绍二、注意事项三、Worker使用示例1.新建一个Worker2.主线程使用Worker3.子线程Worker的使用 四、效果展示 前言 本文主要介绍了多线程的方法之一&#xff0c;使用Worker开启多…

leetcode 面试经典 150 题:矩阵置零

链接矩阵置零题序号73题型二维数组解题方法标记数组法难度中等熟练度✅✅✅✅ 题目 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1]…

适用于项目经理的跨团队协作实践:Atlassian Jira与Confluence集成

适用于项目经理的跨团队协作实践&#xff1a;Atlassian Jira与Confluence集成 现代项目经理的核心职责是提供可视性、保持团队一致&#xff0c;并确保团队拥有交付出色工作所需的资源。在过去几年中&#xff0c;由于分布式团队的需求不断增加&#xff0c;项目经理这一角色已迅速…

MySQL官网驱动下载(jar包驱动和ODBC驱动)【详细教程】

1.打开MySQL的官网&#xff0c;选择下载(Download) MySQL[这里是图片001]https://www.mysql.com/cn/ 2.往下划点击MySQL Community(GPL)Downloads 3.要下载MySQL的jar包的选择Connector/J 4.进入后&#xff0c;根据自己的需求选择相应的版本 5.下载完成后&#xff0c;进行解压…

WPF 绘制过顶点的圆滑曲线 (样条,贝塞尔)

在一个WPF项目中要用到样条曲线&#xff0c;必须过顶点&#xff0c;圆滑后还不能太走样&#xff0c;捣鼓一番&#xff0c;发现里面颇有玄机&#xff0c;于是把我多方抄来改造的方法发出来&#xff0c;方便新手&#xff1a; 如上图&#xff0c;看代码吧&#xff1a; ----------…

北京某新能源汽车生产及办公网络综合监控项目

北京某新能源汽车是某世界500强汽车集团旗下的新能源公司&#xff0c;也是国内首个获得新能源汽车生产资质、首家进行混合所有制改造、首批践行国有控股企业员工持股的新能源汽车企业&#xff0c;其主营业务包括纯电动乘用车研发设计、生产制造与销售服务。 项目现状 在企业全…