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

[高级]分配器