Alexa智能家居技能Discovery指令失效,请求排查建议
修正返回的JSON结构
这是最常见的踩坑点:Alexa要求Discover.Response的返回是直接的header+payload结构,不需要外层的event包裹。你当前返回的是{"event": {...}},正确的返回应该去掉外层的event键,直接返回:{ "header": { "namespace": "Alexa.Discovery", "name": "Discover.Response", "messageId": "0559819e-49a3-4a8f-b614-6e8b3c186b71", "payloadVersion": "3" }, "payload": { "endpoints": [ // ... 你的设备信息 ... ] } }外层多包的
event会导致Alexa无法识别响应内容,直接忽略设备。用Alexa开发者控制台测试工具验证
进入Alexa开发者控制台,打开你的技能,切换到"测试"标签页,选择"智能家居"测试类型,手动发送一个Discover.Request请求,查看Lambda的返回和Alexa的处理结果。这里能直接看到Alexa是否解析到设备,以及是否有明确的错误提示。检查用户身份关联逻辑
确认Lambda在处理发现请求时,能通过请求中的accessToken或userId正确关联到用户的设备。如果你的设备列表是硬编码的,也要确保没有针对用户身份做错误过滤,导致返回空列表(虽然你日志里有设备,但仍需确认这一点)。查看Alexa技能日志
在开发者控制台的"日志"标签页,筛选设备发现相关的日志,查找是否有INVALID_RESPONSE或者其他错误提示。有些语义错误(比如friendlyName包含Alexa不支持的字符、endpointId重复)不会被Schema检测到,但会导致Alexa丢弃设备。验证设备属性的合法性
- 确认
displayCategories使用的是Alexa官方支持的类型(LIGHT是合法的,注意大小写必须完全匹配)。 - 检查
capabilities中的接口版本是否正确(比如Alexa.PowerController的版本是3,符合要求),proactivelyReported和retrievable的设置是否符合你的设备实际情况。 - 确保
endpointId在你的技能范围内是唯一的,不能重复。
- 确认
手动触发设备发现
在Alexa App中,进入"设备"页面,点击右上角"+"选择"添加设备",找到你的技能后手动触发发现。自动发现可能存在延迟,手动触发能更快验证结果。
内容的提问来源于stack exchange,提问作者iking1211

