如何使用 Dialog.ElicitSlot for Python 作为运行时环境
How to use Dialog.ElicitSlot for Python as Runtime environment
我不想在调用 Intent 的开始时填充 slot
,而是在 intent 请求 的后面部分。我想为用户提供一些选项,我希望他们 select 其中之一。为此,我尝试使用 Dialog.ElicitSlot
,但不知何故我收到错误:
"Request to skill endpoint resulted in an error."
当我需要用户从我的列表中select一个选项时,我会返回这个。
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"
,就像那个 here). It returns everything written above. But It gives an error while testing it on Skill Tester. Here 是技能测试器中返回的输出。
PS : 我没有选中构建部分中的插槽填充复选框。 (因为我需要稍后填充插槽),here 是完整的代码以防万一。
尝试省略整个 "updatedIntent"
部分,因为 ElicitSlot
不需要此信息。
但更重要的是:您必须确保您的脚本 returns 实际文本采用 JSON 格式!
看看http://flask.pocoo.org/docs/1.0/api/#flask.json.jsonify
或 https://docs.python.org/2/library/json.html
天哪,我不想承认这一点。
Dialog.ElicitSlot
工作正常,并且符合我的预期。
我的代码的错误是,没有错误。我认为我的技能是花一些时间从远程站点获取数据并对其进行一些计算。所以我增加了超时时间,结果成功了。
在本地测试你的技能总是更好,但最好在 aws lambda 控制台上测试一次。我不知道为什么我没有早点这样做。
总而言之,我只需要增加技能的超时。
我不想在调用 Intent 的开始时填充 slot
,而是在 intent 请求 的后面部分。我想为用户提供一些选项,我希望他们 select 其中之一。为此,我尝试使用 Dialog.ElicitSlot
,但不知何故我收到错误:
"Request to skill endpoint resulted in an error."
当我需要用户从我的列表中select一个选项时,我会返回这个。
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"
,就像那个 here). It returns everything written above. But It gives an error while testing it on Skill Tester. Here 是技能测试器中返回的输出。
PS : 我没有选中构建部分中的插槽填充复选框。 (因为我需要稍后填充插槽),here 是完整的代码以防万一。
尝试省略整个 "updatedIntent"
部分,因为 ElicitSlot
不需要此信息。
但更重要的是:您必须确保您的脚本 returns 实际文本采用 JSON 格式!
看看http://flask.pocoo.org/docs/1.0/api/#flask.json.jsonify 或 https://docs.python.org/2/library/json.html
天哪,我不想承认这一点。
Dialog.ElicitSlot
工作正常,并且符合我的预期。
我的代码的错误是,没有错误。我认为我的技能是花一些时间从远程站点获取数据并对其进行一些计算。所以我增加了超时时间,结果成功了。
在本地测试你的技能总是更好,但最好在 aws lambda 控制台上测试一次。我不知道为什么我没有早点这样做。
总而言之,我只需要增加技能的超时。