actions-on-google - 使用 Google Home 的 Google 登录检索电子邮件
问题描述
所以我一直在使用谷歌主页检索与当前用户关联的电子邮件。
关于这个主题的文档很难找到,从我收集到的信息来看,我应该能够使用来自 actions-on-google 的 SignIn 类。所以这是我的设置。
DialogFlow -> 创建了两个意图,一个是启动登录过程,另一个是跟进该过程。(第二个有事件“actions_intent_SIGN_IN”。)
谷歌配置上的操作:帐户链接。
- 已选择 - 是,允许用户通过语音注册新帐户
- 已选择 - 链接类型:Google 登录
并通过将 clientId 添加到我的对话流配置来将客户端 ID 添加到我的履行层。
dialogflow({clientId})
所以,当我在模拟器中运行它时(我在我的谷歌家庭设备上得到了同样的东西),只要我的登录进入后续意图(actions_intent_SIGN_IN),我就会收到一个错误,即我的 signin.status 是错误. 从那里,我不知道我能做些什么来获取有关此错误是什么以及如何修复它的更多信息。
任何想法 ?谢谢 !
PS:它甚至可能不是可以做的事情?有没有其他方法可以检索用户的电子邮件?我能够使用 Permission 检索它的名称,但据我所知,没有更多的 SignIn 用于电子邮件。
解决方案
我可以向您展示我如何通过 Google 帐户链接获取我的电子邮件地址:您需要有可用的 accessToken 然后您可以使用此答案中显示的内容。登录完成后,accessToken 就在里面conv.user.access.token
。
在节点中,它看起来像这样:
let link = "https://www.googleapis.com/oauth2/v1/userinfo?access_token="+accessToken;
return new Promise(resolve => {
request(link,(error, response, body) => {
if (!error && response.statusCode === 200) {
let data = JSON.parse(body);
let name = data.given_name ? data.given_name : '';
conv.ask(new SimpleResponse({
speech: "Hello "+ name + "!",
text: "Hello "+ name + "!"
}));
resolve();
} else {
console.log("Error in request promise: "+error);
resolve();
}
})
})
您需要的一切都应该在数据对象中。
希望能帮助到你。关于您的错误,我不确定,但请尝试执行上面链接中的所有步骤。我在 Dialogflow 中使用 Sign-In required 框,而不是新的 SignIn,但它应该可以正常工作。
推荐阅读
- android - 为什么来自 Kotlin May 的新 LiveData 构建器更新在我的项目中不起作用
- c# - TCP 套接字实现在 Xamarin.Android 中的工作方式是否不同?
- c# - DNN(8.5)如何为页面缓存文件创建文件名?
- vba - 如何从日期对象转换为范围以在 Word VBA 中的书签处显示?
- powershell - 有没有办法用 powershell 抓取特定的表格行或表格单元格?
- android - 为什么 Android Worker 成功完成并调用 onStopped()
- sql - 使用 Group By 汇总表中的 Null 值
- jquery - 插入更多 document.querySelector
- apache-spark - Parquet 文件在哪些级别存储最小/最大/不同(等)统计信息?
- python - 安装的 Python 和 Idle 不可用