首次开发Alexa技能遇远程端点调用失败或响应无效问题求助
排查Alexa技能LaunchRequest端点调用/响应无效问题
Hey there! 作为刚上手Alexa技能开发的新手,碰到这个问题真的很闹心——我当初第一次踩这个坑的时候也折腾了小半天。结合你提到的教程可能过时的情况,咱们一步步来排查:
1. 先确认端点配置是否匹配当前规范
旧教程可能还在使用老的Lambda配置逻辑,现在要注意两点:
- 区域对应:Alexa技能的区域要和Lambda所在区域一致,比如北美地区的技能必须对应
us-east-1的Lambda,不然跨区域调用会失败。去技能控制台的「端点」页面看看,Lambda ARN的区域后缀是不是和技能区域匹配。 - Lambda执行角色权限:确保给Lambda的执行角色添加了
AlexaSkillsKitExecutionRole权限,不然Alexa调用Lambda时会被拒绝访问。
2. 检查响应格式是否符合ASK v2标准
旧教程可能用的是ASK v1的响应格式,而现在Alexa强制要求v2格式,格式不对直接会被判定为无效响应。正确的v2响应结构应该是这样的:
{ "version": "1.0", "response": { "outputSpeech": { "type": "PlainText", "text": "欢迎使用我的Alexa技能!" }, "shouldEndSession": false } }
重点检查:
- 有没有拼写错误(比如
outputSpeech大小写写错) - 是否包含
version字段 response对象里必须有outputSpeech,shouldEndSession字段不能少
3. 脱离Alexa控制台,直接测试Lambda
先排除Alexa端的问题,去Lambda控制台创建一个LaunchRequest测试事件,内容如下:
{ "version": "1.0", "session": { "new": true, "sessionId": "amzn1.echo-api.session.xxxxxx", "application": { "applicationId": "amzn1.ask.skill.xxxxxx" }, "user": { "userId": "amzn1.ask.account.xxxxxx" } }, "request": { "type": "LaunchRequest", "requestId": "amzn1.echo-api.request.xxxxxx", "timestamp": "2024-05-20T12:00:00Z", "locale": "zh-CN" }, "context": { "System": { "application": { "applicationId": "amzn1.ask.skill.xxxxxx" }, "user": { "userId": "amzn1.ask.account.xxxxxx" }, "device": { "deviceId": "amzn1.ask.device.xxxxxx", "supportedInterfaces": {} } } } }
替换掉里面的xxxxxx为你自己的技能/用户/设备ID,然后执行测试:
- 如果Lambda报错,那问题肯定在代码里,比如逻辑错误导致没有返回正确响应
- 如果Lambda能返回符合v2格式的响应,那再回到Alexa技能端检查配置
4. 确认交互模型已正确发布
旧教程可能省略了「发布交互模型」的步骤——就算你在控制台编辑了交互模型,如果没有点击「构建模型」并等待构建完成,Alexa是无法正确识别和触发LaunchRequest的。去技能控制台的「交互模型」页面,确认最近一次构建是成功的。
按照这个顺序排查,大概率能找到问题所在,毕竟过时教程最容易在配置格式和权限这两块出问题。
内容的提问来源于stack exchange,提问作者Saffe
相关产品推荐
相关产品推荐

