我正在尝试编写我的第一个Alexa技能,但应用程序流程有点混乱,甚至阅读有关对话委托等的所有文档。我真的很喜欢一些建议。
“Alexa,开始Movietime测验。”
欢迎来到Movietime测验。在我们开始之前,你在哪个团队:红色还是蓝色?
“蓝色。”
蓝色始终是最好的球队。问题1:哪些电影不是由阿尔弗雷德希区柯克执导的? A:眩晕,B:绳索,C:快乐吉尔摩。
“C。”
正确!蓝队10分。问题2...
这是一个简单的例子,用于以最短,最清晰的方式说明我的问题,然后再想知道为什么团队需要参与其中。
让初始启动请求处理程序说welcome-and-what-team,然后有两个意图。第一个显然是AnswerQuestionIntent,它会侦听“A”,“B”,“C”或“D”。第二个是SetTeamIntent,它会侦听“红色”或“蓝色”。
我有一个包含~100个琐事问题的数组。当游戏开始时,将会话属性'currentQuestion'设置为0.在AnswerQuestionIntent中,在处理用户的正确/错误响应后,递增该数字,如果它在9,则结束游戏;如果没有,请随机提问。
我实际上无法弄清楚如何让Alexa使用单个插槽作为话语。我的意思是,我想要一个'团队'插槽类型(值'红色'和'蓝色')和'答案'插槽类型(值'A','B','C'和'D' )。 SetTeamIntent应该由{team}
的话语{answer}
和AnswerQuestionIntent激活,但是当我尝试设置时,developer.amazon.com技能构建器给我“错误请求”错误。
我尝试在GitHub上查看SDK示例,但我有点迷失,因为我在学习时一直在使用GUI技能构建器,并且不确定它是如何映射的 - 无论如何都不足以阅读解决方案。
处理此问题有两种不同的方法。
1.带有对话模型的ElicitSlot指令
在您启动技能并触发意图后,您可以使用elicitslot directive进行回复。
交互模型:您可以定义一个插槽和一个意图,例如PlayGameIntent中的{team}和{answer}。提供触发意图的话语,例如“开始游戏”。
技巧:触发PlayGameIntent后。使用elicit slot指令返回响应。像下面这样的东西。
{
"version": "1.0",
"sessionAttributes": {},
"response": {
"outputSpeech": {
"type": "PlainText",
"text": "What team are you on? Blue or Red? "
},
"shouldEndSession": false,
"directives": [
{
"type": "Dialog.ElicitSlot",
"slotToElicit": "team",
"updatedIntent": {
"name": "PlayGameIntent",
"confirmationStatus": "NONE",
"slots": {
"team": {
"name": "team",
"confirmationStatus": "NONE"
},
"answer": {
"name": "answer",
"confirmationStatus": "NONE"
}
}
}
}
]
}
}
用户现在可以为插槽{team}提供答案,Alexa会为PlayGameIntent发送另一个IntentRequest。在游戏结束之前,您可以根据需要多次使用。
2.没有对话模型的自定义意图
如果不使用对话模型,您只能使用插槽 - 话语。您可以按照描述构建意图架构。如果您离开Skill Builder Beta,则会自动禁用交互模型的对话框模型。
然后,您可以使用如下样本话语构建意图模式:
AnswerQuestionIntent {answer}
SetTeamIntent {team}