0

我有一个意图,其中列出了太阳系中的行星列表。

 {
      "intent": "PlanetIntent",
      "slots": [
        {
          "name": "Planet",
          "type": "LIST_OF_PLANETS"
        }
      ]
    },

我正在尝试对其进行设置,以便当用户命名行星时,我的代码只需将该行星的名称返回给他们。如果他们说一个不在列表中的行星,那么它将返回一个错误(或者进入未处理状态,这是我最初假设会发生的)。

但无论我尝试什么,从最基本的代码到最复杂的代码,我的代码总是会返回所说的任何单词,而不仅仅是相关的槽值。

所以也没有

'PlanetIntent': function () {
	var selection = this.event.request.intent.slots.Planet.value;

        this.response.speak(selection);
        this.emit(':responseReady');
}

也不是这个

'PlanetIntent': function () {
	var selection = '';

        if ( !this.event.request.intent.slots.Planet || 
        this.event.request.intent.slots.Planet.value == '') {
            this.emitWithState('AMAZON.HelpIntent'); 

        } else {
            selection = this.event.request.intent.slots.Planet.value;

        this.response.speak(selection);
        this.emit(':responseReady');
		}
},

似乎阻止随机值通过。如果你说火星,它会返回火星,如果你说萝卜,它会返回萝卜。有任何想法吗。我只是想限制它只返回我的行星列表中的响应!

4

1 回答 1

1

您为插槽提供的列表只是提示,而不是过滤器或限制。您肯定需要过滤代码中的列表。

由于您只是在寻找我们太阳系中行星的名称,这应该不会太难:7-9 个值取决于您是否要计算冥王星和/或还包括地球,如果您开始包括它们,那就更难了卫星,如果您包括其他恒星的已知行星,则非常具有挑战性:-)

于 2017-12-06T12:59:24.023 回答