XSwitch用户手册
话单管理
一个运营平台往往需要有一个记录话单的能力,方便后续的计费提供数据支持。XSwitch可支持话单写入远程HTTP服务器,即你现在看到的web端提供的话单状况。
XUI采用mod_cdr_csv
模块可以记录CSV格式话单。
因此,正式启用话单功能时,请确保mod_cdr_csv
模块已加载启用。
话单
话单界面显示所有通话话单信息,点击【话单】即可查看详细信息。
页面右侧显示时间轴,根据各自需求随时查询近期内7天、15天或一个月的通话情况。点击【更多】,可进行条件查询。
会议话单、fifo话单、callcenter话单等可在对应的【会议】或【呼叫中心】中查找对应话单。
话单配置
话单配置为话单模块配置文件界面,通常使用默认配置,非必要不修改(如果比较熟悉FS配置,可根据场景需要修改)。
话单推送
话单模块直接推送
话单推送目前支持JSON以及XML格式推送,分别对应mod_cdr_xml
以及mod_json_cdr
两个模块。
如需话单推送,请确保上述模块已被加载。
模块已加载成功的基础上,修改xml_cdr.conf.xml
或json_cdr.conf.xml
中如下即可。
<param name="url" value="http://localhost/cdr_curl/post.php"/>
修改完成后,重载即可。
当然也可以直接参考【AI】界面中话单推送方法或【XCC】订阅方式。
AI推送方式
方法一
打开【AI】界面,进入详情页面,找到Settings
部分,修改post-event-url
对应的值(填入需要将事件推送到的地址)。找到Bindings
部分,开启参数CHANNEL_DESTROY
,值为ALL
,关掉其他参数。
填写成功后点击右上角【重载】按钮即可。也可在【高级】⇨【模块配置】⇨【系统模块】中找到mod_ai
,然后点击后面的【重载】(如果没有此模块,将此模块添加进去后加载即可)。
通过此方法是将FreeSWITCH原始挂机事件推送的方式实现话单推送。这种方法获取到的话单为原始话单,可根据需要摘选所需参数即可。
方法二
在指定路由详情里添加AI参数,
<action application="set" data="execute_on_originate=ai_channel_state_originate"/>
<action application="set" data="execute_on_ring=ai_channel_state_ring"/>
<action application="set" data="execute_on_media=ai_channel_state_media"/>
<action application="set" data="execute_on_answer=ai_channel_state_answer"/>
如下图所示:
打开【AI】界面,进入详情页面,找到Settings
部分,修改post-event-url
对应的值(填入需要将事件推送到的地址)。找到Bindings
部分,开启参数CUSTOM
,值ai::channel-state
,关掉其他参数。
填写成功后点击右上角【重载】按钮即可。
此方法会获取到经过该路由的通话从振铃到挂机所有事件,和原始事件不同,该方法获取的事件信息经过系统处理后字段更为简洁。
XCC订阅方式
XCC订阅方式,需要确保已启用NATS服务(参考XCC文档)。
第一步:配置XCC参数
点击【高级】⇨【模块配置】⇨ XCC,进入XCC详情页面,查找如下两个参数,确保该参数已开启。
参数:
- XCC-SETTINGS:
cdr-format
设置(话单格式),默认CUSTOM
即可,只需要开启 - XCC-SETTINGS:
cdr-subject
设置(话单订阅事件名,用于后续客户订阅话单信息),比如cn.xswitch.cdr
如下图所示:
第二步:启动订阅服务
使用熟悉的后端语音,参考XCC文档,启动订阅程序。当有通话结束时,该服务即可订阅到对应话单。
nodejs
订阅部分代码参考如下:
const NATS = require('nats')
let nats_url = 'nats://demo:demxxxxx@nats.xswitch.cn:xxx';
const nc = NATS.connect(nats_url);
console.log("Event started, waiting ...")
console.log((new Date()).toISOString())
// controller handler
const events_subject = "cn.xswitch.cdr";
nc.subscribe(events_subject, function (msg, reply, subject, sid) {
console.log((new Date()).toISOString(), 'Received a message: ' + subject)
console.log(msg)
})