Alexa Skill SDK:技能响应错误求助(已按教程配置)
排查Alexa HelloIntent响应错误(Node.js 6.10 Lambda)
我来帮你一步步排查这个问题,毕竟刚搭Alexa技能时踩这类格式或配置坑太正常了😂
1. 先确认Lambda响应格式是否完全合规
Alexa对返回的JSON结构要求特别严格,哪怕少个逗号、字段名拼写错都会直接报错。给你贴个最基础的HelloIntent正确响应模板,你可以对照自己的代码检查:
exports.handler = function(event, context) { if (event.request.type === "LaunchRequest") { handleLaunch(context); } else if (event.request.type === "IntentRequest") { handleIntent(event, context); } else if (event.request.type === "SessionEndedRequest") { context.succeed(); } }; function handleLaunch(context) { const response = { version: "1.0", response: { outputSpeech: { type: "PlainText", text: "欢迎使用我的技能,有什么我能帮你的?" }, shouldEndSession: false } }; context.succeed(response); } function handleIntent(event, context) { const intentName = event.request.intent.name; if (intentName === "HelloIntent") { const helloResponse = { version: "1.0", response: { outputSpeech: { type: "PlainText", text: "你好呀!很高兴和你互动😉" }, shouldEndSession: true // 想保持会话就改成false } }; context.succeed(helloResponse); } else { // 处理未知意图的兜底响应 const fallbackResponse = { version: "1.0", response: { outputSpeech: { type: "PlainText", text: "抱歉,我没听懂你的请求哦" }, shouldEndSession: true } }; context.succeed(fallbackResponse); } }
重点检查这几个必填项:
- 必须有
version: "1.0"字段 outputSpeech的type只能是PlainText或SSML,对应text或ssml字段不能缺- 绝对不能漏
shouldEndSession,这个是Alexa判定会话状态的关键
2. 去CloudWatch看Lambda的执行日志
这是定位问题最快的方法!登录AWS控制台找到你的myLearn函数,点击顶部「监控」标签,选「查看CloudWatch日志」,里面会清晰记录错误:
- 是不是变量未定义导致的
ReferenceError? - 是不是异步逻辑没处理好,导致
context.succeed()根本没执行? - 有没有权限相关的报错?(虽然你绑了ASK,但偶尔也会有配置遗漏)
3. 再核对技能与Lambda的绑定细节
哪怕你说已经配置过,还是再确认这几点:
- Lambda触发器里的Alexa Skills Kit技能ID,和你Alexa开发者控制台里的技能ID完全一致吗?注意大小写和字符,差一个都不行
- 技能端点填的ARN是不是完全正确?
arn:aws:lambda:us-east-1:(你的12位AWS ID):function:myLearn,AWS ID别填错 - 技能的区域要和Lambda匹配!你用的是
us-east-1,Alexa技能端点区域必须选北美,别选错成欧洲或亚太区
4. 测试时的调用逻辑要正确
确保你触发HelloIntent的方式符合配置:
- 先唤醒:「Alexa,打开[你的调用名]」
- 再说你给HelloIntent配置的表述,比如「你好」
或者直接说「Alexa,让[你的调用名]说你好」,看能不能触发
5. 注意Node.js 6.10的兼容性
这个版本已经非常老了,虽然Alexa还支持,但别用ES6之后的新特性(比如某些新的数组方法)。另外如果代码里引用了第三方模块,必须把依赖一起打包上传,不能只传单个JS文件
按上面的步骤排查,应该能快速找到问题。我当初第一次搭时,就是漏了shouldEndSession字段,折腾了好半天😅
内容的提问来源于stack exchange,提问作者pwhitt
相关产品推荐
相关产品推荐

