概述

這篇文章將提供關於從 VCaaS 會議中推送的所有 Webhooks 和數據的概述。它包括兩個部分:會議結束後的會議數據推送和實時數據推送。

會議結束後的會議數據推送

說明

會議結束後,會產生相應的會議時長、與會者考勤、會議錄像(會議過程中開啟錄像)以及會議過程中的 POLL、QUIZ 記錄等數據。 VCaaS 平台提供主動推送和查詢會議數據介面兩種方式獲取會議數據。VCaaS 平台提供的會議時長和與會者考勤數據是基於客戶端連接事件產生,可能出現事件延時。

  1. 創建會議時,可以通過請求參數中的 callbackUrl 字段指定接收會議數據的回調地址。若未設置該參數,則 VCaaS 平台不會主動推送會議數據,用戶可以通過查詢會議數據介面獲取會議數據。
  2. 會議結束時,VCaaS 平台會立即進行一次會議數據的推送。若未正常接收到回調介面響應碼為200的正確響應,在間隔5分鐘、10分鐘、15分鐘、30分鐘後,VCaaS 平台會再次推送會議數據,累計推送4次後,將結束會議數據的主動推送。
  3. 接收會議數據的回調介面必須為 POST 方法,用戶需要自行實現回調介面的幂等性。
  4. 接收會議數據的回調介面示例:
/**
 * 接收會議數據的回調介面示例
 *
 * @param meetingData VCaaS 平台推送的會議數據
 */
@PostMapping(path = "/accept-meeting-data-demo")
public void acceptMeetingDataDemo(@RequestBody MeetingCompleteDataDto meetingData) {
    log.info("accept meeting data:{}", Jsons.toString(meetingData, ""));
}

示例中 MeetingCompleteDataDto 的數據結構和會議數據數據結構說明一致。

會議數據響應

{
  // 會議時長數據
  "meetingData": {
    // 會議ID
    "meetingUid": "",
    // 外部會議ID
    "meetingExternalId": "",
    // 原計劃會議開始時間
    "scheduledStartTime": "",
    // 原計劃會議結束時間
    "scheduledEndTime": "",
    // 會議實際開始時間
    "startTime": "",
    // 會議實際結束時間
    "endTime": "",
    // 會議持續時長,單位:秒
    "duration": ""
  },
  // 會議與會者考勤數據
  "attendeeDatas": [
    {
      // 會

議ID  
      "meetingUid": "",
      // 外部會議ID
      "meetingExternalId": "",
      // 與會者ID
      "attendeeUid": "",
      // 外部與會者ID
      "externalId": "",
      // 與會者首次進入會議時間
      "timeIn": "",
      // 與會者最後一次離開會議時間
      "timeOut": "",
      // 參會總時長,單位:秒
      "totalTime": "",
      // 設備
      "device": "",
      // 與會者考勤明細數據
      "details": [
        {
          // 考勤類型,AttendeeJoined:進入會議;AttendeeLeft:離開會議;AttendeeDropped:與會者掉線;
          "type": "",
          // 時間戳,單位:毫秒
          "timestamp": 0
        }
      ]
    }
  ],
  // 會議錄像數據
  "meetingVideoData": {
    // 會議ID 
    "meetingUid": "",
    // 外部會議ID 
    "meetingExternalId": "",
    // 會議錄像下載地址
    "videoUrls": [
        ""
    ]
  },
  // 會議互動數據
  "meetingInteractiveData": {
    // 會議ID 
    "meetingUid": "",
    // 外部會議ID 
    "meetingExternalId": "",
    // 答題數據
    "quizData": {
      // 使用答題器總次數   
      "totalCount": 0,
      // 答題器明細數據
      "detailDatas": [
        {
          // 題目ID  
          "id": "",
          // 題目內容和選項
          "content": {
            // 選項
            "options": [
              {
                "value": "",
                "label": ""
              }
            ],
            // 題目內容
            "content": ""
          },
          // 答題正確率
          "averageAccuracy": "",
          // 正確答案
          "correctAnswer": ""
        }
      ]
    },
    // 投票數據
    "pollData": {
      // 使用投票總次數
      "totalCount": 0,
      // 投票明細數據
      "detailDatas": [
        {
          // 投票ID
          "id": "",
          // 投票內容與選項
          "content": {
            // 選項
            "options": [
              {
                "value": "",
                "label": ""
              }
            ],
            // 內容
            "content": ""
          }
        }
      ]
    }
  },
  // 會議與會者互動數據
  "attendeeInteractiveDatas": [
    {
      // 會議ID 
      "meetingUid": "",
      // 外部會議ID 
      "meetingExternalId": "",
      // 與會者ID 
      "attendeeUid": "",
      // 外部與會者ID 
      "externalId": "",
      // 與會者答題數據
      "attendeeQuizData": {
        // 參與答題次數
        "count": 0,
        // 答題結果
        "answers": [
          {
            // 題目ID
            "id": "",
            – 與會者用戶名
            "username": "",
            – 題型
            "questionType": "",
            – 與會者選項
            "selection": ""
          }
        ]
      },
      – 與會者投票數據
      "attendeePollData": {
        – 參與投票次數
        "count": 0,
        – 投票結果
        "answers": [
          {


            – 投票ID
            "id": "",
            – 與會者用戶名
            "username": "",
            – 投票類型
            "pollType": "",
            – 投票選項
            "pollOption": {
              "value": "",
              "label": ""
            }
          }
        ]
      }
    }
  ]
}

