Dialogflow es 在DialogFlow中访问Facebook Messenger用户配置文件API

Dialogflow es 在DialogFlow中访问Facebook Messenger用户配置文件API,dialogflow-es,facebook-messenger,facebook-messenger-bot,Dialogflow Es,Facebook Messenger,Facebook Messenger Bot,我正在谷歌的DialogFlow中构建一个跨平台聊天机器人。我想访问Facebook用户档案API来了解用户的名字 我正在努力寻找如何(或是否)实现这一目标的建议 这里有人做到了吗?我昨天为我的一个机器人做了这个,你需要两件事,第一件是页面令牌,第二件是psid,它是页面范围用户ID 在dialogflow上,您将收到以psid作为发件人id的请求块。您可以在以下位置找到它: agent.originalRequest.payload.data.sender.id 此psid需要传递给api

我正在谷歌的DialogFlow中构建一个跨平台聊天机器人。我想访问Facebook用户档案API来了解用户的名字

我正在努力寻找如何(或是否)实现这一目标的建议


这里有人做到了吗?

我昨天为我的一个机器人做了这个,你需要两件事,第一件是页面令牌,第二件是psid,它是页面范围用户ID

在dialogflow上,您将收到以psid作为发件人id的请求块。您可以在以下位置找到它:

agent.originalRequest.payload.data.sender.id

此psid需要传递给api get请求
/$psid?fields=first\u name
使用您的页面令牌作为accessToken以获取响应中的名字。

您需要调用才能获取用户的配置文件

Facebook为此提供了一些SDK,但他们的官方JavaScript SDK更倾向于在web客户端上,而不是在服务器上。他们在该链接上提到了一些第三方Node.js库。我特别使用(在撰写本文时,它是唯一一个似乎“某种程度上”得到维护的)

因此,您需要一个页面令牌来进行调用。在开发过程中,您可以从这里获得:
https://developers.facebook.com/apps//messenger/settings/

下面是一些示例代码:

const{promisify}=require('util');
let graph=require('fbgraph');//facebook图形库
常量fbGraph={
get:promisify(graph.get)
}
graph.setAccessToken(FACEBOOK_页面_TOKEN);//{
设ctx=agent.context.get('generic');
让fbSenderID=ctx?ctx.parameters.facebook\u sender\u id:未定义;
console.log('FACEBOOK发送者ID:'+fbSenderID);
fbGraph.get(fbSenderID)
。然后(有效载荷=>{
console.log('all fine:'+有效载荷);
解析(有效载荷);
})
.catch(错误=>{
控制台。警告(错误);
拒绝(错误);
});
});
}

你能在承诺中编写异步函数吗?@SimonRavelingien,好了。答案已编辑。不过我还没有测试过。谢谢你的回答。不幸的是,当我尝试您的全部代码时,它告诉我,
异步函数”仅在es8中可用(使用“esversion 8”)
@RevolucionforMonica您好,有两件事:1)我不使用dialogflow内联编辑器,但我直接使用firebase函数进行部署。我会问你自己的问题。2) 我更新的原因是您需要获取Facebook发件人id的方式发生了一些变化,即新语法(),因此上面的示例不再有效。还有一个你需要遵循的程序(但我收到的电子邮件可能是因为我的部署很旧)