Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actions on google 使用谷歌主页的谷歌登录检索电子邮件_Actions On Google_Voice_Google Home - Fatal编程技术网

Actions on google 使用谷歌主页的谷歌登录检索电子邮件

Actions on google 使用谷歌主页的谷歌登录检索电子邮件,actions-on-google,voice,google-home,Actions On Google,Voice,Google Home,因此,我一直在尝试检索与当前用户使用google home关联的电子邮件 关于这个主题的文档很难找到,从我收集的资料来看,我应该能够使用谷歌actions上的SignIn类。这是我的设置 DialogFlow->创建了两个意图,一个用于启动登录过程,另一个用于跟进该过程。(第二个包含事件“actions\u intent\u SIGN\u IN”。) 谷歌配置上的操作:帐户链接 选中-是,允许用户通过语音注册新帐户 已选择-链接类型:谷歌登录 并通过将clientId添加到我的dialogf

因此,我一直在尝试检索与当前用户使用google home关联的电子邮件

关于这个主题的文档很难找到,从我收集的资料来看,我应该能够使用谷歌actions上的SignIn类。这是我的设置

DialogFlow->创建了两个意图,一个用于启动登录过程,另一个用于跟进该过程。(第二个包含事件“actions\u intent\u SIGN\u IN”。)

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

  • 选中-是,允许用户通过语音注册新帐户
  • 已选择-链接类型:谷歌登录
并通过将clientId添加到我的dialogflow配置中,将客户端id添加到我的实现层

dialogflow({clientId})
因此,当我在emulator中运行这个程序时(我在我的google home设备上得到了完全相同的结果),我的登录一进入后续意图(actions\u intent\u sign\u in),就会出现一个错误,即我的登录状态为error。从那以后,我不知道我能做些什么来获得关于这个错误是什么以及如何修复它的更多信息

有什么想法吗?谢谢


附言:这甚至可能不是可以做到的事情?是否有其他方法检索用户的电子邮件?我可以使用权限检索它的名称,但据我所知,没有什么比登录电子邮件更重要的了。

我可以向您展示如何通过谷歌帐户链接获取我的电子邮件地址: 您需要有可用的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的“登录要求”框,而不是新的登录,但它的工作原理应该是一样的。

您为什么要查看他们的详细信息?我之所以这么问是因为我开始尝试使用SignIn,但后来我意识到,对于通知,有一种不同的方式可以请求发送推送通知的权限,这种方式似乎也会返回用户的电子邮件地址,而不包含所有clientid内容。然而,我当时犯的错误是,它说我不能要求PII数据(我已经为孩子注册了),所以我的代码不起作用。您在日志中找到错误消息的确切措辞了吗?这可能有助于跟踪问题。我不希望将其用于通知。我正在努力快速填写表单,访问用户的电子邮件将大有帮助。我被引导相信,当使用“链接类型:谷歌标志”时,没有任何OAuth服务就可以工作。。。也许这就是我错的地方?这是真的,正如最近介绍的那样。你说得对。顺便说一句,它的工作原理是一样的。不幸的是,当我这样做的时候,我没有收到任何代币。。。。没有名字,什么也没有。(错误与否)此代码仅在您的帐户链接成功时有效。您有任何错误吗?{@type':'type.googleapis.com/google.actions.v2.SignInValue',状态:'error'}和这个“sharedDebugInfoList”:[{“name”:“帐户链接Url”,“debugInfo”:“Url”,“subDebugEntryList”:[]}最后一个引用oauth。。。这对我来说没有意义,因为我没有选择oauth。。。这感觉像一个bug:/