freeswitch的话单模块

概述
最近因为业务需要,在看freeswitch中话单相关的一些模块。
在voip的使用过程中,话单是重要的基础模块,涉及到计费和问题查找。
呼叫话单最重要的一点是稳定,不能有错误或遗漏。
本章对fs的话单模块做整体梳理和简单介绍。
环境
centos:CentOS release 7.0 (Final)或以上版本
freeswitch:v1.8.7
GCC:4.8.5
话单模块
freeswitch中CDR相关模块较多,粗略列一下。
mod_cdr_csv
mod_cdr_mongodb
mod_cdr_pg_csv
mod_cdr_sqlite
mod_format_cdr
mod_json_cdr
mod_odbc_cdr
mod_radius_cdr
mod_xml_cdr
其中,mod_cdr_csv模块是默认编译和启动加载的cdr模块,其他模块需要用户自己根据需要编译和加载。
上面列出的模块,大部分可以根据名字猜测出模块的主要功能,比如,“mod_cdr_csv”模块表示把CDR话单写入CSV文件,“mod_cdr_mongodb”模块表示把CDR话单写入mongodb数据库。
每个模块都有自己单独的配置文件。
根据项目需求,这里主要关注CDR话单写入文件的模块,其他写数据库的模块暂时先略过。
mod_cdr_csv
freeswitch默认CDR模块,自动编译、安装、加载。
模块对应配置文件为“/usr/local/freeswitch/autoload_configs/cdr_csv.conf.xml”。
配置文件中可以设置多个CDR模板,并根据通道变量“accountcode”的值来对应模板名出话单。
CDR模板中可以使用fs会话的所有通道变量,并根据需求设置模板格式。
修改配置文件“/usr/local/freeswitch/autoload_configs/cdr_csv.conf.xml”。
<template name="example">{"data":{"ACCOUNTCODE":"${ACCOUNTCODE}","channel_va_test":"${channel_va_test}","${caller_id_name}","${caller_id_number}","${destination_number}","${context}","${start_stamp}","${answer_stamp}","${end_stamp}","${duration}","${billsec}","${hangup_cause}","${uuid}","${bleg_uuid}","${accountcode}","${read_codec}","${write_codec}"}}</template>
<template name="snom">"${caller_id_name}","${caller_id_number}","${destination_number}","${context}","${start_stamp}","${answer_stamp}","${end_stamp}","${duration}","${billsec}","${hangup_cause}","${uuid}","${bleg_uuid}", "${accountcode}","${read_codec}","${write_codec}","${sip_user_agent}","${call_clientcode}","${sip_rtp_rxstat}","${sip_rtp_txstat}","${sofia_record_file}"</template>
设置通道变量“ACCOUNTCODE”为“snom”,呼叫测试。
呼叫结束之后,可以在“/usr/local/freeswitch/log/cdr-csv/Master.csv”文件中找到话单如下。
{"data":{"ACCOUNTCODE":"snom","channel_va_test":"","Outbound Call","1001","1001","ext_test","2022-06-23 14:36:25","2022-06-23 14:36:27","2022-06-23 14:36:33","8","6","ALLOTTED_TIMEOUT","cdbb0266-f2be-11ec-b928-a1f80b63cfc8","","snom","PCMA","PCMA"}}
同时,在“/usr/local/freeswitch/log/cdr-csv/snom.csv”文件中找到话单如下。
"Outbound Call","1001","1001","ext_test","2022-06-23 14:36:25","2022-06-23 14:36:27","2022-06-23 14:36:33","8","6","ALLOTTED_TIMEOUT","cdbb0266-f2be-11ec-b928-a1f80b63cfc8","", "snom","PCMA","PCMA","FreeSWITCH-mod_sofia/1.6.19+git~20220408T073647Z~f81cb238da~64bit","","","",""
mod_json_cdr
mod_json_cdr模块默认不编译,不安装,不加载。
进入“freeswitch-1.6.19_master/src/mod/event_handlers/mod_json_cdr”目录,编译安装。
make install
cd /usr/local/freeswitch/mod
ll -tr
-rwxr-xr-x. 1 root root 122096 Jul 6 16:00 mod_json_cdr.so
-rwxr-xr-x. 1 root root 1289 Jul 6 16:00 mod_json_cdr.la
cd /usr/local/freeswitch/mod/autoload_configs
vi modules.conf.xml
<load module="mod_json_cdr"/>
模块对应配置文件“/usr/local/freeswitch/conf/autoload_configs/json_cdr.conf.xml”。
呼叫测试。
呼叫结束之后,可以在“/usr/local/freeswitch/log/json_cdr/49704084-fd13-11ec-8158-19509e341d8a.cdr.json”文件中找到话单如下。
{
"core-uuid":"3e74f030-fd13-11ec-8155-19509e341d8a",
"switchname":"localhost.localdomain",
"channel_data":{
"state":"CS_REPORTING",
"direction":"outbound",
"state_number":"11",
"flags":"0=1;1=1;2=1;20=1;37=1;38=1;40=1;43=1;53=1;60=1;95=1;112=1;113=1;122=1",
"caps":"1=1;2=1;3=1;4=1;5=1;6=1"
},
"callStats":Object{...},
"variables":Object{...},
"app_log":Object{...},
"callflow":Array[2]
}
mod_format_cdr
mod_format_cdr模块默认不编译,不安装,不加载。
进入“freeswitch-1.6.19_master/src/mod/event_handlers/mod_format_cdr”目录,编译安装。
make install
cd /usr/local/freeswitch/mod
ll -tr
-rwxr-xr-x. 1 root root 122096 Jul 6 16:00 mod_format_cdr.so
-rwxr-xr-x. 1 root root 1289 Jul 6 16:00 mod_format_cdr.la
cd /usr/local/freeswitch/mod/autoload_configs
vi modules.conf.xml
<load module="mod_format_cdr"/>
模块对应配置文件“/usr/local/freeswitch/autoload_configs/format_cdr.conf.xml”
呼叫测试。
呼叫结束之后,可以在“/usr/local/freeswitch/log/format_cdr”目录找到俩个话单文件。
cat a_49704084-fd13-11ec-8158-19509e341d8a.cdr.json
{
"core-uuid":"3e74f030-fd13-11ec-8155-19509e341d8a",
"switchname":"localhost.localdomain",
"channel_data":Object{...},
"callStats":Object{...},
"variables":Object{...},
"app_log":Object{...},
"callflow":Array[2]
}
cat a_49704084-fd13-11ec-8158-19509e341d8a.cdr.xml
<?xml version="1.0"?>
<cdr core-uuid="3e74f030-fd13-11ec-8155-19509e341d8a" switchname="localhost.localdomain">
<channel_data>
...
</channel_data>
<call-stats>
...
</call-stats>
<variables>
...
</variables>
<app_log>
...
</app_log>
<callflow dialplan="XML" unique-id="4b39417c-fd13-11ec-815a-19509e341d8a" clone-of="4970484a-fd13-11ec-8159-19509e341d8a" profile_index="2">
...
</callflow>
</cdr>
总结
mod_cdr_csv模块是fs的基础话单模块。
mod_format_cdr模块的功能包含了mod_json_cdr和mod_xml_cdr俩个模块的功能,是后二者的超集,具有替换作用。
空空如常
求真得真
freeswitch的话单模块的更多相关文章
- FreeSWITCH 加载模块过程解读
今天来学习FreeSWITCH 加载模块过程. 哪些模块需要编译,是由源码下的 modules.conf 文件决定的. 哪些模块在程序启动时自动加载,是由 freeswitch/conf/autolo ...
- freeswitch插件式模块接口实现方式
概述 freeswitch的外围模块是插件式的,可以动态的加载和卸载,使用起来非常的灵活和方便. 如果我们自己来设计一个开源的代码框架,相信这种插件式的模块结构是非常适合多人合作的模式. 本文对fs的 ...
- freeswitch的mod_curl模块
概述 有时候,我们需要在呼叫的过程中,或过程后调用web api接口. freeswitch的mod_curl模块可以很方便的实现web api的接口调用. mod_curl模块默认不安装,需要进入模 ...
- freeswitch使用mod_shout模块播放mp3
概述 freeswitch 在对VOIP语音通话中,可以通过playback命令播放IVR语音文件. 默认情况下,freeswitch支持wav文件,也可以直接播放VOIP中常见编解码的G711文件. ...
- layui---form表单模块
虽然对layui比较熟悉了,但是今天有时间还是将layui的form表单模块重新看一下. https://www.layui.com/doc/modules/form.html 一.更新渲染 layu ...
- freeswitch编译mod_av模块
需要先编译libav库 编译libav下载:git clone https://freeswitch.org/stash/scm/sd/libav.git cd libav ./configure - ...
- getFieldDecorator用法(二)——封装表单模块
后台管理系统经常用到表单查询,因此做了个封装 myorder.js import React from 'react'; import { Card, Button, Table, Form, Sel ...
- coding++ :Layui-form 表单模块
虽然对layui比较熟悉了,但是今天有时间还是将layui的form表单模块重新看一下. https://www.layui.com/doc/modules/form.html 1):更新渲染 lay ...
- 表单模块 layui-form
使用 layui针对各种表单元素做了比较全面的Ui支持,在Ui渲染只要求一点.,在表单体所在父元素加上class="layui-form" 监听事件 提交按钮监听,注意需要加·la ...
随机推荐
- QT快速入门
QT快速入门 本文档将介绍QT工程的创建.UI界面布局,并以计数器为例了解QT中多线程的用法,最终完成一个基础的QT项目. 1 创建QT工程文件 在安装好QT之后,能够在其安装组件中找到Qt Crea ...
- python爬取豆瓣电影Top250(附完整源代码)
初学爬虫,学习一下三方库的使用以及简单静态网页的分析.就跟着视频写了一个爬取豆瓣Top250排行榜的爬虫. 网页分析 我个人感觉写爬虫最重要的就是分析网页,找到网页的规律,找到自己需要内容所在的地方, ...
- 深入C++06:深入掌握OOP最强大的机制
深入掌握OOP最强大的机制 1. 继承的基本意义 类与类之间的关系:①组合:a part of ... 一部分的关系:②继承: a kind of ... 属于同一种的关系: 继承的本质:a. 代码的 ...
- linux篇-centos7搭建apache服务器(亲测可用)
1安装apache yum install httpd httpd-devel -y 2开启服务器 systemctl start httpd.service 3开机自启 systemctl enab ...
- 数仓选型必列入考虑的OLAP列式数据库ClickHouse(中)
实战 案例使用 背景 ELK作为老一代日志分析技术栈非常成熟,可以说是最为流行的大数据日志和搜索解决方案:主要设计组件及架构如下: 而新一代日志监控选型如ClickHouse.StarRocks特别是 ...
- 判断数据类型(typeof&instanceof&toString)
一.数据类型 ES6规范中有7种数据类型,分别是基本类型和引用类型两大类 基本类型(简单类型.原始类型):String.Number.Boolean.Null.Undefined.Symbol 引用类 ...
- CF1681F Unique Occurrences
题意:一棵树,问每条路径上只出现一次的值的个数的和. 思路: 显然想到考虑边贡献.每条边权下放到下面的哪个点.\(up_i\)为上面第一个点权等于它的点.我们需要一个子树内点权等于它的点(如果满足祖孙 ...
- Kafka到底有多高可靠?(RNG NB)
在聊Kafka高可靠之前,先在评论区来波RNG NB好不好! 什么叫可靠性? 大家都知道,系统架构有三高:「高性能.高并发和高可用」,三者的重要性不言而喻. 对于任意系统,想要同时满足三高都是一件非常 ...
- SQL中如何修改数据库名、表名、列名?
文章目录 1.SQL中如何修改数据库的名字? 2.SQL中如何修改表的名字? 3.SQL中如何修改列的名字? 4.SQL中如何修改列的数据类型?(未完成,待续) 1.SQL中如何修改数据库名? 语法 ...
- 重载overload 、重写override
观点:重载和重写完全没有关系要联系到一起,唯一的联系就是他们都带有个'重'字,所以鄙人也随大流把他们放在了一起 注意:下面可复制的代码是正确的,错误的只会上传图片,不上传可复制的代码 重载 1.在同一 ...