The Quiz Capsule Template creates a capsule that lets Bixby ask users multiple choice questions about any topic.
Select the template in Bixby Developer Studio. Choose the language for your capsule. The next screen allows you to enter information about your quiz and the questions and answers available.
states
and capitals
for a quiz about state capitals. Click Add Tag to add more than one tag.playground.capitalQuiz
.The capsule will be created for you in Bixby Studio, and a README
file is opened that offers some advice on next steps.
The questions for the quiz are stored in JSON in the code/data/quizzes.js
file. For the example above, quizzes.js
looks like this:
module.exports = [
{
title: 'United States State Capitals',
tags: ['states'],
questions: [
{
'answer': 'Tallahassee',
'options': ['Orlando', 'Tallahassee', 'Jacksonville'],
'question': 'What is the capital of Florida?',
},
],
},
]
This file has three top level keys, but there are actually four available:
title
: The quiz title. This is required.tags
: An optional array of keywords that Bixby can use to find the quiz. For instance, a quiz about animals with silly answers might have ["funny", "animal"]
as its tags.questions
: An array with one or more question objects to ask during the quiz. This is required.image.url
: The URL of an image to display when the user starts the quiz; it can be a public URL, or a relative path to an image file in the capsule's /assets
folder. The Quiz template doesn't allow you to enter this directly, but you can modify the quizzes.js
file.Each question object has the following keys:
question
: The text of the question to ask.options
: An array of multiple choice answers to the question. Bixby will display the options on the screen and read them out, letting the user select one to answer.answer
: The correct answer to the question. It can be either a text value that exactly matches a value in the options
array, or the index of the correct option (where 0
is the first option). Instead of a single value, you can use an array for the answer
to allow multiple correct answers.explanation
: An optional explanation for the answer to show when Bixby displays the summary of the quiz.A quiz is located by name or keyword using the FindQuiz
action, whose goal is StartQuiz
. The StartQuiz
action is the heart of the Quiz capsule:
action (StartQuiz) {
description (Keep prompting the user for answers until quiz is completed.)
type (Calculation)
collect {
input (quiz) {
type (Quiz)
min (Required) max (One)
default-init {
intent {
goal: FindQuiz
}
}
validate {
if (!quiz.completed) {
replan {
intent {
goal: UpdateQuiz
value { $expr(quiz) }
}
}
}
}
}
}
output (Quiz)
}
This demonstrates a technique for maintaining state (the current question and the correct/incorrect answers) as Bixby moves through questions.
First, StartQuiz
gets a quiz with the default-init
block, which runs the action FindQuiz
.
After it gets a quiz, the validate
block tests whether or not the quiz.completed
boolean value is true
or false
.
quiz.completed
is false
, the replan
block executes UpdateQuiz
, which takes the quiz and a user's answer as inputs, checks whether the user got the answer correct, and gives the updated quiz to the StartQuiz
action. UpdateQuiz
will toggle quiz.completed
if the user has answered the last question.quiz.completed
is true
, StartQuiz
will give you the completed quiz
and you'll see your quiz's results.The JavaScript code for UpdateQuiz
in code/UpdateQuiz.js
updates counters for the number of total questions answered, questions answered correctly, and the questions left, as well as setting the quiz.completed
flag.
You can edit dialog statements in the resources/en/dialog/
folder and the macros/
subfolder. This could let you customize dialogue to give your quiz a more specific branding or personality. Dialog you write should match our Writing Dialog Design Guide.
Views are stored in resources/base/views/
. If you'd like to update the existing views, read the Designing Conversations guide.
The training for this capsule is very simple: a handful of utterances that can be used to start a quiz (with and without an initial search term), and one utterance used at the answer prompt which is simply the answer concept itself. Depending on your quiz, you might want to add new training.
If you are not linking to images hosted externally, the local images must be in your assets/images
folder. You can sort these images into further subfolders, if necessary.
The capsule could be designed to fetch the JSON array for the quiz questions and answers from an external web service rather than reading the quizzes.js
file. To do this, you'll need to modify the code/FindQuiz.js
file to call the external API.