You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda JS中intent.slots.mySlot.value类型判定及Alexa技能异常排查

问题解答

变量类型说明

intent.slots.mySlot.value 是字符串类型,即使你在Alexa控制台将Slot类型配置为AMAZON.NUMBER,Alexa返回给Lambda的数值也会以字符串形式封装,比如你说"one"会返回"1",说"three"会返回"3",不会直接返回数字类型的值。

异常原因说明

你遇到的问题完全是类型不匹配导致的:

  • 代码中使用了严格相等运算符===,该运算符会同时校验值和变量类型,"1" === 1的判断结果为false,所以哪怕Slot识别到正确的数值,也会因为类型不匹配无法命中前三个分支,直接进入else分支。
  • 你说"seven"时反而返回激活成功,是因为你的代码其他分支存在默认返回成功的逻辑,输入超出范围的数值时没有走到当前的判断分支就提前返回了。

修复建议

  • 先对Slot取值做类型转换,添加空值和类型容错:
// 优先用可选链避免slot不存在时报错,转换为数字类型
const desiredState = Number(intent.slots?.mySlot?.value);
  • 先做有效性校验再赋值,简化判断逻辑:
// 非有效数字、不在1-3范围内都走报错逻辑
if (isNaN(desiredState) || desiredState < 1 || desiredState > 3) {
  speechOutput = "There are only three outputs to activate";
  repromptText = "I did not understand the exit number, please try again";
  callback(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession));
  return;
}
// 有效数值直接赋值即可,无需重复判断
powerOn = desiredState;
// 后续添加你的激活成功返回逻辑
  • 可以在Alexa开发者控制台的意图配置页,为mySlot添加输入值域限制,仅允许1、2、3三个值,减少无效识别。

内容的提问来源于stack exchange,提问作者Plc Worker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:18:02