更新时间:2023-06-21 GMT+08:00
分享

代码使用示例

以协同点击通话(先多媒体文本后点击通话)接口使用代码示例。

操作步骤

  1. 请求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,则成功。

    此时座席侧在线交谈工作台已可以看到接入的用户。

  2. 请求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)
    })
    1. 在上述检查均通过后,可开始调用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
          }
      })
    2. 返回消息体:
      {    "resultCode":"0",
          "resultDesc": "",
          "webRTCSupported":true,
          "clickToCallSupported":true
      }

      如httpStatus为200,且resultCode为0,代表请求成功。

      webRTCSupported,代表该租间是否支持webRTC;clickToCallSupported代表该渠道是否支持点击通话。

      上述两个变量均为true时,可进行下一步,创建点击通话。

  3. 请求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,代表请求成功。

  4. 长轮询请求getClickToCallEvents。

    在createClickToCall调用成功后,开始调用getClickToCallEvents接口。

    1. 请设置该请求的超时时间为一个较长值;调用该接口请求,处理较缓慢,经常在10秒以上;如上述请求中设置的值为60秒。
    2. 该请求为长轮询请求,在请求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"
      }

  5. 主动挂断时,调用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": ""
    }

相关文档