Alexa如何才能采用仅限插槽的话语?

时间:2017-12-29 15:22:42

标签: alexa alexa-skills-kit

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

1 个答案:

答案 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}