手机实时提取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.mzph.cn/news/891187.shtml

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

相关文章

HTML——26.像素单位

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>像素</title></head><body><!--像素&#xff1a;1.指设备屏幕上的一个点&#xff0c;单位px&#xff0c;如led屏上的小灯朱2.当屏幕分辨率固定时&…

LeetCode:513.找二叉树左下角的

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;513.找二叉树左下角的 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的…

如何使用 ChatGPT Prompts 写学术论文?

第 1 部分:学术写作之旅:使用 ChatGPT Prompts 进行学术写作的结构化指南 踏上学术写作过程的结构化旅程,每个 ChatGPT 提示都旨在解决特定方面,确保对您的主题进行全面探索。 制定研究问题: “制定一个关于量子计算的社会影响的研究问题,确保清晰并与您的研究目标保持一…

Mcnemar‘s exact test

与卡方检验的区别 与fisher exact test区别

全面Kafka监控方案:从配置到指标

文章目录 1.1.监控配置1.2.监控工具1.3.性能指标系统相关指标GC相关指标JVM相关指标Topic相关指标Broker相关指标 1.4.性能指标说明1.5.重要指标说明 1.1.监控配置 开启JMX服务端口&#xff1a;kafka基本分为broker、producer、consumer三个子项&#xff0c;每一项的启动都需要…

网络安全威胁2024年中报告

下载地址&#xff1a; 网络安全威胁2024年中报告-奇安信

AI辅助编码提高病案首页主要诊断编码正确率数据优化方法(2025增量优化版附python源代码)

一、引言 1.1 研究背景与意义 在医疗信息化进程中,病案首页作为病历信息的核心浓缩,承载着疾病分类、医疗统计、医保结算等关键任务,其主要诊断编码的准确性至关重要。准确的编码不仅是医疗质量评估、科研数据分析的基石,更是合理分配医疗资源、保障医保精准支付的关键依…

雷电模拟器安装LSPosed

雷电模拟器最新版支持LSPosed。记录一下安装过程 首先到官网下载并安装最新版&#xff0c;我安装的时候最新版是9.1.34.0&#xff0c;64位 然后开启root和系统文件读写 然后下载magisk-delta-6并安装 ,这个是吾爱破解论坛提供的&#xff0c;号称适配安卓7以上所有机型&#x…

模型 10-10-10旁观思维

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。超脱当下&#xff0c;透视决策长远影响。 1 10-10-10旁观思维的应用 1.1 职业选择决策 背景&#xff1a;小张是一名大学毕业生&#xff0c;面对未来职业的选择感到迷茫。他擅长营销、策略和经济学&a…

ORM框架详解:为什么不直接写SQL?

想象一下&#xff0c;你正在开发一个小型的在线书店应用。你需要存储书籍信息、用户数据和订单记录。作为一个初学者&#xff0c;你可能会想&#xff1a;“我已经学会了SQL&#xff0c;为什么还要使用ORM框架呢&#xff1f;直接写SQL语句不是更简单、更直接吗&#xff1f;” 如…

合合信息亮相CSIG AI可信论坛,全面拆解AI视觉内容安全的“终极防线”

合合信息亮相CSIG AI可信论坛&#xff0c;全面拆解视觉内容安全的“终极防线”&#xff01; &#x1f42f; AI伪造泛滥&#xff0c;我们还能相信“眼见为实”吗&#xff1f; 近期&#xff0c;由中国图象图形学学会主办的CSIG青年科学家会议 AI可信论坛在杭州成功举办。本次论…

Linux实验报告9-进程管理

目录 一&#xff1a;实验目的 二&#xff1a;实验内容 (1)列出当前系统中的所有进程,如何观察进程的优先级? (2)查看当前终端运行的 bash 进程的 PID,在当前终端启动 vim 编辑器并让其在后台执行,然后列出在当前终端中执行的进程的家族树。 (3)请自行挂载U盘或光盘,然后…

17爬虫:关于DrissionPage相关内容的学习01

概述 前面我们已经大致了解了selenium的用法&#xff0c;DerssionPage同selenium一样&#xff0c;也是一个基于Python的网页自动化工具。 DrissionPage既可以实现网页的自动化操作&#xff0c;也能够实现收发数据包&#xff0c;也可以把两者的功能合二为一。 DressionPage的…

【Unity3D】Jobs、Burst并行计算裁剪Texture3D物体

版本&#xff1a;Unity2019.4.0f1 PackageManager下载Burst插件(1.2.3版本) 利用如下代码&#xff0c;生成一个Texture3D资源&#xff0c;它只能脚本生成&#xff0c;是一个32*32*32的立方体&#xff0c;导出路径记得改下&#xff0c;不然报错。 using UnityEditor; using Uni…

最短路径-Dijkstra 算法

前言 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的&#xff0c;因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法&#xff0c;解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展&#xff0c;直到扩展到终点…

ESP32 I2S音频总线学习笔记(一):初识I2S通信与配置基础

文章目录 简介为什么需要I2S&#xff1f;关于音频信号采样率分辨率音频声道 怎样使用I2S传输音频&#xff1f;位时钟BCLK字时钟WS串行数据SD I2S传输模型I2S通信格式I2S格式左对齐格式右对齐格式 i2s基本配置i2s 底层API加载I2S驱动设置I2S使用的引脚I2S读取数据I2S发送数据卸载…

Eclipse中引入NS3项目

参考资料&#xff1a; 博主&#xff1a;深度不睡觉 NS3的3.36版本将Eclipse作IDE_ns3使用eclipse-CSDN博客 从1.2安装eclipse开始 其中参考教程中省略的几点&#xff1a; 1.下载解压tar包 mkdir /Tools/Eclipse/EclipseTool # 新建目录 tar -zxvf /path/to/eclipse-cpp-20…

机器学习周报-TCN文献阅读

文章目录 摘要Abstract 1 TCN通用架构1.1 序列建模任务描述1.2 因果卷积&#xff08;Causal Convolutions&#xff09;1.3 扩张卷积&#xff08;Dilated Convolutions&#xff09;1.4 残差连接&#xff08;Residual Connections&#xff09; 2 TCN vs RNN3 TCN缺点4 代码4.1 TC…

Quartz任务调度框架实现任务动态执行

说明&#xff1a;之前使用Quartz&#xff0c;都是写好Job&#xff0c;指定一个时间点&#xff0c;到点执行。最近有个需求&#xff0c;需要根据前端用户设置的时间点去执行&#xff0c;也就是说任务执行的时间点是动态变化的。本文介绍如何用Quartz任务调度框架实现任务动态执行…

Spring-kafka快速Demo示例

使用Spring-Kafka快速发送/接受Kafka消息示例代码&#xff0c;项目结构是最基础的SpringBoot结构&#xff0c;提前安装好Kafka&#xff0c;确保Kafka已经正确启动 pom.xml&#xff0c;根据个人情况更换springboot、java版本等 <?xml version"1.0" encoding&qu…