在 Facebook Messenger 选择事件中获取发件人信息是否有其他要求?

Are there additional requirements to get the sender info on a Facebook messenger optin event?

我正在收听 Facebook Messenger 触发的 optin 事件。文档说我应该收到一个包含 { 'sender': { 'id': 'USER_ID' } } 的对象。但是,我得到的数据缺少此信息。我确实收到了 optin 事件,并且获得了其余数据,但我缺少 sender.

我得到的响应如下所示:

"messaging"=>[{
    "recipient"=>{"id"=>"MY_PAGE_ID"},
    "timestamp"=>1503480281655,
    "optin"=>{"ref"=>"PASS_THROUGH_PARAM", "user_ref"=>"5019"}
}]

我正在使用 facebook-messenger gem 来处理 webhook 事件。但是我决定直接拦截请求以检查我得到的数据,这就是我用来生成上述响应的数据。 gem 给我的对象如下所示:

#<Facebook::Messenger::Incoming::Optin:0x007fe2829a4928
    @messaging={ "recipient"=>{"id"=>"MY_PAGE_ID"},
                 "timestamp"=>1503480091027, 
                 "optin"=>{"ref"=>"PASS_THROUGH_PARAM", "user_ref"=>"58326"}
                }>

这是我 listen 参加选择活动的地方。

最后,触发选择事件的点击处理程序完全符合 Facebook 的文档:

  FB.AppEvents.logEvent('MessengerCheckboxUserConfirmation', null, {
    'app_id':'<%= Figaro.env.facebook_app_id %>',
    'page_id':'<%= Figaro.env.facebook_page_id %>',
    'ref':'PASS_THROUGH_PARAM',
    'user_ref':'<%= @uniq_user_ref %>'
  });

这是剩下的 file 以防它有价值。

我还需要设置或传递什么来告诉 Facebook 我需要这些信息吗?

您可能正在使用 Checkbox plugin instead of the Send to Messenger 插件吗?在 Checkbox 文档中,他们提到了以下内容(强调我的):

Callback

After the opt-in event, we will post a webhook event to your server if the checkbox state was checked. This callback has the same format as the opt-in callback, but instead of a sender field, it has an optin object with a user_ref field.