XCC API

配置文件

配置文件为xcc.conf,包含以下几个部分。


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-format:CDR 的格式,固定为CUSTOM
  • cdr-subject:CDR 专门的 Subject,用于将 CDR 送到专门的 Subject 上,如果不配置默认送到 Channel 对应的 Controller 上。
  • xml-handler-bindings:XML 绑定,不同的 Section 以|分隔,如directory|config
  • loki-push-url:loki 接受 log push 的地址,如http://127.0.0.1:3100/loki/api/v1/push,配置该参数则表示日志消息直接推送到 loki。如不配置则日志使用消息队列的方式向 loki 推送日志。 注意:/api/prom/push 已经弃用,使用/loki/api/v1/push loki 文档
  • loki-send-gapinteger 推送时间间隔,单位毫秒。超过这个时间间隔会推送所有缓存的日志 默认值 1000 毫秒。
  • loki-max-log-cache-countinteger 缓存日志最大的条数,超过这个数量会将缓存日志推送到 loki 默认值 20。
  • loki-max-log-cache-mem-sizeinteger 缓存日志最大内存占用值,单位是kb,超过这个内存占用会将缓存的日志推送到 Loki,默认值为 4。
  • loki-cache-queue-sizeinteger 缓存队列容量 默认值 300。
  • node-name:节点名称,会被用作外发事件中的node_uuid部分,如果不填则默认为系统的core-uuid
  • status-ctrl-subject:将 Node 状态事件发送到该主题,默认为cn.xswitch.status.node。之所以发到单独的主题上与cn.xswitch.ctrl分开,主要原因是cn.xswitch.ctrl一般是以queue方式订阅的,在 ctrl 侧有多节点的情况下无法同时收到这些状态通知。相关的事件有:
    • Event.NodeRegister
    • Event.NodeUnregister
    • Event.NodeUpdate

bindings

事件绑定。绑定的事件会向 NATS 发送,ALL会绑定所有事件。

发送的 Topic 可以由publish-events-subject-prefix参数改变,如:

  • cn.xswitch.ctrl.event.dtmf
  • cn.xswitch.ctrl.event.channel_answer
  • cn.xswitch.ctrl.event.custom.sofia::register
  • cn.xswitch.ctrl.event.custom.conference::maintenance

通话相关事件可绑定如下事件:

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

subs

向 NATS 订阅。

  • name:Topic,可以是任意合法的 NATS Subject 或 Kafka Topic。其中 NATS 支持queue订阅。
  • queue:如果参数存在则在 Queue 方式订阅,即在集群订阅时,同一个 Queue 的订阅只会有一个订阅者收到。

cdr

CDR 参数。CDR 格式。

  • lega | b | ab,记录哪条腿的话单。
  • name:出现在 JSON 中的字段名。
  • value:对应 FreeSWITCH 中通道变量的字段名。

如:

<cdr leg="a">
    <param name="caller_id_name" value="caller_id_name"/>
    <param name="caller_id_number" value="caller_id_number"/>
    <param name="cid_number" value="caller_id_number"/> <!-- 别名 -->
</cdr>

channel-params

通道相关参数。为了节省带宽,XSwitch 仅在 Channel 事件中携带很少的必要的信息,但如果在特定的场景中需要更多的信息,则可以通过配置从通道变量中获取。这些信息将显示在 Channel 事件的params对象中,所有数据均为字符串。

  • name:显示在 JSON 对象params字段中的名称,建议与value一致
  • value:XSwitch 通道变量名称,可以通过“|”指定另一个变量,当“|”前面的不存在时,尝试从第二个变量获取
  • default_value:可以指定一个默认值。特殊情况下使用,一般没有什么意义,不推荐使用。

如:

<channel-params>
    <param name="user_uuid" value="user_uuid"/>
    <param name="user_domain" value="user_domin"/>
    <param name="context" value="context|first_dialplan_context"/>
</channel-params>

以下链接中包含一个常用通道变量列表,其中,上述配置中的value字段对应表格中的“channel variable name”列:

https://freeswitch.org/confluence/display/FREESWITCH/Channel+Variables

dialplan-params

Dialplan 请求参数,附加在 Dialplan 请求中。namevalue的含义与channel-params中相同。如:

<dialplan-params>
    <param name="cid_name" value="caller_id_name"/>
    <param name="cid_number" value="caller_id_number"/>
    <param name="dst_number" value="destination_number"/>
    <param name="context" value="context"/>
    <param name="direction" value="direction"/>
</dialplan-params>
机器人监听外呼