我有一个带有Facebook登录的网站(gigsnet)。我使用Passport / oauth做到了。 我想实现一个聊天机器人,以便我们的用户可以与“Gigsnet”页面聊天,并从聊天机器人获得个性化的回复。
我意识到ID不匹配,而且这里需要一些“魔法”。所以,我们走了。
当我自己(页面管理员)收到消息时,这是我的服务器收到的内容:
Requested: /app/chatbot
REQUEST BODY: { object: 'page',
entry:
[ { id: '1130858117040228',
time: 1495584613258,
messaging:
[ { sender: { id: '119XXXXXX7137093' },
recipient: { id: '1130858117040228' },
timestamp: 1495584613013,
message:
{ mid: 'mid.$cAAQEgkm16DpiaQ9qlVcN8ohagocY',
seq: 290123,
text: 'd' } } ] } ] }
POST /app/chatbot 200 1.581 ms - -
这告诉我聊天机器人的用户ID是119XXXXXX7137093。 此外,这是我在我的数据库中为经过身份验证的用户提供的内容:
{ "_id" : ObjectId("5924c947b0d5a1095c8f326c"), "strategyId" : "facebook", "field1" : "636379230", "field3" : "EAAGcvqGZBOtkBAFuHIC4U9CxB8vEFcL25iQ6vsVkT9s1CKfJtqPPg6YhJjZAepu2v6EqtOjj6UDCaTYxca9UbRReIhKeIu4UGmEW4L9lJcGDXXXXXXXXXXXXXXXl4YgoMx8ExmI0zZCEsbZBYtZA9SR3PW9FkMdZCkgZD", "userId" : ObjectId("59239720a04b2e1de8e103d8"), "id" : ObjectId("5924c947b0d5a1095c8f326b"), "_children" : { }, "_clean" : true }
此特定用户恰好是拥有网页和应用的公司的网页,应用和所有者的管理员。
所以:
访问令牌非常重要,因为我是网页的管理员。
要进行此调用,我需要首先获取页面的访问令牌。所以,我在这里使用我的用户来自数据库的oauth访问令牌,以获得另一个访问令牌,即管理页面的令牌。
curl "https://graph.facebook.com/v2.9/gigsnetco?access_token=EAAGcvqGZBOtkBAFuHIC4U9CxB8vEFcL25iQ6vsVkT9s1CKfJtqPPg6YhJjZAepu2v6EqtOjj6UDCaTYxca9UbRReIhKeIu4UGmEW4L9lJcGDXXXXXXXXXXXXXXXl4YgoMx8ExmI0zZCEsbZBYtZA9SR3PW9FkMdZCkgZD&fields=access_token"
{ “的access_token”: “EAAGcvqGZBOtkBAMeNZAE09EsRndMYvDlVpNeE6HT05zxqeL2XXXXXXXXXXXXXXXXDs2vdiSYlErrdw8ZAF3uBdUiIjnioXxohljA3mLjlKbgFZC5tfz7ivGHCHb4LubXHBNx7wLMMLcl7WrZC627uca2HW18dQZBH5MGhOqvHRyYXQZDZD”, “ID”: “1130858117040228”}
我现在使用上面页面ID的令牌向用户119XXXXXX7137093(chatbot)发出请求,询问链接页面的ID列表。 注意:我使用用户ID 119XXXXXX7137093,按应用ID过滤,使用页面的访问令牌。
curl "https://graph.facebook.com/v2.9/119XXXXXX7137093/ids_for_apps?app=453817548028633&access_token=EAAGcvqGZBOtkBAMeNZAE09EsRndMYvDlVpNeE6HT05zxqeL2XXXXXXXXXXXXXXXXDs2vdiSYlErrdw8ZAF3uBdUiIjnioXxohljA3mLjlKbgFZC5tfz7ivGHCHb4LubXHBNx7wLMMLcl7WrZC627uca2HW18dQZBH5MGhOqvHRyYXQZDZD"
{"data":[{"id":"636379230","app":{"link":"http:\/\/www.gigsnet.com\/","name":"Login","id":"453817548028633"}}],"paging":{"cursors":{"before":"NDUzODE3NTQ4MDI4NjMz","after":"NDUzODE3NTQ4MDI4NjMz"}}}
宾果!我有636379230.当用户向聊天机器人输入任何内容时,我现在可以与之前登录过的用户交叉引用它们,并提供个性化信息。
我在“令牌生成”中使用屏幕https://developers.facebook.com/apps/453817548028633/messenger/中的访问令牌。
curl "https://graph.facebook.com/v2.9/636379230/ids_for_apps?app=453817548028633&access_token=EAAGcvqGZBOtkBAKycZAeDI4D13sOVZAZAlNJqZCTXXXXXXXXXXXXXXXxsyaOs9WgQO2jcnHJeEYAbUlEdCU1xejYjTlWE1w4tEfe7IZAAw8i3X2qn1AKwDlHhwHbQsoylxPZAcPagVKemSd6KQwUP2gB8pkm61PumqLiVuIw3B3lQZDZD"
{"data":[{"id":"636379230","app":{"link":"http:\/\/www.gigsnet.com\/","name":"Login","id":"453817548028633"}}],"paging":{"cursors":{"before":"NDUzODE3NTQ4MDI4NjMz","after":"NDUzODE3NTQ4MDI4NjMz"}}}
请注意,我自己的访问令牌(我猜是因为我是页面管理员)也可以:
curl "https://graph.facebook.com/v2.9/636379230/ids_for_apps?app=453817548028633&access_token=EAAGcvqGZBOtkBAFuHIC4U9CxB8vEFcL25iQ6vsVkT9s1CKfJtqPPg6YhJjZAepu2v6EqtOjj6UDCaTYxca9UbRReIhKeIu4UGmEW4L9lJcGDXXXXXXXXXXXXXXXl4YgoMx8ExmI0zZCEsbZBYtZA9SR3PW9FkMdZCkgZD"
{"data":[{"id":"636379230","app":{"link":"http:\/\/www.gigsnet.com\/","name":"Login","id":"453817548028633"}}],"paging":{"cursors":{"before":"NDUzODE3NTQ4MDI4NjMz","after":"NDUzODE3NTQ4MDI4NjMz"}}}
宾果! 636379230是messenger的用户标识。
API文档提到我应该提供appsecret_proof以使ids_for_pages工作。但是,我没有必要(另外,你只提供一个PHP示例,我在节点中找不到示例)。可以不提供appsecret_proof吗?
为了拨打电话,我使用自己的访问令牌(作为页面管理员);我使用oauth,使用我的应用程序(我在nodejs上使用护照)获得了此访问令牌。
页面访问令牌是否也会过期?我应该多久重新生成一次?当然,为每一条收到的信息重新生成它会在我的结束和结束时浪费......!
范围内的ID是否稳定?我绝对知道ID永远不会改变吗?一旦我建立连接,我可以保存它并永远保存它吗?即使用户将自己与oauth取消链接,然后将自己链接回来?或者如果访问令牌过期,例如。如果他们确实改变了,我怎么知道他们是否已经过期/?
谢谢!