Alexa Flask询问是/否响应处理

问题描述 投票:4回答:1

我正在尝试使用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中再次创建搜索功能,是否可以在同一个函数中执行类似的操作?

先感谢您!

python amazon alexa alexa-skill flask-ask
1个回答
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"
        }      
    ]
}
© www.soinside.com 2019 - 2024. All rights reserved.