我正在尝试编写我的第一个 Alexa 技能,但应用程序流程有点令人困惑,甚至阅读了有关对话委托等的所有文档。我真的很想得到一些建议。
“Alexa,开始电影时间测验。”
欢迎来到电影时间测验。在我们开始之前,您属于哪一队:红队还是蓝队?
“蓝色的。”
蓝色永远是最好的球队。问题 1:以下哪部电影不是阿尔弗雷德·希区柯克执导的?A:眩晕,B:绳子,C:快乐吉尔摩。
“C。”
正确的!蓝队得10分。问题2...
这是一个简化的示例,旨在以最短、最清晰的方式说明我的问题,然后您就会想知道为什么团队需要参与其中。
让初始启动请求处理程序说出欢迎和团队内容,然后有两个意图。第一个显然是 AnswerQuestionIntent,它监听“A”、“B”、“C”或“D”。第二个是 SetTeamIntent,它监听“红色”或“蓝色”。
我有一个包含约 100 个琐事问题的数组。游戏开始时,将会话属性“currentQuestion”设置为 0。在 AnswerQuestionIntent 中,处理用户的正确/错误响应后,增加该数字,如果为 9,则结束游戏;如果没有,请随机询问一个问题。
我实际上无法弄清楚如何让 Alexa 使用单个插槽作为话语。我的意思是,我想要一个“团队”插槽类型(值“红色”和“蓝色”)和一个“答案”插槽类型(值“A”、“B”、“C”和“D”) )。SetTeamIntent 应该由话语激活{team}
,AnswerQuestionIntent 应该由激活{answer}
,但是当我尝试设置它时,developer.amazon.com 技能构建器给了我“错误请求”错误。
我尝试查看 GitHub 上的 SDK 示例,但我有点迷失,因为我在学习时一直在使用 GUI 技能构建器,并且不确定它到底是如何映射的——无论如何,还不够好,无法阅读解决方案。
有两种不同的方法可以处理这个问题。
1. ElicitSlot 指令与对话框模型
启动技能并触发意图后,您可以使用eliitslot 指令进行响应。
交互模型:您定义一个槽位和一个意图,例如 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"
}
}
}
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
用户现在可以为槽 {team} 提供答案,Alexa 会发送另一个 PlayGameIntent 的 IntentRequest。您可以根据需要多次重新引发,直到游戏结束。
2. 没有对话框模型的自定义意图
如果不使用对话模型,您就不会受到仅限槽话语的限制。您可以按照您的描述构建您的意图架构。如果您离开 Skill Builder Beta,您会自动禁用交互模型的对话模型。
然后,您可以使用如下示例话语构建意图模式:
AnswerQuestionIntent {answer}
SetTeamIntent {team}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1715 次 |
最近记录: |