如何使用Dialog.ElicitSlot for Python作为运行时环境

时间:2018-04-27 17:58:35

标签: alexa alexa-skill alexa-slot

我想在意图的调用开始时填充slot,但是在意图请求的后面部分。我想为用户提供一些选项,我希望他们从中选择一个。为此,我试图使用Dialog.ElicitSlot,但不知怎的,我收到了一个错误:

  

“对技能端点的请求导致错误。”

当我需要用户从我的列表中选择一个选项时,我正在返回此信息。

return {
    "version": "1.0",
    "sessionAttributes": {},
    "response": {
    "outputSpeech": {
        "type": "PlainText",
        "text": "These are the multiplex" + ("es" if len(multi_list) > 1 else "") + " " + outputSpeech + ". Please select one out of these."
        # outputSpeech contains the list of options I want the user to select from
    },
    "shouldEndSession": False,
    "directives": [
        {
            "type": "Dialog.ElicitSlot",
            "slotToElicit": "MULTIPLEX",
            "updatedIntent": {
                "name": "GetMovieDetails",
                "confirmationStatus": "NONE",
                "slots": {
                    "CITY" : {
                        "name" : "CITY",
                        "confirmationStatus" : "NONE",
                        "value" : city # this is already filled, it is just anti-capitalised 
                    },
                    "NAME" : {
                        "name" : "NAME",
                        "confirmationStatus" : "NONE",
                        "value" : movie_name # this is already filled, it is just anti-capitalised 
                    },
                    "MULTIPLEX" : {
                        "name" : "MULTIPLEX",
                        "confirmationStatus" : "NONE",
                    }
                }
            }
        }
    ]
}

我正在使用python-lambda-local测试我的技能,它在我的本地计算机上工作正常(我只需要手动将dialogState更改为"COMPLETED",就像{{3} }})。它返回上面写的所有内容。但是在Skill Tester上测试时会出错。 here是技能测试器中返回的输出。 PS:我没有检查Build Section中的Slot Filling复选框。 (因为我需要稍后填写的插槽),Here是完整的代码以防万一。

2 个答案:

答案 0 :(得分:0)

请尝试省略整个"updatedIntent"部分,因为ElicitSlot不需要此信息。

但更重要的是:您必须确保您的脚本以JSON格式返回实际文本!

看看http://flask.pocoo.org/docs/1.0/api/#flask.json.jsonifyhttps://docs.python.org/2/library/json.html

答案 1 :(得分:0)

上帝,我不想承认这一点。

Dialog.ElicitSlot工作正常,以及我希望它的方式。 我的代码出错,没有错误。我认为我的技能花了一些时间从远程站点获取数据并对其进行一些计算。所以我增加了时间和bam,它起作用了。

在本地测试您的技能总是更好,但在 aws lambda控制台上测试一次是很棒的。我不知道为什么我之前没有这样做。

总而言之,我只需要增加我的技能中的超时