Alexa意图架构问题

时间:2016-07-18 16:06:00

标签: amazon alexa

我一直在玩Alexa技能,并希望做一些基本的家庭自动化。我已经定义了以下基本意图模式:

{
  "intents": [
    {
      "intent": "Lock",
      "slots": [
        {
          "name" : "Door",
          "type" : "AMAZON.LITERAL"
        }
      ]
    },
    {
      "intent": "Unlock",
      "slots": [
        {
          "name" : "Door",
          "type" : "AMAZON.LITERAL"
        }
      ]
    }
  ]
}

然后是样本话语:

Lock lock {slot value|Door}
Lock lock door {slot value|Door}
Lock lock the door {slot value|Door}
Unlock unlock {slot value|Door}
Unlock unlock door {slot value|Door}
Unlock unlock the door {slot value|Door}

这个想法是门名必须是自由形式的,因为它们不会提前知道。但是,当我尝试一个短语,如:

lock door front

它找到了正确的意图,但“Door”插槽值包含额外的单词:

"intent": {
  "name": "Lock",
  "slots": {
    "Door": {
      "name": "Door",
      "value": "door front"
    }
  }
}

这是正常的,还是使用AMAZON.LITERAL的副产品?我也尝试过自定义插槽类型,但是多个字设备名称似乎不能很好地使用它,并且在这种情况下它总是使用最后一个字。

3 个答案:

答案 0 :(得分:2)

我会将话语定义为以“门”字结尾:

Lock lock {slot value|Door} door

因此,用户必须说:

Alexa, ask Lock lock kitchen door

所以你最希望只收到一个单词作为门类型。然后你解析字符串。您可能希望测试不是为了完全相等,而是为了包含。 我必须承认我从不使用LITERAL类型,因为亚马逊教程没有建议,所以我会定义一个自定义类型并列出门类型的可能值。

打开/关闭灯/恒温器是另一回事。您必须使用Alexa SmartHome API。然后'打开/关闭','设置值'等成为Alexa的保留关键词。 SmartHome API中没有这样的意图(在您的问题中),没有话语,也没有自定义插槽类型。您所需要的只是实现处理Discovery请求和Control请求。我认为用户在设备供应商的官方应用/帐户中设置设备名称,当Alexa发现设备时(由于Discovery请求),该技能只是从供应商服务器获取设备描述并为Alexa提供。这就是Alexa将如何知道可用设备的名称。

答案 1 :(得分:1)

更新:我对LITERAL的评论已经过时了。谢谢你指出来。 LITERAL将继续存在。但Alexa(和Lex)确实返回的插槽值不在插槽列表中。我经常看到这个。这很好。

对于那些可能会遇到此问题的人,请知道使用AMAZON.LITERAL的技能将从2016年12月开始不再获得批准。您应该使用custom slots代替。有趣的是,文档说即使使用自定义插槽,您也可以接收自定义列表中未定义的单词,例如文字。我没有对此进行测试,但它可以派上用场。

答案 2 :(得分:1)

Alexa在找到的第一场比赛时停止。所以你需要在更具体的话语之后移动更一般的话语。

锁锁门{槽值|门} 锁定锁定{插槽值|门}

这样“锁门前”与slot =“front”相匹配。

如果您有任何没有插槽的话语,请务必将其放置。