答題卡
功能概述
本模組主要用於接收和處理講師、助教和管理員等使用者發起的答題卡,方便接入方實現題目處理展示、觀眾答題和結果顯示等功能。
答題卡分為普通答題和快速問答。
- 快速問答只有單選/多選答題形式。
- 普通答題功能較為齊全,包含單選、多選、評分和投票題目,還可以使用答題限時功能,答題者需在限定時間內進行答題。
初始化及銷毀
在實例化該模組並進行使用之前,需要對 SDK 進行初始化配置,詳細請見參考文件。
線上檔案引入方式
// script 标签引入,根据版本号引入JS版本。
<script src="https://websdk.videocc.net/interactions-receive-sdk/0.24.0/lib/polyv-ir.umd.js"></script>
<script>
const { AnswerCard } = window.PolyvIRSDK;
</script>
import 方式引入(推薦)
import { AnswerCard } from '@polyv/interactions-receive-sdk';
const answerCardSdk = new AnswerCard();
// ...
// 销毁 SDK 实例,清除逻辑
answerCardSdk.destroy();
使用流程
監聽「答題開始」事件
當講師/助教等發起端發起一次答題卡時,會觸發 SDK 的 answerCardSdk.events.GET_TEST_QUESTION_CONTENT 事件,該事件含有答題卡相關資訊,包括答題卡類型、題目、選項及是否限時題目等,可以將對應資訊展示給使用者用於作答。
answerCardSdk.on(answerCardSdk.events.GET_TEST_QUESTION_CONTENT, function(msg) {
console.log('接收到答题开始事件', msg,'题目:', msg.name, '题目限时:', msg.duration);
});
展示答題卡題目時,可以根據答題卡類型和題目類型做不同的展示:
answerCardSdk.questionItemTypes下的屬性表示答題卡類型列表(快速問答、普通答題)。將其屬性值與msg.itemType的值進行比對,就可以知道當前是哪種答題卡。answerCardSdk.questionTypes下的屬性表示題目具體類型(單選、多選、評分或者投票類型)。將其屬性值與msg.type的值比對,就可以知道當前題目的具體類型。
例如:
function questionHandler(msg) {
if (msg.itemType === answerCardSdk.questionItemTypes.QuickAnswerCard) {
const questionType = {
[answerCardSdk.questionTypes.CheckBox]: '多选题',
[answerCardSdk.questionTypes.Radio]: '单选题',
}[msg.type];
console.log('本次答题卡为快速问答, 题目类型为: ' + questionType);
} else if (msg.itemType === answerCardSdk.questionItemTypes.Normal) {
const questionType = {
[answerCardSdk.questionTypes.CheckBox]: '多选题',
[answerCardSdk.questionTypes.Radio]: '单选题',
[answerCardSdk.questionTypes.Score]: '评分题',
[answerCardSdk.questionTypes.Vote]: '投票题',
}[msg.type];
console.log('本次答题卡为普通答题, 题目类型为: ' + questionType);
}
}
answerCardSdk.on(answerCardSdk.events.GET_TEST_QUESTION_CONTENT, questionHandler);
對於限時題目,可以透過 answerCardSdk.getServerTime() 獲取伺服器端當前剩餘時間,在必要的時候進行同步。
const data = await answerCardSdk.getServerTime();
console.log('剩余时间', data.time);
提交使用者答案
如果當前正在答題,可使用 answerCardSdk.answerQuestion 將使用者答案提交給伺服器端。該方法是非同步方法,參數是使用者所選選項的字串陣列(大寫),根據回傳結果 code 欄位展示不同的提示資訊。code 的值所表示的狀態請見 API 文件中 answerCardSdk.answerQuestionResCode 的屬性。
const res = await answerCardSdk.answerQuestion(['A', 'B']);
if (res.code === answerCardSdk.answerQuestionResCode.SubmitSuccess) {
console.log('提交成功');
}
監聽「答題結束」事件
發起端停止答題,或限時題目倒數計時結束時,answerCardSdk.events.STOP_TEST_QUESTION 會被觸發,此時需要將正在顯示的題目關閉、或者顯示截止答題等提示。
answerCardSdk.on(answerCardSdk.events.STOP_TEST_QUESTION, function(msg) {
console.log('答题结束', msg);
});
監聽「答題結果」事件
在講師發送結果後,SDK 將觸發 answerCardSdk.events.GET_TEST_QUESTION_RESULT 事件,該事件含有題目內容、題目答案和選項人數等,可基於這些資訊,與使用者個人答案進行比對,展示使用者答題結果。
answerCardSdk.on(answerCardSdk.events.GET_TEST_QUESTION_RESULT, function(msg) {
console.log('答题结果', msg);
});
可使用 answerCardSdk.curSubmittedAnswer(string 類型) 獲取使用者當前題目的個人已提交答案,與正確答案進行比對。
注意
如果不需要再使用答題卡 SDK 時,請呼叫 SDK 實例的 destroy 方法去銷毀實例。
