代码使用示例
以协同点击通话(先多媒体文本后点击通话)接口使用代码示例。
操作步骤
- 请求send接口。
this.$axios({ method: 'post', url: APIfabric域名/apiaccess/ccmessaging/send, headers: { 'Content-Type': 'application/json', 'x-app-key': c.appKey, 'Authorization': fabric.token, 'ccmessaging-token': ccmessaging.token }, data: { 'channel': 'WEB', 'content': 'start', 'controlType': 'CONNECT', 'from': userId, 'mediaType': 'TEXT', 'sourceType': 'CUSTOMER', 'to': channelId } })
根据send接口返回的http status为200,且返回消息体resultCode为0,则成功。
此时座席侧在线交谈工作台已可以看到接入的用户。
- 请求checkClickToCallSupport接口
请求之前,请确保以下两点:
- send接口得到接入成功的返回
- 检查浏览器环境支持WebRTC(请结合WebRTC官方文档查看具体如何检查)
检查示例:
if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) { return Promise.reject(new Error('WebRTC is not supported')) } let cam = false let mic = false let spkr = false return navigator.mediaDevices.enumerateDevices().then((deviceInfos) => { deviceInfos.forEach(function (d) { switch (d.kind) { case 'videoinput': cam = true break case 'audioinput': mic = true break case 'audiooutput': spkr = true break } }) // Chrome supports 'audiooutput', Firefox and Safari do not support. if (navigator.webkitGetUserMedia === undefined) { spkr = true } if (!spkr) { return Promise.reject(new Error('Missing a speaker! Please connect one and reload')) } if (!mic) { return Promise.reject(new Error('Missing a microphone! Please connect one and reload')) } return Promise.resolve(cam) })
- 在上述检查均通过后,可开始调用checkClickToCallSupport接口。
this.$axios({ method: 'get', url: APIfabric域名/apiaccess/ccmessaging/v1/checkClickToCallSupport?channel=WEB, headers: { 'Content-Type': 'application/json', 'x-app-key': appKey, 'Authorization': fabric.token, 'ccmessaging-token': ccmessaging.token } })
- 返回消息体:
{ "resultCode":"0", "resultDesc": "", "webRTCSupported":true, "clickToCallSupported":true }
如httpStatus为200,且resultCode为0,代表请求成功。
webRTCSupported,代表该租间是否支持webRTC;clickToCallSupported代表该渠道是否支持点击通话。
上述两个变量均为true时,可进行下一步,创建点击通话。
- 请求createClickToCall。
请确保checkClickToCallSupport返回的webRTCSupported和clickToCallSupported为true,才可调用。
请求参数中的mediaAbility为0,为发起语音通话;为1,为发起视频通话。
this.$axios({ method: 'post', url: APIfabric域名/apiaccess/ccmessaging/v1/createClickToCall, headers: { 'Content-Type': 'application/json', 'x-app-key': appKey, 'Authorization': fabric.token, 'ccmessaging-token': ccmessaging.token }, data: { 'channel': 'WEB', 'mediaAbility': '0' } })
返回消息体:
{ "resultCode":"0", "resultDesc": "" }
如httpStatus 为200,且resultCode为0,代表请求成功。
- 长轮询请求getClickToCallEvents。
在createClickToCall调用成功后,开始调用getClickToCallEvents接口。
- 请设置该请求的超时时间为一个较长值;调用该接口请求,处理较缓慢,经常在10秒以上;如上述请求中设置的值为60秒。
- 该请求为长轮询请求,在请求success后,根据返回事件状态,继续调用该请求。
this.$axios({ method: 'get', url: APIfabric域名/apiaccess/ccmessaging/v1/getClickToCallEvents?channel=WEB, timeout: 60000, headers: { 'Content-Type': 'application/json', 'x-app-key': appKey, 'Authorization': fabric.token, 'ccmessaging-token': ccmessaging.token } })
返回结果如下:
resultCode为非0时,表示请求失败,请设置重试机制:如客户端请求失败,重试3次后,仍然失败则停止请求重试。
resultCode为0,eventId为:
168101:呼叫建立;168102:呼叫排队;168106:呼叫转移;或者轮询时,可能没有事件,eventId是不携带时的情况,客户端需要保持长轮询。
当呼叫建立时,可从content中获取 webRTC必要参数:
domain为WebRTC Gateway域名;gwAddresses为WebRTC Gateway通信地址和端口;clickToCallCaller为主叫,accessCode为被叫
- 呼叫建立
{ resultCode:"0", resultDesc:"Call connected", "eventId": 168101, "content":{ "domain":"xxx" "gwAddresses":["xx1","xx2"] "accessCode": "179080000537636" "clickToCallCaller":"AnonymousCard" } }
- 呼叫排队
{ resultCode:"0" resultDesc:"Call in queue" "eventId": 168102 }
- 呼叫转移
{ resultCode:"0" resultDesc:"Call transfered" "eventId": 168106 }
- 呼叫释放
{ resultCode:"0" resultDesc:"Call disconnected" "eventId": 168110 "content":{ "causeId": -1 "causeDesc": "xxxx" } }
- 呼叫排队超时
{ resultCode:"0" resultDesc:"Call queue timeout" "eventId": 168103 "content":{ "causeId": -1 "causeDesc": "xxxx" } }
- 呼叫失败
{ resultCode:"0" resultDesc:"Call failed" "eventId": 168105 "content":{ "causeId": -1 "causeDesc": "xxxx" } }
- 没有获取到事件
{ resultCode:"0" resultDesc:"ClickToCall polled without any events" }
- 主动挂断时,调用dropClickToCall接口。
this.$axios({ method: 'post', url: APIfabric域名/apiaccess/ccmessaging/v1/dropClickToCall, headers: { 'Content-Type': 'application/json', 'x-app-key': appKey, 'Authorization': fabric.token, 'ccmessaging-token': ccmessaging.token }, data: { 'channel': 'WEB' } })
返回消息体:
如httpStatus为200,且resultCode为0,代表请求成功;
{ "resultCode":"0", "resultDesc": "" }