Dialogflow Webhook V2 帐户链接无法获取用户个人资料信息

Dialogflow Webhook V2 Account linking cannot get user profile info

我已经设法使用 google sdk 和 Dialogflow 上的操作在 Android 上建立帐户链接,但无法使用新的 Dialogflow V2 webhook 使其工作。 它确实请求 link 帐户的权限并且确实发生了 linking 帐户,但我无法访问 given_name、电子邮件等用户数据。 我已经完成了所需的一切,包括使用 actions_intent_SIGN_IN 创建意图,它按预期被调用,只是我没有得到我应该得到的信息。

这是调用创建登录的代码

function googleSignIn() {
    console.log('In googleSignIn')
    const conv = agent.conv()
    // conv.ask(new SignIn('To get your account details'))
    // conv.ask('Hello')

    var payload = {
      "expectUserResponse": true,
      "systemIntent": {
        "intent": "actions.intent.SIGN_IN",
        "data": {}
      }
    }

    // agent.add(payload)
    console.log('add googleSignIn payload')
    agent.add('Placeholder_google_payload')
    agent.add(new Payload(agent.ACTIONS_ON_GOOGLE, payload))
  }

当 Google

上的操作触发意图时调用此方法
function getSignIn(agent) {
    console.log('In function getSignin: ')
    const conv = agent.conv()
    console.log('conv parts: ', JSON.stringify(conv.user))
    agent.add('User profile:', conv.user);
    // console.log('conv access token: ', JSON.stringify(conv.user.access.token))
  }

在 Prisoner 的帮助下,我设法解决了这个问题。您基本上只是获得必须解码的令牌。这是相关代码。

var jwt = require('jsonwebtoken'); // use npm i jsonwebtoken to get 
const profile = jwt.decode(conv.user.profile.token);
console.log('Profile: ', profile); 
// you can then get the elements from the profile (instead of payload)
// e.g.
console.log('Name: ', profile.name);

一旦用户使用 Google 登录助手登录 一次,所有进一步的请求都将包含一个 ID 令牌。

如果您使用的是 actions-on-google 库,令牌将在 conv 对象中作为 conv.user.profile.id 和配置文件信息本身("payload" 的 id 令牌)将在 conv.user.profile.payload.

如果您使用的是 dialogflow-fulfillment 库,则可以从 agent.getConv() 获取 conv 对象。

如果您使用的是 multivocal 库,则用户配置文件存储在 User/Profile 下的环境中,其中 id 令牌在 User/IdentityToken 下可用,并且 User/IsAuthenticated 将设置为 true .

只要用户不断开您的操作与他们帐户的连接,此会话和任何未来会话都会发送给您。