Dialogflow es Dialogflow Webhook V2帐户链接无法获取用户配置文件信息
我已经设法在Android上使用google sdk和Dialogflow上的操作进行帐户链接,但无法使用新的Dialogflow V2 webhook进行链接。 它确实请求允许链接帐户,并且帐户链接确实发生,但我无法访问用户数据,如给定的名称、电子邮件等。 我已经完成了所需的所有工作,包括使用操作创建意图,在其中按预期调用意图,但我没有得到我应该得到的信息 这是为创建登录而调用的代码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
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上运行。一旦我看到你对此的评论,我会将其标记为正确答案:)还有一个问题,时间问题。当谷歌将其发送到登录意图时,有时它没有配置文件信息,但一段时间后它确实有。没有地方作出承诺,所以我必须弄清楚该怎么做。另外,发送的额外参数如何,而这只有代理。