Python运行时使用Dialog.ElicitSlot报错:意图后期填充槽位遇请求错误
解决Dialog.ElicitSlot调用报错的问题
我来帮你搞定这个槽位填充的问题!你遇到的"Request to skill endpoint resulted in an error"错误,本质是因为返回的响应里缺少了Alexa识别槽位收集指令的关键部分——Dialog.ElicitSlot的directive配置,导致Alexa不知道你要触发后期槽位填充的逻辑。
核心问题分析
你之前返回的响应只包含了基础的outputSpeech,但没有告诉Alexa「我要引导用户填充某个特定槽位」,所以技能端点无法正确解析你的请求,进而报错。
正确的Dialog.ElicitSlot响应格式
要实现让用户从列表中选择选项来填充槽位,你的返回结构必须包含directives数组,明确指定触发Dialog.ElicitSlot,同时要配置好目标槽位、当前意图信息,还要给出清晰的选项引导语。
举个具体的示例(假设你要填充的槽位是FavoriteColor,选项为红/蓝/绿):
return { "version": "1.0", "sessionAttributes": {}, "response": { "outputSpeech": { "type": "PlainText", "text": "你想选择哪种颜色呢?可选的有红色、蓝色和绿色哦。" }, "reprompt": { "outputSpeech": { "type": "PlainText", "text": "请从红色、蓝色和绿色中选一个告诉我吧。" } }, "directives": [ { "type": "Dialog.ElicitSlot", "slotToElicit": "FavoriteColor", "updatedIntent": { "name": "YourTargetIntentName", // 替换成你实际的意图名称 "slots": { "FavoriteColor": { "name": "FavoriteColor", "value": null } // 如果有其他已填充的槽位,也可以在这里保留它们的value } } } ], "shouldEndSession": false } };
关键注意事项
- 必须包含directives数组:这是触发Alexa槽位收集逻辑的核心,没有它Alexa无法识别你的意图
- 槽位名称要精准匹配:
slotToElicit的名称必须和你在技能控制台定义的槽位名称完全一致(包括大小写),拼写错误会直接导致失败 - updatedIntent要正确配置:必须填写当前触发的意图名称,槽位部分要包含所有相关槽位的状态(已填充的可以保留value,未填充的设为null)
- 不要关闭会话:
shouldEndSession必须设为false,这样用户才能继续和技能交互选择选项 - 引导语要清晰:outputSpeech里必须明确给出可选列表,让用户清楚该说什么来填充槽位
按照这个结构调整你的返回内容后,应该就能正常触发用户选择槽位的流程,不会再出现端点错误啦!
内容的提问来源于stack exchange,提问作者Nikhil Wagh
相关产品推荐
相关产品推荐

