我有一个lambda函数,它成功执行一个名为GetEvent
的intent,它返回一个特定的字符串。为了测试目的,我为这个意图创建了一个话语(一个很简单,并且不需要任何可选的插槽来调用技能)但是当使用服务模拟器测试lambda函数时GetEvent
的话语我遇到了"The response is invalid"
的lambda回应。以下是交互模型的样子:
#Intent Schema
{
"intents": [
{
"intent": "GetVessel",
"slots": [
{
"name": "boat",
"type": "LIST_OF_VESSELS"
},
{
"name": "location",
"type": "LIST_OF_LOCATIONS"
},
{
"name": "date",
"type": "AMAZON.DATE"
},
{
"name": "event",
"type": "LIST_OF_EVENTS"
}
]
},
{
"intent": "GetLocation",
"slots": [
{
"name": "event",
"type": "LIST_OF_EVENTS"
},
{
"name": "date",
"type": "AMAZON.DATE"
},
{
"name": "boat",
"type": "LIST_OF_VESSELS"
},
{
"name": "location",
"type": "LIST_OF_LOCATIONS"
}
]
},
{
"intent": "GetEvent",
"slots": [
{
"name": "event",
"type": "LIST_OF_EVENTS"
},
{
"name": "location",
"type": "LIST_OF_LOCATIONS"
}
]
}
]
}
使用适当的自定义技能类型语法和
#First test Utterances
GetVessel what are the properties of {boat}
GetLocation where did {event} occur
GetEvent get me my query
当给Alexa提供话语get me my query
时,lambda响应应该像执行中那样输出字符串。我不确定为什么不是这样的;这是我与Alexa Skills Kit的第一个项目,所以我很新。有没有什么我不理解lambda函数,意图模式和话语是如何拼凑在一起的?
更新:感谢AWSSupport的一些帮助,我已将问题缩小到json请求中将新会话标记为true
的区域。要使话语工作,必须将其设置为false
(这在手动输入json请求时有效,在lambda执行期间也是如此)。为什么会这样? Alexa真的关心它是否是在调用期间的新会话? I've cross-posted this to the Amazon Developer Forums以及几天前,但尚未收到某人的回复。
答案 0 :(得分:0)
这可能已经或可能没有改变 - 我上次使用服务模拟器(大约两周前写作时)它有一个非常严重的错误,会导致请求被映射到您的第一个/错误的意图,不管实际的模拟语音输入。
因此,即使您输入了像wafaaefgae
这样的随机内容,它也只是尝试将其映射到您定义的第一个意图,不会为所述意图提供任何可能导致意外结果的插槽。
您的问题很可能与此相关,触发相同的意外/错误行为,因为您没有使用示例话语中的任何插槽
在花费更多时间调试之前,我建议使用实际回声或https://echosim.io/尝试使用Intent - 通过实际语音进行交互按预期工作,不像“模拟器”#39;