16 How to create a Quiz Bot in Dialogflow ES
Dialogflow ES Quickstart Templates Part 2
In this article, I will explain how you can build a Quiz bot in Dialogflow ES where the user can answer multiple choice questions (by clicking on a button) and then the bot will calculate and display their quiz score at the end of it.
Here is the list of questions for this bot.
This is what the Mindomo flowchart looks like
I didn’t complete the flowchart, but you should be able to follow the pattern and do it.
But more interestingly, notice that this flowchart includes the “split and merge” pattern.
When you have two different intentsBoth Dialogflow ES and Dialogflow CX have the concept of int... More which both have the same output context (await_answer_2 in this case), you have a split-and-merge pattern. The blue arrow is actually a merge, although I recommend people number the contextsContexts are used in Dialogflow ES to manage the state of th... More so that they can avoid arrows which “cross connect” and make the flowchart harder to read.
Let us define the intents
First create an intent where the user will ask to start the quiz
Create an intent for the correct answer for question 1. Notice that we set the score1 to 1.
Add the intent for an incorrect answer for question 1. Notice that we set score1 to 0 in this case.
Now define the intent which handles the correct answer for question 2
Next we add the intent for the incorrect answer for question 2
Now follow the same patterns and create the intents for questions 3 and 4.
Finally, when user answers question 5 correctly, we need to call the webhookYou can use webhooks to add custom business logic in both Di... More.
Similarly we also call the webhook if user provides the incorrect answer for question 5.
This is the core of the Python webhook code
def calculate_score(req):
query_result = req.get('queryResult')
session_vars = get_session_vars(query_result)
sum_of_scores = get_sum_of_scores(session_vars)
fulfillment_messages = json.dumps(query_result.get('fulfillmentMessages'))
return_msg = fulfillment_messages.replace('_SCORE_', str(sum_of_scores))
json_formatted = json.loads(return_msg)
result = {
"fulfillmentMessages": json_formatted
}
with open('result.json', 'w', encoding='utf-8') as f:
json.dump(result, f, ensure_ascii=False, indent=4)
return result
The get_sum_of_scores just calculates the sum of the 5 scores
def get_sum_of_scores(session_vars):
session_vars_params = session_vars.get('parameters')
score1 = int(session_vars_params.get('score1'))
score2 = int(session_vars_params.get('score2'))
score3 = int(session_vars_params.get('score3'))
score4 = int(session_vars_params.get('score4'))
score5 = int(session_vars_params.get('score5'))
return score1 + score2 + score3 + score4 + score5
Here is what the bot looks like in Dialogflow Messenger
Note: This is my old website and is in maintenance mode. I am publishing new articles only on my new website.
If you are not sure where to start on my new website, I recommend the following article:
Is Dialogflow still relevant in the era of Large Language Models?