FreeSWITCH 拨打带分机号的电话之实现原理(即真人接听检测))

哪些场景需要真人接听检测?

  • 呼叫有分机号的虚拟号(隐私号)

  • 使用没开通反极信号的模拟线路进行外呼

  • 呼叫企业总机转分机

虚拟号(隐私号)之分机号

在外卖、网购、物流等行业为了保护用户隐私,平台会把联系电话替换成一个零时的中间号码,拨打中间号码会呼叫转移到实际的手机上。这个中间号码称之为隐私号或者虚拟号。
为了解决隐私号不够用的问题,平台给一个虚拟号分配了4位的分机号,1个虚拟号就可以对应9999个真实的手机号了。

反极信号

模拟电话通过检测反极信号来获取是否应答,随着电话网络升级换代,现在大部分运营商都不给模拟电话开通反极信号。

呼叫带分机的虚拟号(隐私号)流程

拨打11位手机号码 -> 听到输入分机号提示音
-> 输入分机号 -> 等待用户接听

大部分手机也支持直接拨号 “虚拟号,分机号”,免去了手动输入分机号的麻烦,android的实现原理也是接通后延时1秒发送按键(DTMF)实现的。

FreeSWITCH呼叫带分机的虚拟号的命令

originate {ignore_early_media=true}sofia/gateway/default/虚拟号 send_dtmf:W1234,park inline
小写 w 延迟半秒发送
大写 W 延迟1秒发送
存在的问题
1 发送的DTMF(分机号),虚拟号平台可能收不到
2 无法获取真实的被叫是否接通

发送分机号原理

  • 通过发送DTMF来实现输入分机号,DTMF的传输方式主要有rfc2833和inband(带内)
  • 比较常见的问题为明明发送了正确的分机号,却听到了的类似提示音“请确定分机号后再次拨打电话”,出现这个问题是DTMF传输过程丢失了。
  • 主要是因为电话交换机兼容性的原因有可能出现DTMF丢失,比如有的平台的虚拟号可以拨通,有的平台的虚拟号却不可以。

虚拟号平台接收分机号的流程

在这里插入图片描述

解决DTMF丢失的思路

  • 电话接通后,先检测提示音,检测到提示音停止后,用 rfc2833 方式发送一次。如果3秒内都是静音用inband(带内)方式再发送一次。
  • 电话接通后等待1秒,用 rfc2833 方式发送一次。如果10秒内检测到提示音用inband(带内)方式再发送一次。
  • FreeSWITCH rfc2833发送DTMF的函数是 senddtmf
    带内发送DTMF的函数是gentones

呼叫虚拟号可能出现的呼叫结果

1、平台接收不到DTMF(分机号),提示“请确定分机号后再次拨打电话”后挂断
2、平台转接真实的被叫后,真实的被叫拒接、无法接通、关机等情况,比如提示音”你拨打的电话正忙请稍后再拨”
3、平台转接真实的被叫后,真实的被叫应答,转接成功了。

判断“平台接收不到DTMF”的思路

  • 可以预先采集虚拟号平台的提示音。拨通虚拟号后提取声纹和预先采集的声纹进行匹配,如果检测到声音的声纹都是虚拟号平台的提示音,没其他声音(回铃音,彩铃音),也没有检测到未知声纹。就可以认为虚拟号平台没接收到有效的分机号,未执行转接。
  • 不需要预先采集虚拟号平台的提示音。拨通小号平台后,等待小号平台播放“请输入分机号”的提示音,采集声纹,然后发送分机号(DTMF),如果后续声音的声纹,和第一个提示音的声纹匹配,没其他声音(回铃音,彩铃音),也没有检测到未知声纹。就可以认为虚拟号平台没接收到有效的分机号,未执行转接。(如果接收按键超时的提示音和请输入分机号的提示音不是一个人录音的这个方法就会出现检测错误了,所以建议使用预先采集提示音的方法)

