首页 > 解决方案 > 使用 Google Home 的 Google 登录检索电子邮件

问题描述

所以我一直在使用谷歌主页检索与当前用户关联的电子邮件。

关于这个主题的文档很难找到,从我收集到的信息来看,我应该能够使用来自 actions-on-google 的 SignIn 类。所以这是我的设置。

DialogFlow -> 创建了两个意图,一个是启动登录过程,另一个是跟进该过程。(第二个有事件“actions_intent_SIGN_IN”。)

谷歌配置上的操作:帐户链接。

并通过将 clientId 添加到我的对话流配置来将客户端 ID 添加到我的履行层。

dialogflow({clientId})

所以,当我在模拟器中运行它时(我在我的谷歌家庭设备上得到了同样的东西),只要我的登录进入后续意图(actions_intent_SIGN_IN),我就会收到一个错误,即我的 signin.status 是错误. 从那里,我不知道我能做些什么来获取有关此错误是什么以及如何修复它的更多信息。

任何想法 ?谢谢 !

PS:它甚至可能不是可以做的事情?有没有其他方法可以检索用户的电子邮件?我能够使用 Permission 检索它的名称,但据我所知,没有更多的 SignIn 用于电子邮件。

标签: actions-on-googlevoicegoogle-home

解决方案


我可以向您展示我如何通过 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,但它应该可以正常工作。


推荐阅读