Overview

This article will guide you on how to quickly join a meeting in VCaaS through the Open API. In simple terms, if you just want to quickly start a meeting without any document presentation, you only need to complete the following two steps:

  1. Create a meeting
  2. Join a meeting

If you need to do a document presentation in the meeting, you need to complete the step of linking the meeting with the documents before joining the meeting. The process becomes the following three steps:

  1. Create a meeting
  2. Link meeting with files
  3. Join a meeting

The detailed steps in the following text will explain the operations that need to be performed in each step. At the same time, it will introduce how to query the data of the meeting and how to manage the organization's documents after the meeting ends.

Step-by-Step Guide

Create a Meeting

To create a meeting, you need to use the Create Meeting API /v2/meeting-center/meetings. After successfully creating the meeting, you will get the meeting ID meetingId and the meeting URL meetingUrl. In the next step, Join a Meeting, we will use the meeting ID meetingId and the meeting URL meetingUrl to create the final meeting link. Next, we will briefly explain the request parameters and response of the Create Meeting API. For more details about the Create Meeting API, please refer to the VCaaS API reference.

Key Parameters

startTime & endTime: Time is in Unixtime format, accurate to the second. Start time cannot be earlier than the current time, and end time cannot be earlier than the start time.

timerStartTime & timerEndTime: These parameters are used to control the start and end time of the timer shown to teachers within the classroom. Time is in Unixtime format, accurate to the second. timerStartTime cannot be earlier than startTime, and timerEndTime cannot be earlier than timerEndTime or later than endTime.

timerCountdown: This parameter is the countdown start time. This parameter is used to control how long before the timerEndTime the countdown should start displaying.

callbackUrl: If you provide a link for this parameter when creating a meeting, we will actively push attendance data to your link at 1 minute, 5 minutes, 10 minutes, and at the end of the meeting.

redirectUrl: If you provide a link for this parameter, it will automatically redirect to the page specified by the link after the meeting ends. If you do not provide this link, it will redirect to our default page.

realTimeCallbackUrl: If you provide links for the parameters in this object, we will automatically push live session data such as users joining/leaving as well as sessions starting/ending to the Callback URLs.

config: The parameters in this object represent whether you want to support functions such as chat, recording, poll, quiz, etc. during the meeting. Setting to True means to support this function, and setting to false means to not support this function. When this function is not supported, the entry button will be hidden or disabled in the meeting.

docIds: This object represents the documents (courseware) uploaded in the classroom. You need to upload the file first and obtain the document ID. You can also create a meeting first and then upload documents to this meeting through other interfaces.

quizIds: This object represents the pre-filled quizzes in the classroom. You need to create a quiz first and obtain the quiz ID. You can also create a meeting first and then upload quizzes to this meeting through other interfaces.

Example Request Body for Creating Meeting API

{
    "meetingExternalId": "500000",
    "meetingTitle": "Tech meeting",
    "startTime": 1673062042,
    "endTime": 1673753242,
    "timerCountdown": 5,
    "callbackUrl": "<https://www.hilink.co/>",
    "redirectUrl": "<https://www.hilink.co/>",
    "config": {
    },
    "docIds": [
    ]
}

Example Response for Creating a Meeting API

{
    "meetingExternalId": "500000",
    "meetingTitle": "Tech meeting",
    "meetingId": "109391932341489664",
    "meetingUrl": "<https://dev.vcaas.hilinkdemo.com/meeting>",
    "startTime": 1673062042,
    "endTime": 1673755042,
    "timerStartTime": 1673062042,
    "timerEndTime": 1673755042,
    "meetingStatus": "CREATED"
}

If you want to perform document presentation during a meeting, you need to first upload the file and link it to the meeting before joining. The specific steps are as follows:

  1. Upload the file.
  2. Link the file to the meeting.
  3. Join the meeting.

Get the url to upload files

To get the url for uploading files, you need to use the Create Document Upload URL API /v1/document-center/upload-urls. After successfully requesting the Create Document Upload URL API, you will get the file ID docId and the file upload url url. For more details about the Create Document Upload URL API, please refer to the VCaaS API reference. The following is an example of the API response:

{
    "docId": "96397990553587712",
    "url": "<https://dev.file.vcaas.hilinkdemo.com/91232529172008960%2Ftest.doc?Expires=1672991509&Signature=OE-hM31AmLFnquWi8BVvtiim0aP~4c~e2EewkA6h5GT0sYw0ejYQUD9fYmz5ScI00tkL8mCaTnbnkHoWGaLZqSt24h-SYotmkbeFAaLVJTS8MdTZkPvkgThYd39AsJiE2KReLA35cdwjyx5mzyQCnuiCHue-uV6~mJ3MAJcFIA75j39s~u0qCDEjBM2Ez-MqtUKYu-xSSWvb3Hwu8Ztg8srV40zoM3hPtC2KjQ7lgCYUK1xTPJa97xS6U4i5FZsiGu~HvSotdZ-ETeTLu6ebbY~Gu6qFef1ajBUqc8jACkI~UBhoE4Az8drc5NzmsyYUTAt4I958DFrmc671TbNM-Q__&Key-Pair-Id=K21VT8DFTV93QE>"
}

Upload the Document to the Server

Once we have obtained the upload URL for the file in Step I, we can upload the document to the server using either a network request client or encoding. Below, we will introduce both methods:

Test document upload using a network request client

  1. Use a network request client such as Postman to test document upload

  2. In the request address bar, fill in the URL obtained in step 2

  3. The request method must be specified as PUT

  4. The file to be uploaded is selected as parameter type binary through setting the request body (Body)

  5. CURL document upload example

curl --location --request PUT '<https://dev.file.vcaas.hilinkdemo.com/91232529172008960%2Ftest.doc?Expires=1672991509&Signature=OE-hM31AmLFnquWi8BVvtiim0aP~4c~e2EewkA6h5GT0sYw0ejYQUD9fYmz5ScI00tkL8mCaTnbnkHoWGaLZqSt24h-SYotmkbeFAaLVJTS8MdTZkPvkgThYd39AsJiE2KReLA35cdwjyx5mzyQCnuiCHue-uV6~mJ3MAJcFIA75j39s~u0qCDEjBM2Ez-MqtUKYu-xSSWvb3Hwu8Ztg8srV40zoM3hPtC2KjQ7lgCYUK1xTPJa97xS6U4i5FZsiGu~HvSotdZ-ETeTLu6ebbY~Gu6qFef1ajBUqc8jACkI~UBhoE4Az8drc5NzmsyYUTAt4I958DFrmc671TbNM-Q__&Key-Pair-Id=K21VT8DFTV93QE>' \
--header 'Content-Type: application/octet-stream' \
--data-binary '@/path/to/test.doc'

Sample code for uploading documents

package org.example.s3;

import java.io.*;
import java.net.*;

/**
 * Example of uploading a document using code
 */
public class UploadDemo {

    public static void main(String[] args) throws Exception {
        // uploadUrl is the address obtained from the get file upload URL API (/v1/document-management/upload-url)
        String uploadUrl = "https://dev.file.vcaas.hilinkdemo.com/90972391106285568/test.doc?Expires=1668583421&Signature=inz-umy8E76cgZM60hLmVpKtD~vjOHeZx-xASrHPqxNTL~zbOy9mY13~5m6-nk81DvMUJutrXq2jSY8eQ478239Kq5CKSwH2pjIfOdRr~Cxts~aaKkTPgs5oHuZCiFFUYnPrl1vqVwOeBPn-OIga4Js6RtAx1tNhWPQ2jEcbXtLRsMgOhWH3x6WlJfT7JA9bwM0odrRm~ybqwtdlFnDy~8CMGfP-9Ef7YH2EpMzypk25s0YoUzHil5QDW8g~npCjjgJ2s5vXCgCXikEFsMjxmgfITPI-7Dfen1CJaui4uCyLR-9VUxAaz5pGr5DcjGv74XTLUmz~cJB-s4dhX6z6Yw__&Key-Pair-Id=K21VT8DFTV93QE";
        URL url = new URL(uploadUrl);

        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        connection.setRequestProperty("Content-Type", "application/octet-stream");
        // The request method must be set to PUT
        connection.setRequestMethod("PUT");

        OutputStream out = connection.getOutputStream();
        // The path of the file to be uploaded
        FileInputStream in = new FileInputStream("/path/to/test.doc");

        int bytes = 0;
        byte[] bufferOut = new byte[2048];
        while ((bytes = in.read(bufferOut)) != -1) {
            out.write(bufferOut, 0, bytes);
        }
        in.close();

        out.flush();
        out.close();

        connection.getResponseCode();
        // Code 200 means the file upload was successful. Code 403 means the upload request was rejected due to an expired file upload link, and a new upload address needs to be obtained.
        System.out.println("HTTP response code is " + connection.getResponseCode());
    }
}

