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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:42:00