我正在尝试使用python中的Flask Ask创建一个简单的Alexa技能。
我有一个名为“SearchIntent”的意图,带有“searchterm”插槽,而python代码看起来像这样:
@ask.intent("SearchIntent")
def SearchIntent(searchterm):
resList = []
searchterm = searchterm.lower()
for item in somelist:
if item.find(searchterm) != -1:
resList.append(item)
return question("I Found " + str(len(resList)) + ", Do you want me to list them all?")
我想检查来自用户的回复,如果他说“是”而不是阅读所有结果:
return statement('\n'.join(resList))
如果用户拒绝,则执行其他操作
类似的东西:
...
return question("I Found " + str(len(resList)) + ", Do you want me to list them all?")
if "return question" == "yes":
do something
else:
do something else
我不想在YesIntent中再次创建搜索功能,是否可以在同一个函数中执行类似的操作?
提前谢谢!
答案 0 :(得分:5)
使用烧瓶询问建议的方法是不可能的。在致电return
后,您将离开SearchIntent()函数,无法检查答案或运行其他代码。
但是,您仍然可以使其工作:在用户回答您的问题后,将发送新意图并且flask-ask将调用相应的函数。通过使用@ user3872094建议的会话属性,您可以在此新功能中处理searchterm
。会话属性用于在不同意图请求之间的会话期间保留用户输入
检查这个最小的例子:
@ask.intent("SearchIntent")
def SearchIntent(searchterm):
session.attributes['term'] = searchterm
return question("I understood {}. Is that correct?".format(searchterm))
@ask.intent('AMAZON.YesIntent')
def yes_intent():
term = session.attributes['term']
return statement("Ok. So your word really was {}.".format(term))
@ask.intent('AMAZON.NoIntent')
def no_intent():
return statement("I am sorry I got it wrong.")
在您的intent_schema中添加Amazon Yes和No intent:
{
"intents": [
{
"intent": "SearchIntent",
"slots": [{
"name": "searchterm",
"type": "AMAZON.LITERAL"
}]
},{
"intent": "AMAZON.NoIntent"
}, {
"intent": "AMAZON.YesIntent"
}
]
}