Alexa 完全匹配的样本话语无法传递槽值

Alexa exactly matching sample utterance fails to pass slot value through

我有一个名为 "rollDice" 的 Alexa 技能。意图有两个语句:

roll a {sides} sided dice
roll a {sides} sided die

sides 定义如下,插槽类型为 AMAZON.NUMBER.

技能构建成功,我打开它 运行 "roll a 20 sided dice",它 运行 是正确的意图请求处理程序,但是当我尝试使用sides槽,是undefined。我检查了 JSON 输入面板,我发现它没有被传递:

"intent": {
    "name": "rollDice",
    "confirmationStatus": "NONE",
    "slots": {
        "sides": {
            "name": "sides",
            "confirmationStatus": "NONE"
        }
    }
}

这是我处理 rollDice 意图的代码:

module.exports = ({ store, slot }) => {
  const sideCount = +slot('sides', 6);
  const roll = 1 + Math.floor(Math.random() * sideCount);
  store.state.rolls.push({sideCount, roll});
  return `Rolled a ${sideCount} sided dice and got ${roll}. ${slot('sides')}`;
};

我从 Alexa 得到的回复:

Rolled a 6 sided dice and got 4. undefined

我在其他几个意图处理程序中使用 slot 函数没有问题,所以我不认为这是问题所在,但这里以防万一:

slot(name, defaultValue) {
  const { intent } = this;
  const slot = intent && intent.slots && intent.slots[name];
  return slot && slot.value || defaultValue;
}

编辑:

这是 event.request.intent 在我的 Lambda 函数中 运行 和 roll a 20 sided dice:

之后的值
{
  "name": "rollDice",
  "confirmationStatus": "NONE",
  "slots": {
    "sides": {
      "name": "sides",
      "confirmationStatus": "NONE"
    }
  }
}

当您使用 alexa 进行测试时,您必须考虑到您正在测试语音服务并且您正在模拟语音而不是文本。你不能在身体上说 "roll a 20 sided dice"。所以如果你想掷一个 20 面的骰子,你必须说 "roll a twenty sided dice" 因为这就是你说数字 20 的方式。