Alexa 如何接受仅限插槽的话语?

Gre*_*gle 5 alexa-skills-kit

我正在尝试编写我的第一个 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 技能构建器,并且不确定它到底是如何映射的——无论如何,还不够好,无法阅读解决方案。

A.K*_*aus 2

有两种不同的方法可以处理这个问题。

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)