判断“真实被叫无法接通”的思路

  • 思路1:预先收集各种呼叫失败的提示音,进行声纹匹配。

  • 思路2:使用ASR识别提示音内容,根据提示音内容判断。

判断“真人接听”思路

真人接通前可能出现的 声音是彩铃,回铃音, 呼叫失败的各种提示音,只要不符合以上特征就可以认为是真人接听了。
当然判断真人接听没一个简单的方法,需要多维度分析,根据我多年的研究总结出以下思路

  • 检测噪音法
    在这里插入图片描述
  • 检测静默法
    在这里插入图片描述
    在这里插入图片描述
  • 声纹检测法
    预先收集所有呼叫失败的各种提示音(空号、关机、通话中、留言等),如果检测到声纹,不是呼叫失败的提示音,那么就可以认为是真人的声音了。

开源声纹提取工具

  • kaldi
  • WeSpeeker
  • PaddleSpeech

开源语音识别工具

  • FunASR (阿里达摩院开源大型端到端语音识别工具包) 开源了6万小时训练的工业级的语音识别模型。
    强烈推荐,顶顶通实时质检系统就集成了FunASR。
  • WeNet 出门问问语音团队联合西工大语音实验室开源的一款面向工业落地应用的语音识别工具包。
  • Whisper OpenAI开源的通用语音识别模型。

我后续会根据以上思路开发FreeSWITCH虚拟号呼叫进度检测模块。如果有需要可以联系顶顶通!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python实现元旦多种炫酷高级倒计时_附源码【第20篇—python过元旦】

文章目录 🌍python实现元旦倒计时 — 初级(控制台)⛅实现效果🌋实现源码🌜源码讲解 🌍python实现元旦倒计时 — 中级(精美动态图)⛅实现效果🌋实现源码🌜源码讲解 🌍python实现元旦倒计时 — 高…

STM32移植LVGL图形库

1、问题1:中文字符keil编译错误 解决方法:在KEIL中Options for Target Flash -> C/C -> Misc Controls添加“--localeenglish”。 问题2:LVGL中显示中文字符 使用 LVGL 官方的在线字体转换工具: Online font converter -…

JS中的Set和Map数据结构

新的数据结构出现,往往是为了解决之前的痛点,更快更便捷的实现代码逻辑。本篇文章咱们一起学习一下JS中Set和Map数据结构。 Set 定义 Set结构中储存的是值,类似于数组,但是储存的值具有唯一性。定义Set结构方式如下图&#xff1…

【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推荐--…

Unity协程的定义、使用及原理,与线程的区别、缺点全方面解析

目录 协程的定义及简介 协程的用途 定时器 将复杂程序分帧执行 等待某些条件完成后执行后续 异步加载资源 协程的原理 MonoBehaviour中每一帧的游戏循环 迭代器 IEnumerator 接口 具体执行过程 协程和线程的区别 协程的缺点 无法返回值 依赖于MonoBehaviour 维护…

Linux学习笔记8-Uboot移植-网络设置和其他坑的解决

Linux之所以被称为操作系统,肯定是需要有引导程序来启动各个关键外设的运行,这里可以和个人电脑PC做个类比。我们在开机的时候是不是先要进入BIOS,BIOS在初始化硬盘、内存、USB接口、网口等之后,才可以进入Windows系统对吧&#x…

CUMT--Java复习--文件及IO流

目录 一、文件 1、文件系统和路径 2、File类 3、FilenameFilter接口 二、IO流 1、流的分类 2、流的体系结构 三、字节流 1、InputStream 2、OutputStream 四、字符流 1、Reader 2、Writer 五、过滤流和转换流 1、过滤流 2、转换流 六、序列化 1、对象序列化…

LeetCode 1954. 收集足够苹果的最小花园周长:数学O(1)的做法

【LetMeFly】1954.收集足够苹果的最小花园周长:数学O(1)的做法 力扣题目链接:https://leetcode.cn/problems/minimum-garden-perimeter-to-collect-enough-apples/ 给你一个用无限二维网格表示的花园,每一个 整数坐标处都有一棵苹果树。整数…

