Alexa 智能家居 "Failed to Retrieve State"

Alexa Smart Home "Failed to Retrieve State"

我正在玩 Alexa Smart Home 技能示例 - 我不是在与任何真实的硬件或后端对话,只是想让消息流正常工作。我已经设置了一个简单的 switch/plug/light,它可以只支持转动 On/Off - 我有帐户链接工作和启用的技能。当我尝试通过 phone 上的 Alexa 应用程序或网络(启用调试)查看它时,它总是说设备没有响应,或者它是“无法检索状态”。我绝对可以看到云观察中的消息如下

知道为什么我会长期收到这样的回复吗??

要求:

    "directive": {
        "endpoint": {
            "cookie": {},
            "endpointId": "endpoint-003",
            "scope": {
                "token": "<<<SUPRESSING>>",
                "type": "BearerToken"
            }
        },
        "header": {
            "correlationToken": "<<SHORTENED>>",
            "messageId": "50397414-bb9d-412f-8a2c-15669978ab64",
            "name": "ReportState",
            "namespace": "Alexa",
            "payloadVersion": "3"
        },
        "payload": {}
    }
}

回复:

{
    "context": {
        "properties": [
            {
                "name": "connectivity",
                "namespace": "Alexa.EndpointHealth",
                "timeOfSample": "2020-06-29T16:49:59.00Z",
                "uncertaintyInMilliseconds": 0,
                "value": "OK"
            },
            {
                "name": "powerState",
                "namespace": "Alexa.PowerController",
                "timeOfSample": "2020-06-29T16:49:59.00Z",
                "uncertaintyInMilliseconds": 0,
                "value": "ON"
            }
        ]
    },
    "event": {
        "endpoint": {
            "endpointId": "endpoint-003",
            "scope": {
                "token": "Alexa-access-token",
                "type": "BearerToken"
            }
        },
        "header": {
            "correlationToken": "<<SHORTENED>>",
            "messageId": "7a8b9a71-adda-41b8-acba-4d3855374845",
            "name": "Response",
            "namespace": "Alexa",
            "payloadVersion": "3"
        },
        "payload": {}
    }
}

问题是:我的 header 响应中的“名称”应该是“ReportState”。 “响应”仅用于 set/change 重视的事物。

我的一般建议是始终验证 三个 事情是好的:

  1. 最初的“发现”
  2. “回复”消息
  3. 常规“ReportState”查询。

我的意思是:

  1. 您宣传的任何内容都应在“发现”中报告,最好在其他(“ReportState”)消息中报告。如果您宣传“PowerController”——如果您的 ReportStates 不包含该状态,您将看不到该状态,或者它将永远重试(继续寻找它)——或者您 可能 会出现某种错误。
  2. 如果您更改了您的发现内容 - 确保您确实删除了 re-discovered,并且新 additions/removals 的状态(以上)没问题
  3. 始终确保报告“EndpointHealth”。