尝试将插槽编码到我的 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 确保您正在导出 Intenthandler
即 intentHandler
不仅在文件中定义,而且可以在发出请求时使用。
5.Make 100% 确定请求来自您打算的 skill 即您的 lambda 函数(后端) 和 Alexa skill(frontend) 完全连接(与 ARN 和 Skill-ID )。这是最常见的错误:)
我正在使用 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 确保您正在导出 Intenthandler
即 intentHandler
不仅在文件中定义,而且可以在发出请求时使用。
5.Make 100% 确定请求来自您打算的 skill 即您的 lambda 函数(后端) 和 Alexa skill(frontend) 完全连接(与 ARN 和 Skill-ID )。这是最常见的错误:)