DRF之初识

一、序列化和反序列化 api接口开发,最核心最常见的一个过程就是序列化 【1】序列化 把我们能识别的数据结构(python的字典,列表,对象)转换成其他语言(程序)能识别的数据结构。例如: 我们在django中获取到的数据默认是模型对象(…

【论文解读】3D视觉标定的显式文本解耦和密集对齐(CVPR 2023)

来源:投稿 作者:橡皮 编辑:学姐 论文链接:https://arxiv.org/abs/2209.14941 开源代码:https://github.com/yanmin-wu/EDA 图1所示。文本解耦,密集对齐的3D视觉标定。文本中的不同颜色对应不同的解耦分量。…

Windows 11中显示文件扩展名的方法与Windows 10大同小异,但前者更人性化

默认情况下,Windows 11会隐藏已知文件类型的文件扩展名。这可能会使在不首先打开文件的情况下很难识别文件类型。 幸运的是,你可以将Windows 11配置为显示已知文件类型的扩展名。该方法类似于Windows 10,但该选项现在组织在下拉菜单中&#…

[kubernetes]控制平面ETCD

什么是ETCD CoreOS基于Raft开发的分布式key-value存储,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布式锁等)etcd像是专门为集群环境的服务发现和注册而设计,它提供了数据TTL失效、数据改变监视、多值、目录监听、…

cygwin64路径转换小工具

文章目录 cygwin64路径转换小工具改善效果实现函数END cygwin64路径转换小工具 改善 在cygwin64做实验呢, 用VSCODE自己加的cygwin64的启动命令行作为控制台. 如果是一个比较长的windows路径, 输入起来真的烦. 做了一个就几句代码的小工具, 让输入路径时, 可以从工具上拷贝到…

2023.12.22 关于 Redis 数据类型 String 常用命令

目录 引言 String 类型基本概念 SET & GET SET 命令 GET 命令 MSET & MGET MSET 命令 MGET 命令 SETNX & SETEX & PSETEX SETNX 命令 SETEX 命令 PSETEX 命令 计数命令 INCR 命令 INCRBY 命令 DECR 命令 DECRBY 命令 INCRBYFLOAT 命令 总结…

代码随想录27期|Python|Day24|回溯法|理论基础|77.组合

图片来自代码随想录 回溯法题目目录 理论基础 定义 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 回溯是递归的副产品,只要有递归就会有回溯。回溯函数也就是递归函数,指的都是一个函数。 基本问题 组合问题(无序&…

Spring(3)Spring从零到入门 - Spring整合技术及AOP事务管理

Spring(3)Spring从零到入门 - Spring整合技术及AOP事务管理 文章目录 Spring(3)Spring从零到入门 - Spring整合技术及AOP事务管理4 Spring整合技术示例4.1 Spring整合Mybatis4.1.1 Mybatis开发回顾4.1.2 整合Spring分析4.1.3 Spri…

AI项目十九:YOLOV8实现目标追踪

若该文为原创文章,转载请注明原文出处。 主要是学习一下实现目标追踪的原理,并测试一下效果。 目的是通过YOLOV8实现人员检测,并实现人员追踪,没个人员给分配一个ID,实现追踪的效果。 也可以统计人数。在小区办公楼…

JavaScript中的prototype和_proto_的关系是什么

JavaScript中的prototype和_proto_的关系是什么 __proto__ 是 JavaScript 中对象的一个内部属性,它指向该对象的原型。JavaScript 中每个对象都有一个 __proto__ 属性,通过它可以访问对象的原型。prototype 是函数对象特有的属性,每个函数都…

5. 创建型模式 - 单例模式

亦称: 单件模式、Singleton 意图 单例模式是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。 问题 单例模式同时解决了两个问题, 所以违反了单一职责原则: 保证一个类只有一…