Associate Meetings with Documents

After successfully uploading a document, we can use the Add Meeting Document API /v1/meeting-center/meetings/{id}/documents to associate the meeting with the document. The uploaded document can be reused, and when creating a new meeting, simply add the document ID docId to the request parameter docIds of the Create Meeting API. For more details on the Add Meeting Document API, please refer to the VCaaS API Reference.

Join a meeting

To join a meeting, we will use the meeting ID (meetingId) and meeting URL meetingUrl returned by the create meeting interface. The meeting ID meetingId will be used as a parameter to generate the JoinToken, while the meeting URL meetingUrl will be used to concatenate the meeting link JoinUrl.

Generate JoinToken

We will explain how to generate JoinToken from three parts: parameter description, signature, and encryption. Finally, we will provide a code example for generating JoinToken.

Parameter Description

ParamTypeMandatoryDescription
meetingUidString(20)trueMeeting ID
externalRoleStringtrueRole of participant,possible values [HOSTATTENDEESUPERVISOR]
externalIdString(64)trueExternal Id,unique identifier
externalNameString(64)falseName of the participant
externalEmailString(64)falseEmail of the participant
externalAvatarUrlString(500)falseAvatar link of the participant

Signature

signature = hmac_sha256([meetingUid, externalRole, externalId, externalName,externalEmail, externalAvatarUrl].filter(field -> field.isEmpty()).sort().join(''), secretKey)
  1. Filter out invalid parameters (null or ''), so that the values of all parameters are represented as strings and sorted in dictionary order.
  2. Concatenate the sorted strings.
  3. Use sha256(secretKey) as the secretKey for hmac_sha256, and use the hmac_sha256 algorithm to calculate the result string in step 2, which is the signature.

Encryption

  1. Filter out invalid parameters (null or ''), encapsulate all parameters and the signature calculated by signature (excluding accessKey and secretKey) into a JSON object as follows:
{
    "externalRole": "HOST",
    "externalEmail": "hello@hilink.co",
    "externalAvatarUrl": "<http://dummyimage.com/100x100>",
    "signature": "69e7de2b4d21ff922e8d82596a5c420e75214b79277f894dd92e1c549dcc5d44",
    "externalName": "Lucy",
    "externalId": "1",
    "meetingUid": "109391932341489664"
}
  1. Convert the json object to a string, use secretKey as the secret for the AES algorithm, accessKey as the iv (vector) for the AES algorithm, AES padding mode: AES/CBC/PKCS5Padding, character set is UTF-8.
  2. Use AES256 to encrypt the parameter's json string, then convert it to a Base64 string (must use a URL-safe encoder, RFC 4648: The Base16, Base32, and Base64 Data Encodings (rfc-editor.org)open in new window), and the result is the joinToken.

Code example for generating JoinToken

package org.example;

import com.fasterxml.jackson.databind.ObjectMapper;

import javax.crypto.Cipher;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Base64;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * Example code for generating a JoinToken
 */
public class JoinTokenExample {

    // Constants
    private static final String DOT = ".";
    private static final String CHARSET = "UTF-8";
    private static final String SHA_256 = "SHA-256";
    private static final String HMAC_256 = "HmacSHA256";
    private static final String AES = "AES";
    /**
     * Encryption/decryption algorithm, encryption mode, and padding scheme
     */
    private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";
    private static final Base64.Encoder BASE64_ENCODER = Base64.getUrlEncoder();
    private static final Base64.Decoder BASE64_DECODER = Base64.getUrlDecoder();

    public static void main(String[] args) throws Exception {
        // Access and secret keys
        String accessKey = "4mBmzWmNt9Dy5een";
        String secretKey = "ef8d8fec05064779b3e0243cdae744e8";

        // Parameter list
        Map<String, String> parameter = new HashMap<>();
        parameter.put("meetingUid", "109391932341489664");
        parameter.put("externalRole", "HOST");
        parameter.put("externalId", "1");
        parameter.put("externalName", "Lucy");
        parameter.put("externalEmail", "hello@hilink.co");
        parameter.put("externalAvatarUrl", "<http://dummyimage.com/100x100>");
        // Filter out null or empty values
        parameter.entrySet().removeIf(entry -> entry.getValue() == null || "".equals(entry.getValue()));
        // Sort the parameters
        List<String> sortedParameter = parameter.values().stream()
                .sorted()
                .collect(Collectors.toList());
        // Merge sorted parameters into a single string
        String mergeString = sortedParameter.stream().reduce((p1, p2) -> p1 + p2).orElse(null);
        assert mergeString != null;
        // Generate the signature
        String signature = hmac256(mergeString, sha256(secretKey));
        // Add the signature parameter
        parameter.put("signature", signature);
        // Convert parameters to JSON
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(parameter);
        // Create the token
        String token = accessKey + DOT + aes(json, secretKey, accessKey);
        // Print the token
        System.out.println(token);
    }


