[英]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.