匹配页面范围的ID和聊天机器人范围的ID:几个问题

时间:2017-05-24 10:33:58

标签: facebook facebook-graph-api oauth

我有一个带有Facebook登录的网站(gigsnet)。我使用Passport / oauth做到了。 我想实现一个聊天机器人,以便我们的用户可以与“Gigsnet”页面聊天,并从聊天机器人获得个性化的回复。

我意识到ID不匹配,而且这里需要一些“魔法”。所以,我们走了。

一些IDS

当我自己(页面管理员)收到消息时,这是我的服务器收到的内容:

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 }

此特定用户恰好是拥有网页和应用的公司的网页,应用和所有者的管理员。

所以:

  • 用户ID(CHATBOT SCOPE):119XXXXXX7137093
  • USER ID(LOGIN APP SCOPE):636379230 WITH ADMIN访问令牌:EAAGcvqGZBOtkBAFuHIC4U9CxB8vEFcL25iQ6vsVkT9s1CKfJtqPPg6YhJjZAepu2v6EqtOjj6UDCaTYxca9UbRReIhKeIu4UGmEW4L9lJcGDXXXXXXXXXXXXXXXl4YgoMx8ExmI0zZCEsbZBYtZA9SR3PW9FkMdZCkgZD 页面ID:gigsnetco
  • APP ID(登录APP):453817548028633

访问令牌非常重要,因为我是网页的管理员。

MESSENGER BOT中的用户ID - >用户ID登录APP(带额外步骤)

要进行此调用,我需要首先获取页面的访问令牌。所以,我在这里使用我的用户来自数据库的oauth访问令牌,以获得另一个访问令牌,即管理页面的令牌。

curl "https://graph.facebook.com/v2.9/gigsnetco?access_token=EAAGcvqGZBOtkBAFuHIC4U9CxB8vEFcL25iQ6vsVkT9s1CKfJtqPPg6YhJjZAepu2v6EqtOjj6UDCaTYxca9UbRReIhKeIu4UGmEW4L9lJcGDXXXXXXXXXXXXXXXl4YgoMx8ExmI0zZCEsbZBYtZA9SR3PW9FkMdZCkgZD&fields=access_token"

{ “的access_token”: “EAAGcvqGZBOtkBAMeNZAE09EsRndMYvDlVpNeE6HT05zxqeL2XXXXXXXXXXXXXXXXDs2vdiSYlErrdw8ZAF3uBdUiIjnioXxohljA3mLjlKbgFZC5tfz7ivGHCHb4LubXHBNx7wLMMLcl7WrZC627uca2HW18dQZBH5MGhOqv​​HRyYXQZDZD”, “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.当用户向聊天机器人输入任何内容时,我现在可以与之前登录过的用户交叉引用它们,并提供个性化信息。

登录所有用户ID - > MESSENGER中的用户ID

我在“令牌生成”中使用屏幕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上使用护照)获得了此访问令牌。

    • 此令牌会在60天后过期吗?
    • 如果是这样,这是否意味着我应该链接/取消链接我的帐户,以便生成新的访问令牌? (或者,使用API​​命令获取新的访问令牌?(如果是,哪一个?)
    • 由于访问令牌过期,我是否应该继续为登录用户刷新?问题是,一旦用户登录,他们就会陷入困境。
  • 页面访问令牌是否也会过期?我应该多久重新生成一次?当然,为每一条收到的信息重新生成它会在我的结束和结束时浪费......!

  • 范围内的ID是否稳定?我绝对知道ID永远不会改变吗?一旦我建立连接,我可以保存它并永远保存它吗?即使用户将自己与oauth取消链接,然后将自己链接回来?或者如果访问令牌过期,例如。如果他们确实改变了,我怎么知道他们是否已经过期/?

谢谢!

0 个答案:

没有答案