    public static String aes(String plainText, String secret, String ivStr) {
        try {
            SecretKey secretKey = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), AES);
            Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
            cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(ivStr.getBytes(StandardCharsets.UTF_8)));
            byte[] byteEncode = plainText.getBytes(StandardCharsets.UTF_8);
            return BASE64_ENCODER.encodeToString(cipher.doFinal(byteEncode));
        } catch (Exception e) {
            throw new RuntimeException("AES encrypt fail,plainText=" + plainText + ",secret=" + secret.length() + "。" + e.getMessage(), e);
        }
    }

    private static String hmac256(String content, String secretKey) throws Exception {
        SecretKeySpec secretKeySpec = new SecretKeySpec(new HexBinaryAdapter().unmarshal(secretKey), HMAC_256);
        Mac mac = Mac.getInstance(secretKeySpec.getAlgorithm());
        mac.init(secretKeySpec);
        byte[] bytes = mac.doFinal(content.getBytes(CHARSET));
        return new HexBinaryAdapter().marshal(bytes).toLowerCase();
    }

    private static String sha256(String input) throws Exception {
        byte[] bytes = MessageDigest.getInstance(SHA_256).digest(input.getBytes(CHARSET));
        return new HexBinaryAdapter().marshal(bytes).toLowerCase();
    }

}

JoinToken will be output in the console as follows:

JoinToken:4mBmzWmNt9Dy5een.4QO0DeFy-jJBGYP2NucR--By3YrTI5GRsxP0I47Njhcp8pUvyG9WTZ1Nz4O7quI5Rt5OMhsZoRd5Is3yFfE9j6tY1mjFhrEgGf8oAgcP6EdHCkneGUhdQW9qn5Ka3EHQSI_SsAvviwVf10FAseNN6_NwdcC5Qa-vMYuLjn42EnfZXsz4baSpVQfEUxvE2qAIy1l5-G4spR56q_opRnvpqgHQ7VjKSt1wRa2Zhl2Exz96_0452Y3qgLMQQJRbVVBDNjbyMzPbmaW6BJkvyRFpJLtfnJtmbinqt-1Yd341xb983fIN_JgySlDTyg3d98HD4HTNJ_lx_6HNI-3-8r04__jQh_BX0ItijEcwRuR3Dmo=

Combine JoinUrl

Combine the meeting URL meetingUrl with the generated JoinToken to create the final meeting link.

meetingUrl:https://dev.vcaas.hilinkdemo.com/meeting

JoinToken:4mBmzWmNt9Dy5een.4QO0DeFy-jJBGYP2NucR--By3YrTI5GRsxP0I47Njhcp8pUvyG9WTZ1Nz4O7quI5Rt5OMhsZoRd5Is3yFfE9j6tY1mjFhrEgGf8oAgcP6EdHCkneGUhdQW9qn5Ka3EHQSI_SsAvviwVf10FAseNN6_NwdcC5Qa-vMYuLjn42EnfZXsz4baSpVQfEUxvE2qAIy1l5-G4spR56q_opRnvpqgHQ7VjKSt1wRa2Zhl2Exz96_0452Y3qgLMQQJRbVVBDNjbyMzPbmaW6BJkvyRFpJLtfnJtmbinqt-1Yd341xb983fIN_JgySlDTyg3d98HD4HTNJ_lx_6HNI-3-8r04__jQh_BX0ItijEcwRuR3Dmo=

JoinUrl:https://dev.vcaas.hilinkdemo.com/meeting?joinToken=4mBmzWmNt9Dy5een.4QO0DeFy-jJBGYP2NucR--By3YrTI5GRsxP0I47Njhcp8pUvyG9WTZ1Nz4O7quI5Rt5OMhsZoRd5Is3yFfE9j6tY1mjFhrEgGf8oAgcP6EdHCkneGUhdQW9qn5Ka3EHQSI_SsAvviwVf10FAseNN6_NwdcC5Qa-vMYuLjn42EnfZXsz4baSpVQfEUxvE2qAIy1l5-G4spR56q_opRnvpqgHQ7VjKSt1wRa2Zhl2Exz96_0452Y3qgLMQQJRbVVBDNjbyMzPbmaW6BJkvyRFpJLtfnJtmbinqt-1Yd341xb983fIN_JgySlDTyg3d98HD4HTNJ_lx_6HNI-3-8r04__jQh_BX0ItijEcwRuR3Dmo=

