XCC API

XML Binding

  • subject:cn.xswitch.ctrl
  • method:XCtrl.FetchXML

XSwitch 通过 XML Binding 实现动态 XML。相关概念可参考mod_xml_curl

https://freeswitch.org/confluence/display/FREESWITCH/mod_xml_curl

在 XSwitch 内部实现一个绑定回调函数,XSwitch 在每次需要 XML 时,都会回调该函数。

mod_xcc中,每次绑定的回调都会发送request请求。

请求示例如下:

{
  "jsonrpc": "2.0",
  "method": "XCtrl.FetchXML",
  "id": "5ca1bf44-1f80-4845-b538-12ca29086e0e",
  "params": {
    "node_uuid": "5cc473e8-ad01-481e-9f28-9291b1bad9d5",
    "section": "configuration",
    "tag_name": "configuration",
    "key_name": "name",
    "key_value": "sofia.conf",
    "params": {}
  }
}

可以绑定如下 Section:

  • dialplan:拨号计划,路由。不推荐使用,推荐使用 XCC Dialplan 代替。
  • configuration:配置,模块的配置等。
  • directory:用户目录。
  • channels:动态 Channel,在转接的时候有用。
  • chatplan:即时消息的路由。
  • languages:多语言支持。

XSwitch 内部支持多个绑定,多个绑定之间的执行顺序不固定,因而可能会有冲突,慎用。

服务方收到 XSwitch 的请求后,返回正常的 XML 文档即可:(其中$相关的变量可以从请求中获取)

<document type="freeswitch/xml">
		<section name="${params.section}">
		<${params.tag_name} ${params.key_name}="${params.key_value}"/>
		... 实际的内容
		</section>
</document>

如果“实际的内容”为空,则 FreeSWITCH 找不到相关的数据。FreeSWITCH 也不会 Fallback 到其它数据。

如果服务方不提供数据,但允许 FreeSWITCH 去查询其它绑定,则返回not found消息:

<document type="freeswitch/xml">
		<section name="result">
			<result type="not found"/>
		</section>
</document>

如果没有其它绑定,或者绑定没有找到数据,FreeSWITCH 会继续查询本地的静态 XML 配置。

如果希望 FreeSWITCH 跳过所有绑定直接查询本地静态 XML,则可以返回一个空的 XML,如:

<document type="freeswitch/xml"/>

Fallback 规则在实际使用时会增加复杂性,有时候不知道哪个配置是生效的,因此,慎用。

Directory 绑定

当用户注册时或作为被叫时发送请求,请求示例如下:

{
  "jsonrpc": "2.0",
  "method": "XCtrl.FetchXML",
  "id": "e54b7f58-2edc-4a13-a8d8-8c74b854cb39",
  "params": {
    "node_uuid": "f52310ba-12c0-40a0-b0d3-f28a8deed5ab",
    "section": "directory",
    "tag_name": "domain",
    "key_name": "name",
    "key_value": "seven.local",
    "params": {
      "key": "id",
      "user": "1007",
      "domain": "seven.local",
      "ip": "172.22.0.1"
    }
  }
}

服务方应该返回 XML 字符串。

Configuration 绑定

请求示例如下:

{
  "jsonrpc": "2.0",
  "method": "XCtrl.FetchXML",
  "id": "5ca1bf44-1f80-4845-b538-12ca29086e0e",
  "params": {
    "node_uuid": "5cc473e8-ad01-481e-9f28-9291b1bad9d5",
    "section": "configuration",
    "tag_name": "configuration",
    "key_name": "name",
    "key_value": "sofia.conf",
    "params": {}
  }
}

服务方应该返回 XML 字符串。

Dialplan接管