无法从AWS Lambda中的Google智能家居操作同步意图获得oauth令牌

问题描述 投票:0回答:1

我正在将aws lambda函数用于Google智能家居操作。我使用aws api网关来实现URL以到达lambda。我可以使用以下代码成功处理Google助手的意图:-

const {smarthome} = require('actions-on-google');
const app = smarthome();

app.onExecute((body, headers) => {
  return {
    requestId: 'ff36...',
    payload: {
      // ...
    },
  };
});

app.onQuery((body, headers) => {
  return {
    requestId: 'ff36...',
    payload: {
      // ...
    },
  };
});

app.onSync((body, headers) => {
  console.log("body: "+JSON.stringify(body));
  console.log("headers: "+JSON.stringify(headers));
  return {
    requestId: 'ff36...',
    payload: {
      // ...
    },
  };
});

exports.handler = app;

关于此功能的硬编码设备详细信息,它可以成功反映在google home应用中。但是要获得用户的实际设备,我需要从“ SYNC”意图中获取oauth令牌。但是我从这段代码中得到的只是这个输出:-

正文:{“ inputs”:[{“ intent”:“ action.devices.SYNC”}],“ requestId”:“ 5604033533610827657”}] >>

标题:{}

[与Alexa的技能的“发现指令”不同,后者在request.directive.endpoint.scope.token中包含令牌,而Google的意图似乎没有实现。对于O Auth,我正在使用AWS Cognito,它可以与Alexa帐户链接很好地工作,对于Google Home,它也可以成功地链接该帐户并显示我在lambda函数中进行硬编码的设备。

根据this答案,令牌在]中>

headers.authorization.substr(7)

我已经尝试过,但一无所获。它显示

“无法读取未定义的属性'substr'。”

我正在将aws lambda函数用于Google智能家居操作。我使用aws api网关来实现URL以到达lambda。我可以使用以下代码成功处理Google助手的意图:-const {...

aws-lambda actions-on-google google-home google-smart-home
1个回答
0
投票

Google客户端操作中的lambda handler假定请求标头位于Lambda代理集成的输入event.headers参数内的event处。如果您具有自定义Lambda集成或以其他方式修改了输入映射,则可能需要编辑mapping template以确保将标头放置在客户端库期望的位置。

© www.soinside.com 2019 - 2024. All rights reserved.