Get Meeting Data

After the meeting is over, corresponding meeting duration, attendance of participants, meeting recording (if recording was enabled during the meeting), POLL, QUIZ and other data will be generated. VCaaS platform provides two ways to obtain meeting data: push and query meeting data interface. The meeting duration and attendance data provided by VCaaS platform are based on client connection event generation, and there may be event delays. Therefore, the meeting data will be first proactively pushed five minutes after the meeting ends. For more details on querying meeting duration data interface /v1/meeting-center/meetings/{id}/data, please refer to the VCaaS API reference.

Meeting Data Response

{
  // Meeting duration data
  "meetingData": {
    // Meeting ID
    "meetingUid": "",
    // External meeting ID
    "meetingExternalId": "",
    // Original scheduled meeting start time
    "scheduledStartTime": "",
    // Original scheduled meeting end time
    "scheduledEndTime": "",
    // Actual meeting start time
    "startTime": "",
    // Actual meeting end time
    "endTime": "",
    // Meeting duration, in seconds
    "duration": ""
  },
  // Attendee attendance data
  "attendeeDatas": [
    {
      // Meeting ID  
      "meetingUid": "",
      // External meeting ID
      "meetingExternalId": "",
      // Attendee ID
      "attendeeUid": "",
      // External attendee ID
      "externalId": "",
      // Attendee's first entry time
      "timeIn": "",
      // Attendee's last exit time
      "timeOut": "",
      // Total attendance duration, in seconds
      "totalTime": "",
      // Device
      "device": "",
      // Attendee attendance detail data
      "details": [
        {
          // Attendance type, AttendeeJoined: enter the meeting; AttendeeLeft: leave the meeting; AttendeeDropped: attendee disconnected;
          "type": "",
          // Timestamp, in milliseconds
          "timestamp": 0
        }
      ]
    }
  ],
  // Meeting video data
  "meetingVideoData": {
    // Meeting ID 
    "meetingUid": "",
    // External meeting ID 
    "meetingExternalId": "",
    // Meeting video download address
    "videoUrls": [
        ""
    ]
  },
  // Meeting interaction data
  "meetingInteractiveData": {
    // Meeting ID 
    "meetingUid": "",
    // External meeting ID 
    "meetingExternalId": "",
    // Quiz data
    "quizData": {
      // Total number of quiz attempts   
      "totalCount": 0,
      // Quiz detail data
      "detailDatas": [
        {
          // Question ID  
          "id": "",
          // Question content and options
          "content": {
            // Options
            "options": [
              {
                "value": "",
                "label": ""
              }
            ],
            // Question content
            "content": ""
          },
          // Average accuracy
          "averageAccuracy": "",
          // Correct answer
          "correctAnswer": ""
        }
      ]
    },
    // Poll data
    "pollData": {
      // Total number of polls
      "totalCount": 0,
      // Poll detail data
      "detailDatas": [
        {
          // Poll ID
          "id": "",
          // Poll content and options
          "content": {
            // Options
            "options": [
              {
                "value": "",
                "label": ""
              }
            ],
            // Content
            "content": ""
          }
        }
      ]
    }
  },
  // Attendee interaction data
  "attendeeInteractiveDatas": [
    {
      // Meeting ID 
      "meetingUid": "",
      // External meeting ID 
      "meetingExternalId": "",
      // Attendee ID 
      "attendeeUid": "",
      // External attendee ID 
      "externalId": "",
      // Attendee quiz data
      "attendeeQuizData": {
        // Number of quiz attempts
        "count": 0,
        // Quiz results
        "answers": [
          {
            // Question ID
            "id": "",
            // Attendee username
            "username": "",
            // Question type
            "questionType": "",
            // Selection
            "selection": ""
          }
        ]
      },
    // Attendee poll data
    "attendeePollData": {
      // Number of poll attempts
      "count": 0,
      // Poll results
      "answers": [
        {
          // Poll ID
          "id": "",
          // Attendee username
          "username": "",
          // Poll type
          "pollType": "",
          // Poll option
          "pollOption": {
            "value": "",
            "label": ""
            }
          }
        ]
      }
    }
  ],
  // After-class evaluation data
  "evaluationData": [
    {
      // Attendee ID
      "attendeeUid": "222883139968741376",
      // External attendee ID
      "externalId": "3f4cf897028313443fcf93e48a5fda60",
      // Attendee role type
      "attendeeType": "HOST",
      // score
      "score": 4,
      // feedback
      "feedback": [],
      // review
      "review": ""
    }
  ]
}

