首页 > 解决方案 > Google 智能家居操作:帐户关联成功,通过履行发送的 SYNC 响应,状态码为 200,但 Google Home 应用报告错误

问题描述

我正在构建一个 Google Smart Home 操作,它作为 node.js 中的 lambda 函数托管在 AWS 上,通过 AWS API 网关和作为 API 网关授权者的外部 OAuth 2 提供程序公开 Google Smart Home 操作的节点实现。我的实现包括 SYNC、QUERY 和 EXECUTE 方法,并返回有效的 JSON 响应,包括我在文档中看到的所有必需属性。我在 Google 控制台上的操作中设置了所有内容,包括指向我在 AWS API 网关上的方法的实现 URL 和帐户链接详细信息。之后,我单击“测试”以使智能家居操作在 Google Home 配套应用程序中可测试。

尝试添加新设备时,我可以在 Google Home 配套应用中看到我的智能家居操作“[test] ACTIONNAME”。当我单击该操作时,我会正确重定向到我的 OAuth 2 提供程序,登录并重定向到 Google Home 应用程序。然后它会在底部显示一条通知“[test] ist verknüpft”(德语说“[test] ACTIONNAME got linked”)。不久之后,它显示第二个通知“Ein Fehler ist aufgetreten.Bitte versuche es noch einmal”(德语说“发生错误。请重试”。当我再次单击该操作时,它再次显示“[test] ACTIONNAME got已链接”,然后是第二个通知“发生错误。请重试”,因此无需再次登录,因为 Google Home 显然已经成功获得了令牌。

我已经检查了我的 AWS Cloud Watch 日志,我可以看到,每当我点击 Google Home 配套应用程序的“添加新设备”对话框中的操作时,Google 都会成功调用我的履行,收到一个带有 200 状态代码的 SYNC 响应,看起来如下(匿名):

{
    "statusCode": 200,
    "body": "{\"requestId\":\"6541496806317265099\",\"payload\":{\"agentUserId\":\"1234\",\"devices\":[{\"id\":\device_id",\"type\":\"action.devices.types.SHUTTER\",\"traits\":[\"action.devices.traits.OpenClose\"],\"name\":{\"name\":\"Device Name\"},\"willReportState\":false,\"attributes\":{\"openDirection\":[\"UP\",\"DOWN\"]}}]}}",
    "headers": {
        "content-type": "application/json;charset=utf-8"
    }
}

所以在我看来,Google Home 已成功授权并收到 SYNC 响应,但不知何故无法处理它。但它应该是正确的,不是吗?

我还尝试使用 Google Smart Home 测试套件,但是这样做时,在输入我的 AgentUserId 并附加我的令牌接收器服务帐户证书后,它会显示 requestSync 方法收到 404 状态代码和消息“请求的实体”的通知没找到。”。当我尝试通过 POST 请求自己调用 Homegraph API 时,也会发生这种情况,如下所示:

curl -i -s -X POST -H "Content-Type: application/json" -d "{agentUserId: \"1234\", async: true}" "https://homegraph.googleapis.com/v1/devices:requestSync?key=MYAPIKEY"

我猜那是因为 Homegraph 还不知道 AgentUserId 为 1234 的用户拥有哪些设备,因为 Google Home 从未正确处理过 SYNC 消息。

我很迷茫,不知道如何收集有关问题所在的更多信息。有谁知道如何解决这个问题?

编辑:更多信息 - 我尝试了以下额外的事情: 1. 我创建了一个具有相同配置的新 Actions on Google 项目 - 这里有同样的问题,没有帮助。2. 我在 GCP 上查看了智能家居项目的 Stackdriver 日志,真正奇怪的是,当我尝试链接智能时,根本没有资源 Google 助理的日志,而且时间段也没有日志Google Home 应用中的 home 操作。它不应该至少记录 oauth 流程(似乎按预期工作)以及发送给我的履行的 SYNC 请求吗?

标签: actions-on-googlegoogle-home

解决方案


我明白了 - 简单的解决方案是 Google 操作的 node.js 实现期望 AWS API 集成是一个 lambda代理集成,我没有像这样配置它,正如问题中所述的 SYNC 响应中也可以看到的那样。因此,只需切换到 AWS lambda代理集成即可解决问题。


推荐阅读