實時數據推送

說明

客戶可以選擇接收捕獲會議中發生事件的實時回調。

  1. 在創建會議時,可以在“創建會議”請求體中設置 realTimeCallbackUrl 及其相關字段。如果未設置這些參數,VCaaS 平台將不會主動推送事件數據。
  2. 實時回調發生在以下情況下:1) 有人加入或離開會議(userJoinLeaveUrl) 2) 會議開始或結束(meetingStartEndUrl)。3) 會議開始錄製或停止錄製(recordingStartEndUrl)。每個操作都有其自己的數據格式(請參見下面的示例)。
  3. 如果 VCaaS 在操作發生時未收到正確的響應(200 狀態碼和 success 響應),它將嘗試在 15、30、180 和 1800 秒後再次共享數據。嘗試 5 次後,將停止共享數據。
  4. 回調介面必須使用 POST 方法。用戶必須確保介面能夠處理重複的數據。

可配置的參數

參數類型必需備註
userJoinLeaveUrlString用戶加入和離開會議事件的回調 URL
meetingStartEndUrlString會議開始和結束事件的回調 URL
recordingStartEndUrlString會議開始錄製和停止錄製事件的回調 URL
endClassForAllUrlString老師點選 End class for all 事件的回調 URL

實時回調URL示例實現

{
    "meetingExternalId": "500000",
    "meetingTitle": "Tech meeting",
    "startTime": 1673062042,
    "endTime": 1673753242,
    // 實時回調URL
    "realTimeCallbackUrl": { 
        "userJoinLeaveUrl": "https://app.hilink.co/", 
        "meetingStartEndUrl": "https://app.hilink.co/" 
        "recordingStartEndUrl": "https://app.hilink.co/",
        "endClassForAllUrl": "https://app.hilink.co/"
    },
    "config": {
    },
    "docIds": [
    ]
}

處理實時回調 API 示例

@PostMapping(path = "/mock-callback")
public String mockCallback(@RequestBody Map<String, Object> data) {
    log.info("receive callback data: {}", data);
    // TODO: Add any additional processing logic here
    return "success";
}

實時回調數據結構

用戶進入/離開會議事件

{
    // 由 HiLink 分配的內部會議ID
    "meetingUid": "12345",
    // 客戶端分配的外部ID
    "meetingExternalId": "meeting-500000",
    // 用戶角色,0=教師,1=IT支持,2=學生
    "userRole": "0",
    // 客戶端定義的用戶ID
    "externalId": "user-1234",
    // 客戶端定義的用戶名稱
    "externalName": "",
    // 用戶活動狀態 0=用戶加入,1=用戶離開,2=用戶進入等待室
    "userStatus": "1",
    // 用戶活動的時間戳
    "timestamp": "123456"
}

會議開始/結束事件

{
    // 由 HiLink 分配的內部會議ID
    "meetingUid": "12345",
    // 客戶端分配的外部ID
    "meetingExternalId": "meeting-500000",
    // 用戶活動的時間戳
    "timestamp": "123456",
    // 0: 會議開始,1: 會議結束
    "meetingStatus": 1,
    // 0: 普通會議結束,1: 非正常會議結束(網絡錯誤)
    "meetingEndType": 0
}

會議開始/停止錄製事件

{
    // HiLink 分配的內部會議ID
    "meetingUid": "12345",
    // 客戶端分配的外部ID
    "meetingExternalId": "meeting-500000",
    // 用戶角色,0=老師,1=IT支援,2=系統關閉
    "userRole": "0",
    // 客戶端定義的用戶ID
    "externalId": "user-1234",
    // 客戶端定義的用戶名稱
    "externalName": "",
    // 錄製狀態,0=開始錄製, 1=停止錄製
    "recordingStatus": "0",
    // 用戶活動的時間戳
    "timestamp": "123456"
}

老師點選 End class for all 事件

{
    // HiLink 分配的內部會議ID
    "meetingUid": "12345",
    // 客戶端分配的外部ID
    "meetingExternalId": "meeting-500000",
    // 用戶角色,0=老師,1=IT支援
    "userRole": "0",
    // 客戶端定義的用戶ID
    "externalId": "user-1234",
    // 客戶端定義的用戶名稱
    "externalName": "",
    // 用戶活動的時間戳
    "timestamp": "123456"
}
Last Updated: