XCC API
WebRTC
XCC 支持 WebRTC 呼叫。
- 客户端通过 Websocket 连到 XCtrl 上,XCtrl 可能会有多个实例。
- 通过
node_uuid
和ctrl_uuid
映射保证消息能正常路由。 - 客户端“注册”时,仅连到 XCtrl 上,与 Node 没有关系。
- 客户端发起呼叫时,发送
verto.invite
消息,此时,XCtrl 查找可用节点,建立callID
与node_uuid
的映射,并通过verto.trying
消息通知客户端,客户端应该记住这个node_uuid
并在后续的消息中发送。 callID
和node_uuid
的映射关系将在通话结束后解除。后续的通话可能会路由到其它节点。
WebRTC 做主叫
- RTC 客户端通过 Websocket 连接到 XCtrl。XCtrl 负责鉴权、分配 FreeSWITCH 资源等。
- RTC 客户端发送 INVITE,XCtrl 检查路由(找到 Node 节点)并发送到对应的 FreeSWITCH,XCtrl 会保持
callID
和node_uuid
的对应关系,以便路由后续的消息(如 Bye)。 - 当一个 FreeSWITCH 处理后,返回响应消息,携带
node_uuid
。 - 后续客户端消息都携带
node_uuid
,以便路由到原来的 FreeSWITCH。 - 如果客户端刷新重新,则可能连接到其它的 XCtrl 实例上,由于
node_uuid
是在客户端携带,因此能正确路由到相应的 Node 节点。
WebRTC 做被叫
- RTC 客户端的 Websocket 连接鉴权通过后,XCtrl 要存储注册信息。
- 如果 FreeSWITCH 呼叫 WebRTC 用户,它将呼叫发送到
cn.xswitch.ctrl.rtc
上,XCtrl 查询到用户对应的 Websocket,然后呼叫用户。 - 如果有多个 XCtrl,则需要一种查询机制。
Verto 支持如下呼叫字符串:
xrtc/profile_name/user@domain
:FreeSWITCH 将查找配置文件中名字为profile_name
的 profile,并将呼叫发送到 profile 配置中的xrtc-ctrl-subject
节点上。由 XCtrl 负责后续寻址。xrtc/user@domain
:如果不带 profile_name 则默认为default
profile。{xcc_ctrl_uuid=xxxx}xrtc/profile_name/user@domain
:FreeSWITCH 将忽略 profile 中的xrtc-ctrl-subject
,将消息发送到呼叫字符串携带的通道变量xcc_ctrl_uuid
上xrtc/user@domain;ctrl_uuid=xxxx
:XCtrl 在发起呼叫时,首先查询用户 Websocket 对应的ctrl_uuid
,然后生成呼叫字符串。{ctrl_uuid=xxxx}xrtc/user@domain
:同上。
WebRTC 配置
配置文件名字为xcc-rtc.conf.xml
,大部分配置与 mod_verto 模块的配置一致。
settings
debug
类型integer
调试级别
profiles
profile
profile
属性name
为 profile 的名称
参数(xcc 独有的参数):
xrtc-ctrl-subject
类型string
XCtrl 的 nats 通信 topic,使用这个 profile 的 verto 消息都会发送到这个 topicmedia-timeout
类型integer
媒体超时,单位为毫秒。 当通话时超过设定时间没有媒体通信的话 freeswitch 会将通话挂断
客户端协议
客户端建议还是使用现有的verto.js
协议,稍加改动(往来消息中增加params.node_uuid
)。
连接
如下代码,系统支持以下连接鉴权方式:
- 用户名/密码:只需输入
login/passwd
参数 - XUI 统一登录:需要获取 xuiToken 作为
xui_sessid
,具体获取方法参见 XUI 相关说明 - XCC 统一登录:需要获取 xccToken 作为
xcc_token
参数传入。具体获取方法参见 XCC 系统相关说明
verto.connect({ login: username + "@" + domain, passwd: password, // optional, when use xui_sessid or xcc_token socketUrl: socketUrl, loginParams: { xui_sessid: xuiToken, // optional xcc_token: xccToken, // optional }, });
会议
Verto 会议,对于同一个会议,统一路由到一个 Node 节点上。
第一个成员呼入时,Node 将发送一个 Event Channel 消息,ConfMan 收到后,会订阅相关的事件。需要保证所有后续消息都路由到同一个 Node 节点上。
消息如下:
confman-liveArray.3000-xswitch.cn@xswitch.cn
:与会成员列表confman-chat.3000-xswitch.cn@xswitch.cn
:Chat Channelconfman-mod.3000-xswitch.cn@xswitch.cn
:Moderator Channel,可以对会议进行控制
如果后续有人加入会议,则向 Node 发送bootstrap
消息,Node 收到后回复 liveArray,同步所有已经参会的与会者列表。