尝试将插槽编码到我的 Alexa Skill 中时,我做错了什么?

What am I doing wrong when trying to code slots into my Alexa Skill?

我正在使用 Node.js 构建自定义 Alexa Skill(我是新手)。我设置了技能,创建了一个自定义意图,以及一个带有一些测试值的自定义插槽。我的目标是让我的用户打开技能,并提出一个问题,例如 "how far away is the {slotname}",其中 slotname 包含两个值 "Sun" 和 "Moon",并根据用户询问我的技能会 return 一些适当的答案。示例:

用户:"How far away is the Sun" 亚历克莎:"The sun is almost ninety three million miles from Earth" 用户:"How far away is the Moon" 亚历克莎:"The moon is just down the street"

我的问题:虽然这个概念很有意义,但我不知道如何将它实际应用到我的代码中。抱歉,我是新来的。

过去几个晚上,我一直在努力寻找与 Node.js 有类似问题的人的类似 post。我尝试搜索可以帮助指导我的编码示例,观看视频等。到目前为止没有任何效果,这导致了这个——我在 Stack Overflow 上的第一个 post。所以我希望你们这些可爱的人能提供帮助,我在下面列出了我温顺尝试的当前状态。

P.S。我对 post 在 S.O 上完全陌生。如果我做错了什么,请告诉我!此时我只是不知道还能去哪里寻求帮助。

const MyIntentHandler = {
    canHandle(handlerInput) {
        return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
            && Alexa.getIntentName(handlerInput.requestEnvelope) === 'MyIntent';
    },
    handle(handlerInput) {
        //var bigObect = this.event.request.intent.slots.slotName.value;
        var bigObject = handlerInput.requestEnvelope.request.intent.slots.slotName.value;
        var speakOutput;
        if(bigObect === 'Sun') {
            speakOutput = 'The sun is almost ninety three million miles away from Earth.';
        } else if(bigObject === 'Moon') {
            speakOutput = 'The moon is across the street.';
        }
        return handlerInput.responseBuilder
            .speak(speakOutput)
            //.reprompt('add a reprompt if you want to keep the session open for the user to respond')
            .getResponse();
    }
};

1.Replace slotName 与您的插槽的实际名称(您可以在请求正文中检查)。

var bigObject = handlerInput.requestEnvelope.request.intent.slots.slotName.value;

2.There 是 if 条件下的错字,应该是 bigObject === 'Sun'.

3.If这是你技能中唯一的intentHandler,那么你还需要添加处理request.type === 'LaunchRequest'条件。

4.Make 确保您正在导出 IntenthandlerintentHandler 不仅在文件中定义,而且可以在发出请求时使用。

5.Make 100% 确定请求来自您打算的 skill 即您的 lambda 函数(后端)Alexa skill(frontend) 完全连接(与 ARNSkill-ID )。这是最常见的错误:)