0

我有一个名为“rollDice”的意图的 Alexa 技能。意图有两种表达方式:

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

sides下面用 slot type 定义AMAZON.NUMBER

技能构建成功,我打开它并运行“掷 20 面骰子”,它运行正确的意图请求处理程序,但是当我尝试使用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"
    }
  }
}
4

1 回答 1

1

当您使用 alexa 进行测试时,您必须考虑到您正在测试 VOICE 服务,并且您正在模拟 SPEECH 而不是文本。你不能说“掷 20 面骰子”。因此,如果您的意思是掷 20 面骰子,则必须说“掷 20 面骰子”,因为这就是您所说的数字 20。

于 2018-04-19T16:43:44.280 回答