概述
freeswitch是一款简单好用的VOIP开源软交换平台。
在语音呼叫的过程中,话单是重要的计价和结算依据,话单的产生需要稳定可靠,可回溯。
fs中的mod_xml_cdr模块提供了基本话单功能之外的选择,可以输出XML格式的本地话单或通过http post接口上传web服务器。
环境
centos:CentOS release 7.0 (Final)或以上版本
freeswitch:v1.10.7
GCC:4.8.5
模块介绍
mod_xml_cdr模块默认编译安装,但没有加载。
检查conf/autoload_configs/modules.conf.xml文件。
<load module="mod_xml_cdr"/>
mod_xml_cdr模块会在通话结束后尝试通过http post发送xml格式的cdr到web服务器,发送失败之后写本地文件。
检查conf/autoload_configs/xml_cdr.conf.xml文件,重点关注以下几个配置。
<!-- the url to post to if blank web posting is disabled -->
<param name="url" value="http://10.55.55.137:8080/xml_cdr"/>
HTTP POST的地址,通话结束后优先尝试post xml格式的cdr到该地址。
<!-- Log via http and on disk, default is false -->
<param name="log-http-and-disk" value="true"/>
http和本地文件方式同时记录xml_cdr。
<!-- optional: if not present we do log the b leg -->
<!-- true or false if we should create a cdr for the b leg of a call-->
<param name="log-b-leg" value="true"/>
xml_cdr的话单包括B路话单,默认只有A路话单
测试
按照上面的配置修改并重启fs,测试呼叫,查看挂机后的xml_cdr情况。正常的结果应该是xml_cdr会同时在本地文件和web服务器写话单。
查看本地文件。
ll /usr/local/freeswitch/log/xml_cdr/
total 28
-rw-r--r--. 1 root root 10568 Jul 6 15:11 4f012c6a-1bcc-11ee-a6e6-77e7bc3f377f.cdr.xml
-rw-r--r--. 1 root root 14563 Jul 6 15:11 a_4f002b94-1bcc-11ee-a6dc-77e7bc3f377f.cdr.xml
查看web服务器收到的信息。
2023-07-06 15:11:37,940 root INFO http_server.py xml_cdr request, data=cdr=<?xml version="1.0"?>
<cdr core-uuid="09337ada-1bcc-11ee-a6d9-77e7bc3f377f" switchname="pxy137">
<channel_data>
<state>CS_REPORTING</state>
<direction>outbound</direction>
<state_number>11</state_number>
<flags>0=1;1=1;2=1;15=1;20=1;27=1;38=1;40=1;43=1;47=1;75=1;112=1;113=1;122=1</flags>
<caps>1=1;2=1;3=1;4=1;5=1;6=1</caps>
</channel_data>
<call-stats></call-stats>
<variables>
<direction>outbound</direction>
<uuid>4f012c6a-1bcc-11ee-a6e6-77e7bc3f377f</uuid>
...
2023-07-06 15:11:37,944 root INFO http_server.py xml_cdr request, data=cdr=<?xml version="1.0"?>
<cdr core-uuid="09337ada-1bcc-11ee-a6d9-77e7bc3f377f" switchname="pxy137">
<channel_data>
<state>CS_REPORTING</state>
<direction>inbound</direction>
<state_number>11</state_number>
<flags>0=1;1=1;15=1;20=1;38=1;40=1;43=1;47=1;75=1;113=1;122=1</flags>
<caps>1=1;2=1;3=1;4=1;5=1;6=1</caps>
</channel_data>
<call-stats></call-stats>
<variables>
<direction>inbound</direction>
<uuid>4f002b94-1bcc-11ee-a6dc-77e7bc3f377f</uuid>
...
总结
mod_xml_cdr模块对基础格式的话单起到了补充的作用,可以根据需求直接推送到web服务器,配置即可使用,还是挺方便的。
xml_cdr模块还可以记录话单推送的错误日志,并可以设置定时任务重推话单。
空空如常
求真得真