XSwitch用户手册

XCC设置

XCC模块主要是实现控制XSwitch,程序员不用纠结于XSwitch的内部逻辑,从更高的视角分析业务需求,进而调用合适的API进行控制。

XCC-SETTINGS

  • debug:调试日志级别, 0~7。
  • nats‑url:NATS的地址,如nats://127.0.0.1:4222,如果不配置则不连接NATS。
  • publish‑events‑subject‑prefix:事件的Subject前缀,如.event,将会变为cn.xswitch.ctrl.event.CHANNEL_ANSWER之类。
  • cdr‑formatCDR的格式,可以在CDR中选一种格式,目前支持CUSTOM。
  • xml‑handler‑bindings:XML绑定,不同的Section以│分隔,如directory│config
  • cdr-subject:CDR事件名,如填写cn.xswitch.cdr

XCC-BINDINGS

绑定哪些事件。绑定的事件会向NATS发送,如果设置为ALL则会绑定所有事件。发送的Topic可以由publish‑events‑subject‑prefix参数改变,如:

  • cn.xswitch.ctrl.event.CHANNEL_ANSWER
  • cn.xswitch.ctrl.event.CUSTOM.sofia::register

如果你想订阅通话相关事件,可以绑定如下几个事件

  • CHANNEL_CREATE //通话创建事件
  • CHANNEL_STATE //状态
  • CHANNEL_ANSWER //应答
  • CHANNEL_HANGUP_COMPLETE //挂机结束

XCC-CDR

挂机结束后话单指定事件,默认如下字段参数说明:

  • caller_id_name //主叫号码
  • destination_number // 被叫号码
  • uuid //通话uuid
  • start_stamp //开始时间
  • answer_stamp //应答时间
  • end_stamp //结束时间
  • duration //总时长
  • billsec //计费时长
  • hangup_cause //挂机原因
  • context //呼叫源
  • direction //方向
  • caller_id_name //主叫名称

订阅事件示例

  • 第一步:开启mod_xcc模块
  • 第二步:点【高级配置】⇨【系统设置】⇨ XCC修改相关参数并重载生效

参数设置:

  • XCC-SETTINGS: nats-url设置(默认无须修改)
  • XCC-SETTINGS: publish-events-subject-prefix设置(定义订阅事件前缀,主要用于后续订阅需要统一),比如cn.xswitch.ctrl.events,然后开启即可;
  • XCC-SETTINGS: cdr-format设置(话单格式),默认CUSTOM即可,只需要开启
  • XCC-SETTINGS: cdr-subject设置(话单订阅事件名,用于后续客户订阅话单信息),比如cn.xswitch.cdr

如下图所示:

XCC配置\label{fig:xcc_setting}

  • XCC-BINDINGS:CHANNEL_CREATE
  • XCC-BINDINGS:CHANNEL_STATE
  • XCC-BINDINGS:CHANNEL_ANSWER
  • XCC-BINDINGS:CHANNEL_HANGUP_COMPLETE

如下图所示:

XCC配置\label{fig:xcc_bind}

第三步:写订阅代码,现提供nodejs下的demo,如events.js,代码如下:

const NATS = require('nats')
// nats_url对应配置文件中nats‑url的值
let nats_url = process.env.NATS_URL;
console.log("Connecting to " + nats_url)
const nc = NATS.connect(nats_url);
console.log("Event started, waiting ...")

// controller handler 订阅事件,其中`cn.xswitch.ctrl.events`对应xcc配置文件中的`publish‑events‑subject‑prefix`中的值
nc.subscribe('cn.xswitch.ctrl.events', function (msg, reply, subject, sid) {
    console.log('Received a message: ' + subject)
    console.log(msg)
})

function wait() {
    // console.log('tick ... ');
    setTimeout(wait, 3000);
}

wait();
// Close connection
// nc.close()

关于XCC,请参阅《XSwitch XCC API手册》,以及示例代码:https://git.xswitch.cn/xswitch/xcc-examples

XCC-RTC

todo

[高级]分配器