如何以编程方式订阅Messenger Webhook

时间:2019-03-30 07:22:13

标签: ruby-on-rails facebook facebook-graph-api

我试图为我的客户实施Facebook Checkbox,但我意识到必须订阅messenging_optins事件才能呈现Facebook checkbox。因此,我尝试以编程方式订阅messaging_optins事件。

请注意,我的Facebook应用程序在开发应用程序中。所以实际上,我仍然在我的Facebook帐户上进行测试。

curl -i -X POST "https://graph.facebook.com/v3.2/{my-customer-page-id}/subscriptions?access_token={my_app_access_token}&callback_url=https%3A%2F%2Fmy-server.ngrok.io%2Fwebhook%2Ffacebook&fields=messaging_optins&object=page&verify_token=abc123abc123456"

响应为{"success":true}

但是,在手动转到Facebook Developer设置并订阅以下屏幕截图所示的页面之前,我的Facebook Checkbox仍然无法使用。

enter image description here

我意识到上面的curl命令只是帮助我订阅了Page Webhook(不是Messenger webhook)事件,如下图所示。

enter image description here

有人可以指出为什么我不能订阅“ Messenger事件”,但是Facebook graph API返回它已成功订阅吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

挖掘Facebook文档1天后,尝试使用Facebook Graph Explorer测试许多案例,我终于找到了以编程方式订阅Page的Webhook的方法。

在Facebook Docs中,它这样写了3行

  

Messenger的Webhooks允许您在发生各种交互或事件(包括某人发送消息)时接收实时通知。 Messenger的Webhook与其他Webhook略有不同,因此在设置这种类型的Webhook时,请使用Webhooks for Messenger docs

这是我订阅messagesmessaging_postbacksmessaging_optinsmessage_reads事件的方式。请参阅:https://developers.facebook.com/docs/graph-api/webhooks/getting-started/webhooks-for-pages

curl -i -X POST "https://graph.facebook.com/v3.2/{page-id}/subscribed_apps?access_token={page-access-token}&subscribed_fields=messages,messaging_postbacks,messaging_optins,message_reads"

答案 1 :(得分:0)

Facebook Graph API具有一个Subscriptions端点,可用于为图形网络的对象(例如pageuser等)设置Webhooks。
您需要向订阅端点发出POST请求,并提供所需的参数,这些参数是:

  1. object您要预订其Webhook的对象
  2. callback是可公开访问的URL,当订阅的事件被触发时,Facebook将在其中发送webhook事件数据(例如,您的page收到一条消息)
  3. fields您要订阅的字段列表(例如messages
  4. verify_token,Facebook会将此令牌发送到您的回调URL,以便您可以验证它来自Facebook,而不是某些用于处理Webhook回调的恶意源see this guide
  5. access_token您的应用访问令牌 这是official docs
  6. 的摘录
curl -F "object=user" \
     -F "callback_url=https://your-clever-domain-name.com/webhooks" \
     -F "fields=photos" \
     -F "verify_token=your-verify-token" \
     -F "access_token=your-app-access-token" \
     "https://graph.facebook.com/your-app-id/subscriptions"

如果成功,响应将是

{
  "success": "true"
}

要查看您的订阅,请向此HTTP端点发送一个GET请求

https://graph.facebook.com/your-app-id/subscriptions?access_token=your-app-access-token

返回这样的响应

{
  "data": [
    {
      "object": "user",
      "callback_url": "https://your-clever-domain-name.com/webhooks",
      "active": true,
      "fields": [
        {
          "name": "photos",
          "version": "v2.10"
        },
        {
          "name": "feed",
          "version": "v2.10"
        }
      ]
    }
  ]
}
相关问题