Если у вас много вопросов и вы хотите ответить на каждый из них, вы можете использовать переменную sessionAttributes
.Переменная сеанса может сохранять свое значение в течение всего сеанса.Вы можете создать словарь для сохранения в вашем sessionAttributes
(это должен быть словарь).
Вы можете сохранить что-то подобное в переменной сеанса.
sessionAttributes: {
"AllQuestions" : ["string", "string"],
"LastQuestionIndex" : integer
}
Я предполагаю, что вы можете получить список вопросов (используя запрос GET).
Шаг 1: Сделайте слот
Answer
будет слоткоторый будет хранить ваш ответ.
Шаг 2: Подготовьте свои вопросы
Когда ваше намерение только началось и у вас ничего нет в вашем sessionAttributes
(используйте простое if-else), вам придетсясделайте запрос GET и соберите все свои вопросы (может быть, в списке или что-то).Вы делаете свой запрос GET и сохраняете все вопросы в своем sessionAttributes['AllQuestions']
.И установите LastQuestionIndex = -1
.
Теперь начинается сложная часть. (я также предполагаю, что вы можете использовать Dialog.ElicitSlot
Директиву).
Шаг3: Задайте вопросы один за другим.
Теперь у вас есть список всех вопросов, а также индекс последнего заданного вопроса.А теперь вам просто нужно увеличить индекс, получить следующий вопрос и использовать директиву Dialog.ElicitSlot
, чтобы задать этот новый вопрос.И обновите LastQuestionIndex
в ваших атрибутах сеанса.
Шаг 4: Получение ответа
Прежде чем перейти к следующему вопросу, вам также придется проверить, установлен ли слот Answer
имеет какое-либо значение или нет? Если у него есть значение (это не «Нет»), то вы можете использовать переменную LastQuestionIndex
и сохранить ответ на этот конкретный вопрос.
Если выИщите код, вот и вы:
# Line 1 - 22 should be in your intent function
sessionAttributes = dict()
if 'sessionAttributes' in event['session']:
sessionAttributes = event['session']['sessionAttributes']
if not sessionAttributes.has_key('AllQuestions') :
# Make the GET REQUEST
Questions = ["all", "of", "your", "Questions", "stored", "in", "a", "list"]
sessionAttributes['AllQuestions'] = Questions
sessionAttributes['LastQuestionIndex'] = -1
Answer = getSlotValue('Answer')
if Answer != None:
# AllAnswers is a dictionary which has key as the question number and value is the answer
# AllAnswers = {
# 0 : "Answer to your first question",
# 1 : "Answer to your second question"
# }
AllAnswers[sessionAttributes['LastQuestionIndex']] = Answer
return ansNextQuestion(sessionAttributes)
def askNextQuestion(sessionAttributes) :
Last = sessionAttributes['LastQuestionIndex']
sessionAttributes['LastQuestionIndex'] = Last + 1
if Last < len(sessionAttributes['AllQuestions']):
outputSpeech = "Your next question is " + sessionAttributes['AllQuestions'][Last + 1]
return {
"version": "1.0",
"sessionAttributes": sessionAttributes,
"response": {
"outputSpeech": {
"type": "PlainText",
"text": outputSpeech
},
"shouldEndSession": False,
"directives": [
{
"type": "Dialog.ElicitSlot",
"slotToElicit": "Question",
"updatedIntent": {
"name": "GetMovieDetails",
"confirmationStatus": "NONE",
"slots": {
"Answer": {
"name": "Answer",
"value": "NONE" # You can change the value of Answer to get new answer, this is allowed.
}
}
}
}
]
}
}
else :
# You are out of questions, now proceed to what you should do after getting all the answers.