我想使用此处记录的 Google Actions 接收用户电子邮件,但文档谈论 EMAIL 权限,但是当我在这里阅读权限文档时,我找不到任何 EMAIL 权限。有什么帮助吗?如何接收用户电子邮件?
3 回答
这是有效的,您可以通过帐户链接来做到这一点。
我们必须首先启用 webhook,我们可以在对话流实现文档中查看如何启用 webhook 如果我们要使用 Google Assistant,那么我们必须首先在集成中启用 Google Assistant Integration。然后按照下面提到的步骤在 google 上的操作中进行帐户链接:-
转到谷歌云控制台
- 转到 API 和服务 -> 凭据 -> OAuth 2.0 客户端 ID -> Web 客户端
- 从那里记下客户端 ID、客户端密码
- 下载 JSON - 从 json 中记下项目 id、auth_uri、token_uri
- goto 授权重定向 URI
- 白名单我们的应用程序的 URL,在这个 URL 的固定部分是https://oauth-redirect.googleusercontent.com/r/[project-Id](将 [project-Id] 替换为您的项目 id)
- 保存更改
转到 Google 上的操作 ( https://console.actions.google.com ) -> 帐户链接设置
- 选择授权类型 =授权码
客户信息
- 填写client id,client secrtet, auth_uri, token_uri
- 输入任意随机 url 作为Authorization URL和token_uri,例如https://example.com/auth和https://example.com/token
- 节省
- 在谷歌助手上运行时会显示错误,但不要担心
回到助手设置中的帐户链接部分,这次输入正确的auth_uri作为https://accounts.google.com/o/oauth2/auth 和token_uri作为https://accounts.google.com/o/oauth2/令牌
请注意,这是他们方面的某种问题,不允许您在第一次点击时使用此网址,并且会一直说“不允许使用通用网址。您必须提供特定于您的助手应用程序的有效令牌网址。” 因此,只需在第一次点击并保存时提供任何随机 url,然后再次返回,它将允许您使用这些 url :-)
将范围设置为https://www.googleapis.com/auth/userinfo.profile和https://www.googleapis.com/auth/userinfo.email ,然后就可以使用了。
- 保存更改。
在托管服务器日志中,我们可以看到访问令牌的值,通过访问令牌,我们可以获得有关电子邮件地址的详细信息。
- 将访问令牌附加到此链接“ https://www.googleapis.com/oauth2/v1/userinfo?access_token= ”,我们可以在生成的 json 页面中获取所需的详细信息。
写这段代码
accessToken = req.get("originalRequest") .get("data") .get("user") .get("accessToken") r = requests.get(link) // make get request to link print("Email Id: " + r.json()["email"]) print("Name: " + r.json()["name"])
是的,不幸的是,助手的 SDK 没有给你电子邮件地址。但是,如果您实施帐户链接(如 Ahmed 提到的)并使用 Streamlined Flows,那么您将收到提供给您的电子邮件;您只需要使用 jsonwebtoken 库,就可以解码断言 JWT 并获取电子邮件地址。
话虽这么说,这发生在“登录”和令牌交换期间……而不是在实际操作执行期间。您需要发出刷新令牌/访问令牌:S
一种方法是使用帐户链接。我想知道如果没有电子邮件或帐户链接,您可能有哪些用例不一定能工作?