Example of Meeting Data

{
    "meetingData": {
        "meetingUid": "103288082375249920",
        "meetingExternalId": "123",
        "scheduledStartTime": "1671519598",
        "scheduledEndTime": "1692196976",
        "startTime": "1672132286",
        "endTime": "1672201926",
        "duration": "2024"
    },
    "attendeeDatas": [
        {
            "meetingUid": "103288082375249920",
            "meetingExternalId": "123",
            "attendeeUid": "105859080664518656",
            "externalId": "Q8NnQKOaWhax8cD195wB7Q==",
            "timeIn": "1672132517",
            "timeOut": "1672133011",
            "device": "",
            "details": [
                {
                    "type": "AttendeeJoined",
                    "timestamp": 1672132517822
                },
                {
                    "type": "AttendeeLeft",
                    "timestamp": 1672132700326
                },
                {
                    "type": "AttendeeJoined",
                    "timestamp": 1672132952680
                },
                {
                    "type": "AttendeeLeft",
                    "timestamp": 1672133011815
                }
            ]
        }
    ],
    "meetingVideoData": {
        "meetingUid": "103288082375249920",
        "meetingExternalId": "123",
        "videoUrls": [
            "<https://hilink-agora-record-dev.s3.amazonaws.com/31/11e35f12a24b170324e9b38307ee9011_VCaaS31104936_0.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20230113T105238Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Credential=AKIA5MC3STOBSQDRGF7M%2F20230113%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=f08aa8d30c2e12ef4a909824413a13e489d409f673013414cd4b444cb48b03b6>"
        ]
    },
       "meetingInteractiveData": {
        "meetingUid": "103288082375249920",
        "meetingExternalId": "123",
        "quizData": {
            "totalCount": 1,
            "detailDatas": [
                {
                    "id": "f8d836e56fb030b893e0f3a05bc487a9",
                    "content": {
                        "options": [
                            {
                                "value": "A",
                                "label": "ff"
                            },
                            {
                                "value": "B",
                                "label": "ffff"
                            }
                        ],
                        "content": "jjjf"
                    },
                    "averageAccuracy": "",
                    "correctAnswer": "A"
                }
            ]
        },
        "pollData": {
            "totalCount": 1,
            "detailDatas": [
                {
                    "id": "65155160d48337ee47bcd634bd67bc66",
                    "content": {
                        "options": [
                            {
                                "value": "A",
                                "label": "fff"
                            },
                            {
                                "value": "B",
                                "label": "ffffff"
                            }
                        ],
                        "content": "nihaoy"
                    }
                }
            ]
        }
    },
    "attendeeInteractiveDatas": [
        {
            "meetingUid": "103288082375249920",
            "meetingExternalId": "123",
            "attendeeUid": "106838452825362432",
            "externalId": "FWhhpuTn1rUif3UM70gq7Q==",
            "attendeeQuizData": {
                "count": 1,
                "answers": [
                    {
                        "id": "ef84a2b4634bd53dee901b59076a5d5d",
                        "username": "106838452825362432",
                        "questionType": "MULTIPLE_CHOICE",
                        "selection": "A"
                    }
                ]
            },
            "attendeePollData": {
                "count": 1,
                "answers": [
                    {
                        "id": "6f3d5e11338c834b667940f85e0da317",
                        "username": "106838452825362432",
                        "pollType": "MULTIPLE_CHOICE",
                        "pollOption": {
                            "value": "A",
                            "label": "hoa"
                        }
                    }
                ]
            }
        }
    ],
    "evaluationData": [
        {
            "attendeeUid": "222883139968741376",
            "externalId": "3f4cf897028313443fcf93e48a5fda60",
            "attendeeType": "HOST",
            "score": 4,
            "feedback": [],
            "review": ""
        }
    ]
}

Manage Document

Users can use the VCaaS file interface to manage documents under their own organization. For more details, please refer to the content in the VCaaS API reference.

  1. get document lists: /v1/document-center/documents
  2. get one document: /v1/document-center/documents/{id}
  3. deleting documents: /v1/document-center/documents/{id}
Last Updated: