繁体   English   中英

无法从 aws lambda 中的谷歌智能家居操作同步意图获取 oauth 令牌

[英]Can't get oauth token from google smart home action sync intent in aws lambda

我正在使用 aws lambda 函数进行谷歌智能家居操作。 我使用 aws api 网关作为实现 url 来访问 lambda。 我可以使用以下代码成功处理谷歌助手的意图:-

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;

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

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

标头:{}

与 Alexa 技能的“发现指令”不同,它在 request.directive.endpoint.scope.token 中包含令牌,谷歌的意图似乎没有携带它。 对于 O 身份验证,我使用 AWS Cognito,它与 Alexa 帐户链接配合良好,对于 google home 也可以成功链接帐户并显示我在 lambda 函数中硬编码的设备。

根据这个答案,令牌在

headers.authorization.substr(7)

我试过了,一无所获。 表明

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM