【度客Creator】修改问答技能模板为带图问答
易伟 发布于2018-11-10 12:18 浏览:405 回复:0
1
收藏

官方推出的问答技能模板十分好用,开发者只要填写题库即可,地址如下:

https://github.com/dueros/bot-sdk-node.js/tree/master/samples/trivia

这个模板有个缺点是文字问答,比较适合无屏音箱,对于有屏音箱,可以增加一些识图问题,可以对模板按如下方式修改。

首先是questions.js,以四个问题为例,增加url键值,图片上传到资源中

{
      '这个标志是何含义': [
        '应当鸣喇叭',
        '禁止鸣喇叭',
        '禁止鸣高音喇叭',
        '禁止鸣低音喇叭',
 ],
 'url':'http://dbp-resource.gz.bcebos.com/***'
     
    },
接下来是index.js,经测试图片卡片模式不太美观,根据需要选择左图右文的展示模板,头部加载模板
const RenderTemplate = Bot.Directive.Display.RenderTemplate;
const BodyTemplate3 = Bot.Directive.Display.Template.BodyTemplate3;
 
启动部分addLaunchHandler修改如下,设置一个图片和内容参数
this.addLaunchHandler(() => {
			this.waitAnswer();
			let speechOutput = '欢迎来到交通法规问答。请选择正确的答案。';
			//初始化一轮中的问题列表和第一题的话术
			let repromptText = this.startNewGame();
			
			let bodyTemplate = new BodyTemplate3();
			bodyTemplate.setPlainContent(repromptText[0]);
			bodyTemplate.setImage(repromptText[1]);
			let directive = new RenderTemplate(bodyTemplate);
			return {
				directives: [directive],
				outputSpeech: speechOutput + repromptText[0]
			};

修改startNewGame方法,主要是获取图片url,然后以数组返回

startNewGame() {
		let questionsList = questions.QUESTIONS;
		let gameQuestions = this.populateGameQuestions(questionsList);
		let correctAnswerIndex = Math.floor(Math.random() * (ANSWER_COUNT));
		console.log(correctAnswerIndex);
		let roundAnswers = this.populateRoundAnswers(gameQuestions, 0, correctAnswerIndex, questionsList);
		let currentQuestionIndex = 0;
		let spokenQuestion = Object.keys(questionsList[gameQuestions[currentQuestionIndex]])[0];
		let imageurl=questionsList[gameQuestions[0]]['url'];
		
		let answertext = '第1题:\n' + spokenQuestion + '\n';
		for (let i = 0; i < ANSWER_COUNT; i += 1) {
			answertext += `${i + 1}. ${roundAnswers[i]}.\n`;
		}
		let repromptText = [answertext, imageurl]
		let currentQuestion = questionsList[gameQuestions[currentQuestionIndex]];

		this.setSessionAttribute('currentQuestionIndex', currentQuestionIndex);
		this.setSessionAttribute('correctAnswerIndex', correctAnswerIndex + 1);
		this.setSessionAttribute('gameQuestions', gameQuestions);
		this.setSessionAttribute('questionsList', questionsList);
		this.setSessionAttribute('score', 0);
		this.setSessionAttribute('correctAnswerText', currentQuestion[Object.keys(currentQuestion)[0]][0]);
		return repromptText;

以上基本完成,然后同样修改下一题和重新开始部分即可。

收藏
点赞
1
个赞
TOP