Dialogflow es Dialogflow Webhook V2帐户链接无法获取用户配置文件信息

Dialogflow es Dialogflow Webhook V2帐户链接无法获取用户配置文件信息,dialogflow-es,actions-on-google,Dialogflow Es,Actions On Google,我已经设法在Android上使用google sdk和Dialogflow上的操作进行帐户链接,但无法使用新的Dialogflow V2 webhook进行链接。 它确实请求允许链接帐户,并且帐户链接确实发生,但我无法访问用户数据,如给定的名称、电子邮件等。 我已经完成了所需的所有工作,包括使用操作创建意图,在其中按预期调用意图,但我没有得到我应该得到的信息 这是为创建登录而调用的代码 function googleSignIn() { console.log('In googleSig

我已经设法在Android上使用google sdk和Dialogflow上的操作进行帐户链接,但无法使用新的Dialogflow V2 webhook进行链接。 它确实请求允许链接帐户,并且帐户链接确实发生,但我无法访问用户数据,如给定的名称、电子邮件等。 我已经完成了所需的所有工作,包括使用操作创建意图,在其中按预期调用意图,但我没有得到我应该得到的信息

这是为创建登录而调用的代码

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))
  }
在囚犯的帮助下,我设法解决了这个问题。你基本上只需要得到需要解码的令牌。这是相关代码

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 Sign-in for Assistant登录一次,所有进一步的请求都将包含一个id令牌

如果您正在使用google library上的操作,则令牌将作为
conv.user.profile.id
位于
conv.user.profile.id>对象中,并且配置文件信息本身(id令牌的“有效负载”将位于
conv.user.profile.payload

如果您正在使用dialogflow实现库,则可以从
agent.getConv()
获取
conv
对象

如果您正在使用multivocal库,则用户配置文件将存储在环境中的
user/profile
下,并且
user/IdentityToken
下的id标记可用,
user/IsAuthenticated
将设置为true


只要用户没有将您的操作与他们的帐户断开连接,此信息将在本次会话以及以后的任何会话中发送给您。

a您是否通过OAuth或谷歌登录助手使用帐户链接?谢谢,我实际上是在检查你的个人资料,看看你是否回答了关于这个的任何问题,因为你的答案很好!我保持它的简单和使用谷歌登录的助手。基本上,当我在google上使用Actions时,很容易定义app=dialogflow({client:..)然后app对象给了我所有关于登录的信息。我不知道如何使用Webhook做同样的事情。我尝试以同样的方式使用app,但它显示undefined object。我确信我缺少了一些非常简单的东西来获取Google登录数据。事实上,我尝试了,但得到了以下信息:有效负载:未定义的有效负载结束:这是我在欢迎意图函数welcome(agent){agent.add(
\n\n欢迎来到迷你精灵!
);const conv=agent.conv();const payload=JSON.stringify(conv.user.profile.payload);console.log('user:\n',JSON.stringify(conv.user),'\n用户名称:');console.log('('Payload:\n',JSON.stringify(Payload),'\nEnd of Payload:');…}另外,不知何故,您不需要这个吗?const app=dialogflow({debug:true,clientId:'991814768814-rfslo1ooq12apeqs4er2l62apcap.apps.googleusercontent.com'});我试图在主函数中使用它,但它不起作用。我得到了未定义的应用程序。好的,我得到了它。我必须解码id令牌,尽管它是在我使用google library上的操作时自动发生的。你知道一种不使用JWT库的简单方法吗?谢谢,我使用jsonwebtoken对其进行解码并得到了结果。现在我知道了希望它能在Iphone上运行。一旦我看到你对此的评论,我会将其标记为正确答案:)还有一个问题,时间问题。当谷歌将其发送到登录意图时,有时它没有配置文件信息,但一段时间后它确实有。没有地方作出承诺,所以我必须弄清楚该怎么做。另外,发送的额外参数如何,而这只有代理。