Amazon alexa技能游戏,管理程序流程

Amazon alexa skill game, managing program flow

我正在创建一个简单的亚马逊 alexa 游戏。 我拥有游戏所需的所有意图,但我的问题是如何确保您只能选择有效的选项? 示例:如果 alexa 问我是或否的答案,如何提示? 目前:如果你用 10 个例子回答,它会说“你刚刚触发了 NumberIntent”,我希望它说“请选择一个有效的选项”然后重新提示直到它得到是或否。 我目前在 intents 上使用 canhandle 但它对程序崩溃没有帮助。

如果有人能帮助我,那就太好了!

您不应试图强迫用户回答特定问题。

声音设计不同于视觉设计。在网站上,我可以点击任意位置。

Alexa 的交互和声音设计总体上就像一副纸牌。每张卡片都是一个意图。
作为用户,我可以选择任何我想要的卡片

作为用户,我可以说:

  • 重复问题
  • 寻求帮助
  • 启动另一个特定意图
  • 或者我只是想退出这个技能

选择的卡片不是您期望的卡片。它将转到您定义的意图或 AMAZON.FallbackIntent

所以要小心。
也许如果我说一些不同的东西,那是因为我想做一些不同的东西。


如果您仍想根据特定意图实施它,则需要根据用户的进度调整逻辑。

  • 问用户问题后,将进程保存在 sessionAttribute

const sessionAttributes = handlerInput.attributesManager.getSessionAttributes();
sessionAttributes.progression = "EXPECT_YES_OR_NO";
  • 在您的意图中,您添加了一个逻辑来检测用户是否应该首先响应是或否
canHandle(handlerInput) {
    return (
      Alexa.getRequestType(handlerInput.requestEnvelope) === "IntentRequest" &&
      Alexa.getIntentName(handlerInput.requestEnvelope) ===
        "MySpecificIntent"
    );
},
handle(handlerInput) {
    const { responseBuilder } = handlerInput;
    const sessionAttributes = handlerInput.attributesManager.getSessionAttributes();

    if(sessionAttributes.progression === "EXPECT_YES_OR_NO") {
        const utt = "I didn't catch that, do you like Whosebug? You can say yes or no."
        return responseBuilder.speak(utt).reprompt(utt).getResponse();
    }
},

我建议您遵循 alexa 技能示例教程 zero to hero 它通过示例和视频总结了您需要了解的有关在 Alexa 上开发技能的所有信息。