我正在尝试编写我的第一个Alexa技能,但应用程序流程有点混乱,甚至阅读有关对话委托等的所有文档。我真的很喜欢一些建议。
“Alexa,开始Movietime测验。”
欢迎参加Movietime测验。在我们开始之前,你在哪个团队:红色还是蓝色?
“蓝色”。
Blue始终是最好的团队。问题1:哪些电影不是由阿尔弗雷德希区柯克执导的? A:眩晕,B:绳索,C:Happy Gilmore。
“C”。
正确!蓝队10分。问题2 ......
这是一个简单的例子,用于以最短,最清晰的方式说明我的问题,然后再想知道为什么团队需要参与其中。
让初始启动请求处理程序说welcome-and-what-team,然后有两个意图。第一个显然是AnswerQuestionIntent,它会侦听“A”,“B”,“C”或“D”。第二个是SetTeamIntent,它会侦听“red”或“blue”。
我有一个包含约100个琐事问题的数组。当游戏开始时,将会话属性'currentQuestion'设置为0.在AnswerQuestionIntent中,在处理用户的正确/错误响应后,递增该数字,如果它在9,则结束游戏;如果没有,请随机提问。
我实际上无法弄明白如何让Alexa使用单个插槽作为话语。我的意思是,我想要一个'团队'插槽类型(值'红色'和'蓝色')和'答案'插槽类型(值'A','B','C'和'D' )。 SetTeamIntent应该由话语{team}
和AnswerQuestionIntent {answer}
激活,但是当我尝试设置时,developer.amazon.com技能构建器会给我'错误请求'错误。
我尝试在GitHub上查看SDK示例,但我有点迷失,因为我在学习时一直在使用GUI技能构建器,并且不确定它是如何映射的 - 不足以阅读解决方案,无论如何。
答案 0 :(得分:1)
有两种不同的方法可以解决这个问题。
<强> 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}