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 字符串。