如何从 google 家的语音匹配配置文件中获取用户的唯一身份?

How to get user's unique identity from google home's voice match profile?

我想在 Google 主页上开发一个应用程序(操作),它将 return 一些机密信息提供给用户。因此,我无法根据帐户链接对用户进行身份验证,因为房间中的任何人都可以使用该设备。如何从语音匹配配置文件中获取用户的唯一身份(可能是电子邮件 ID)?

帐户链接绑定到说 "Ok Google" 或 "Hey Google" 以调用您的操作的特定用户。如果说它的用户在他们使用的设备上没有注册语音(他们是 "anonymous" 用户),那么他们就不能进行帐户链接。这听起来像是您要达到的安全级别,但不清楚您为什么不这么想。

如果您使用 node.js 库,您可以使用 app.getUser().userId 获取用户的唯一身份(有或没有帐户链接)。但是,如果用户在设备上 "anonymously"(没有进行语音注册,或者他们与注册的语音不匹配),则此身份将在每次会话中更改,因为无法确定用户是谁。

您无法获取用户的电子邮件 ID。 (而且,即使可以,人们也希望它遵循与处理上述匿名用户类似的规则。)

更新 以澄清我所说的 "anonymous" 请求的意思:

当用户首次设置 Google 家庭设备时,系统会提示他们在该设备上注册 Voice Match。注册他们的声音需要他们说 "Ok Google" 和 "Hey Google" 几次,这样才能建立语音模式。之后,此人说出的这些触发词将使语句的其余部分与他们的 Google 助理帐户相关联。如果他们已将帐户链接到您的服务,他们的 Google 助理帐户(与他们的语音调用短语匹配)将链接到您的服务。

可以允许其他用户为设备注册 Voice Match。这会将他们的调用短语语音与他们的 Google 助理帐户相关联。如果该用户已使用您的服务完成帐户链接,那么他们触发调用短语的语音将具有与其链接帐户关联的内容。

但是如果有人在没有为该设备设置 Voice Match 的情况下使用 Home 怎么办?调用短语仍然有效。他们仍然可以调用您的操作。但是它与哪个 Google 助理帐户相关联?

由于特定的 Home 设备不知道调用它和发出请求的人,因此这是 "anonymous" 用户。匿名用户无法进行帐户链接,因为没有与请求相关联的助理帐户。尽管提供了一个用户 ID - 此 ID 将在每次对话中更改,因为设备无法知道这次发出请求的匿名人与上次发出请求的是同一个匿名人。

但是,如果用户设置了 Home 设备,但根本没有在其上设置 Voice Match,会发生什么情况?出于安全原因,系统必须假设这确实是一个共享设备,并且所有请求都必须匿名处理。

额外更新

上面提到的 "anonymous UserID" 已被弃用,将于 2019 年 5 月删除。

现在可以获取用户的电子邮件地址,前提是他们已将其注册为 Google 个人资料的一部分,方法是使用帐户链接和 Google 登录。

从概念上讲,答案的其他部分可能仍然有效,但某些细节可能已更改。

您可以为此目的使用帐户链接。如果您的phone处于锁定状态,那么只有phone中注册语音的人才能使用OKGoogle调用google助手。 如果这种类型的调用适合您,那么请继续阅读 post 的其余部分。我已经 post 编辑了一个类似的答案

我们必须先启用webhook,我们可以在对话流程实现文档中看到如何启用webhook 如果我们要使用 Google 助手,那么我们必须先在集成中启用 Google 助手集成。 然后按照下面提到的步骤在 google:-

上的操作中进行帐户链接
  1. 转到 google 云控制台 -> API 和服务 -> 凭据 -> OAuth 2.0 客户端 ID -> Web 客户端 -> 从那里记下客户端 ID、客户端密码 -> 下载 JSON - 来自 json 记下项目 ID,auth_uri,token_uri -> 授权重定向 URIs -> 将我们应用程序的 URL 列入白名单 -> 在这个 URL 固定部分是 https://oauth-redirect.googleusercontent.com/r/ 并在 URL 中附加项目 ID -> 保存更改

  2. 在 Google 上的操作 -> 帐户 link 设置 1.授权类型=授权码 2.客户信息 1. 填写client id,client secrtet, auth_uri, token_uri 2. 输入身份验证 uri 作为 https://www.googleapis.com/auth and token_uri as https://www.googleapis.com/token 3.保存并运行 4.在google助手上运行ning会报错,不用担心 5. 返回助手设置中的帐户 linking 部分并输入 auth_uri 为 https://accounts.google.com/o/oauth2/auth 和 token_uri 作为 https://accounts.google.com/o/oauth2/token 6. 将范围设为 https://www.googleapis.com/auth/userinfo.profile and https://www.googleapis.com/auth/userinfo.email 我们很高兴去。 7. 保存更改。

  3. 在托管服务器日志中,我们可以看到访问令牌值,通过访问令牌,我们可以获得有关电子邮件地址的详细信息。

  4. 将访问令牌附加到此 link“https://www.googleapis.com/oauth2/v1/userinfo?access_token=”,我们可以在生成的 json 页面中获得所需的详细信息。
  5. accessToken = req.get("originalRequest").get("data").get("user").get("accessToken")
    r = requests.get(link) print("Email Id= " + r.json()["email"]) print("Name= " + r.json()["name"])