Google 智能家居操作:帐户链接成功,fulfillment 发送 SYNC 响应,状态代码为 200,但 Google 家庭应用报告错误

Google Smart Home Action: Account linking successful, SYNC response sent by fulfillment with status code 200 but Google Home app reporting error

我正在构建一个 Google 智能家居操作,将实现作为 node.js 中的 lambda 函数托管在 AWS 上,节点实现用于 Google 智能家居操作,通过 AWS API 网关和一个外部 OAuth 2 提供商作为 API 网关的授权方。我的实现包括 SYNC、QUERY 和 EXECUTE 方法以及 returns 有效 JSON 响应,包括我在文档中看到的所有必需属性。我在 Actions on Google 控制台中设置了所有内容,包括 fulfillment URL 指向我在 AWS API 网关上的方法和帐户 linking 详细信息。之后,我点击了 "Test",以便在 Google 家庭伴侣应用程序中测试智能家居操作。

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

我已经检查了我的 AWS Cloud Watch 日志,我可以看到每当我单击 Google 家庭配套应用的 "Add new device" 对话框中的操作时,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 智能家居测试套件,但在这样做时,在输入我的 AgentUserId 并附加我的令牌接收方服务帐户证书后,它会显示一条通知,指出 requestSync 方法收到一个404 状态代码和消息 "Requested entity was not found."。当我尝试通过 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. 我在 Google 项目上创建了一个新的 Actions,配置相同 - 同样的问题,没有帮助。 2. 我查看了 GCP 上智能家居项目的 Stackdriver 日志,真正奇怪的是资源 Google Assistant 根本没有日志,但在我尝试时也没有时间段的一般日志link Google 家庭应用中的智能家居操作。它不应该至少记录 oauth 流程(这似乎按预期工作)以及发送到我的 fulfillment 的 SYNC 请求吗?

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