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.xmljson_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设置\label{fig:ai-cdr}

打开【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配置\label{fig:xcc_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)
})
会议