freeswitch如何判断挂机方

news/2024/11/28 11:31:09/

 

概述

freeswitch作为VOIP的软交换平台,需要对呼叫的信息做判断和归类。

常见的呼叫信息中,挂机方向的信息对于话单统计有很大的用处。

但是fs的原始话单和日志中并没有挂机方向的信息。

环境

centos:CentOS7

freeswitch:v1.10.7

GCC:4.8.5

测试方案

启动freeswitch之后,通过fs_cli查看打印信息,在命令行输入挂机事件监听命令。

freeswitch@localhost.localdomain> /event plain CHANNEL_HANGUP_COMPLETE

RECV EVENT

Event-Name: CHANNEL_HANGUP_COMPLETE

Call-Direction: inbound

variable_sip_hangup_disposition: send_bye

RECV EVENT

Event-Name: CHANNEL_HANGUP_COMPLETE

Call-Direction: outbound

variable_sip_hangup_disposition: recv_bye

从console打印信息中,可以看到挂机事件有两路,inbound(aleg)和outbound(bleg)。

inbound(aleg)的“variable_sip_hangup_disposition”是“send_bye”,表示fs对A路发送了bye消息。

outbound(bleg)的“variable_sip_hangup_disposition”是“recv_bye”,表示fs从B路接收了bye消息。

从A路和B路的“variable_sip_hangup_disposition”可以得出该通呼叫的挂机方是被叫B路。

源码信息

通过“sip_hangup_disposition”搜索源代码,可以查找到该字段所有值的列表。

recv_bye

recv_cancel

recv_refuse

send_bye

send_cancel

send_refuse

我们以bleg的挂机事件中“sip_hangup_disposition”字段为例。

未接通的场景。

outbound(bleg)为send_cancel,A路挂机。

outbound(bleg)为recv_refuse,B路挂机。

接通的场景。

outbound(bleg)为send_bye,A路挂机。

outbound(bleg)为recv_bye,B路挂机。

总结

freeswitch作为软交换的场景下,不考虑fs自身挂断的情况,通过对挂机事件中的“sip_hangup_disposition”字段分析,可以得出呼叫的挂机方向。

如果fs作为业务服务器,业务流程中有拒绝呼叫的情况下,挂机方向的判断会更复杂。

可以在cdr_csv的配置中加入“${sip_hangup_disposition}”字段,辅助判断挂机方向。

空空如常

求真得真


http://www.ppmy.cn/news/360285.html

相关文章

挂机宝搭建教程

nokvm主控面板推荐操作系统版本 Centos7.6.1810 (纯净的操作系统,无其他软件环境) 主控面板硬件要求配置: - 最低要求 推荐配置 内存 2G 2G CPU - - 带宽 不低于2M 2M 磁盘 / 分区不少于100GB 100GB 主控面板安装&#xff1…

vc编写挂机锁

凡是去过网吧的朋友,对挂机锁一定不陌生,鼠标被限定,键盘关键按键被屏蔽。那么这是如何实现的呢,我们也来写一个吧。 // lockDlg.cpp : implementation file//#include "stdafx.h"#include "lock.h"#include…

关于电脑锁机

电脑锁机的种类 电脑锁机众所周知分为三种 1. 屏幕锁 2. 用户锁 3. 硬盘锁 首先屏幕锁 原理:软件打开后置于最上层并覆盖其他软件界面,通常是全屏,这种锁机比较有威慑性因为界面可以做的比较震撼人心,通常会把一些可以关闭窗口的东西给禁用…

分布式锁解决方案_Redis实现的分布式锁原理

获取锁 互斥:确保只有一个线程获得锁 添加锁 利用setnx的互斥性 启动Redis的我们进行测试看看怎么能某个数据来获得锁 setnx命令表示上锁只要是aa被创建出来我们不删除aa或者设定时间自动删除,那么这把锁就不能被释放开 释放锁 手动释放锁 如果我们…

从CAP角度分析redis分布式锁和zookeeper锁区别

前言: 在分布式系统中,一致性( c )意味着每次读取都会获取最新的写入数据或异常,可用性( a )意味着可以对每个请求得到非异常的响应,而不保证获取最新的写入数据。 分区容错( p )意味着即使节点之间的网络异常,系统也…

C#语言实例源码系列-电脑系统挂机锁

专栏分享 点击跳转=>Unity3D特效百例点击跳转=>案例项目实战源码点击跳转=>游戏脚本-辅助自动化点击跳转=>Android控件全解手册👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是…

C#挂机锁(禁用任务管理器,禁用windows键和组合键alt+f4等等)

话不多说,直接上菜! using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;n…

Matlab实现决策树算法(附上完整仿真源码)

决策树是一种常见的机器学习算法,它可以用于分类和回归问题。在本文中,我们将介绍如何使用Matlab实现决策树算法。 文章目录 1. 数据预处理2. 构建决策树模型3. 测试模型4. 可视化决策树5. 总结6. 完整仿真源码下载 1. 数据预处理 在使用决策树算法之前…