6

我目前正在尝试让 Facebook 发送所有潜在客户,因为它们已实时注册到订阅的端点。Facebook 在他们的文档中提到,这可以通过设置来自新的潜在客户广告服务的实时更新来实现。

https://developers.facebook.com/docs/marketing-api/guides/lead-ads/v2.5#setting-up-realtime-updates

然而,经过几个小时试图整合这个,我没能让它工作。以下是我到目前为止无济于事的过程。

设置应用程序

我已经设置了一个 Facebook 应用程序 (423332064458136),该应用程序目前与我的个人帐户相关联。此应用程序是实时的,但不在任何平台上运行,因此不需要通过审核(据我了解)。

我已经使用应用程序 ID 和应用程序密码为此应用程序注册了一个潜在客户回调。这是使用以下 curl 请求实现的。

curl \
-F "object=page" \
-F "callback_url=https://leadr.co.uk/external/handle-fb.php" \
-F "fields=leadgen" \
-F "verify_token=abc123" \
-F "access_token=423332064458136|<APP_SECRET>" \
"https://graph.facebook.com/v2.5/423332064458136/subscriptions"

注册后我收到了 {success:true} 响应。为了确认这一点,我使用来自 GraphAPI 资源管理器的应用程序令牌在以下路径运行了一个请求:

/423332064458136/订阅

并收到回复:

{
  "data": [
    {
      "object": "page",
      "callback_url": "https://leadr.co.uk/external/handle-fb.php",
      "fields": [
        "leadgen"
      ],
      "active": true
    }
  ],
}

https://leadr.co.uk/external/handle-fb.php位置,如果需要,我将使用 hub_challenge 进行响应,并将通过 php://input 发送的所有内容记录到文本文件中。

设置线索广告

我使用 Facebook 文档中的说明在 VoucherSelector 页面 ( https://www.facebook.com/permalink.php?story_fbid=1009785315719107&id=140148862682761 ) 上设置了一个潜在客户广告: https ://developers.facebook.com/ docs/marketing-api/guides/lead-ads/v2.5

这目前设置为非活动状态,因为我们不想在此测试阶段花费任何预算。但是,据了解,帐户仍然可以使用给定的 URL(上图)进行注册。

然后,我们使用页面访问令牌将此页面订阅到我们的应用程序。使用 graphAPI Explorer 我选择了我们的应用程序,然后获得了凭证选择器页面的页面访问令牌。然后我运行以下请求以将页面订阅到我们的应用程序。

curl \
-F "access_token=<PAGE_ACCESS_TOKEN>" \
"https://graph.facebook.com/v2.5/140148862682761/subscribed_apps"

我收到了 {success:true} 的回复。通过在同一端点运行 GET 请求,我收到如下响应:

{
  "data": [
    {
      "category": "Business",
      "link": "https://www.facebook.com/games/?app_id=423332064458136",
      "name": "leadR - Lead Ads Collection",
      "id": "423332064458136"
    },
    {
      "category": "Utilities",
      "link": "https://www.facebook.com/games/?app_id=2373072738",
      "name": "Discussion Boards",
      "id": "2373072738"
    }
  ],
}

确认页面已订阅我们的应用程序。

每当在此领先广告上发生注册时,我们的终点都不会受到任何有效载荷的影响。

补充说明

  • 我是代金券选择器页面的管理员,主要广告在该页面上运行。
  • 当我尝试下载从此广告生成的潜在客户(目前有 8 个)时,我只在下载文件中收到自己。
  • 任何使用 /subscriptions_sample 端点向我们的端点发送测试数据包的尝试都会失败,并出现以下错误(这意味着我们只能使用真实账户进行测试):

    {"error":{"message":"(#3) 应用必须在白名单中","type":"OAuthException","code":3,"fbtrace_id":"HH5gInxafKP"}}

有点坚持如何从这里开始。有没有人成功地将潜在客户广告发送到订阅的端点?

4

1 回答 1

2

我已经使用 Facebook 在此视频中经历的 PHP 方法成功地将实时 Facebook 线索广告更新到我们的端点。

假设您将文件放在测试服务器或实时服务器上,您将需要三样东西。

1 - 正确的 Facebook 应用程序设置。查看上面的内容,您似乎正确设置了回调 URL 和应用程序。只需确保应用程序具有正确的回调 URL,并且这些字段用于 webhook 设置中的“leadgen”。此外,我们在访问侦听器的应用程序方面遇到了问题,除非它位于 https 域上(请确保您拥有有效的 SSL 证书),并且您还希望在 Cloud Flare 或其他防火墙等任何保护服务中授予应用程序域权限所以它不会被阻止打击听众。

2 - 您的回调 URL 处的 PHP 侦听器。这是我们为 PHP 设置的方法,我没有在上面看到您的代码,所以我将在此处发布我们的代码,因为它可能会有所不同:

<?php
$challenge = $_REQUEST['hub_challenge'];
$verify_token = $_REQUEST['hub_verify_token'];
if ($verify_token == 'abc123') {echo $challenge;}

//you can output the below to your error log and tail -f it to see them
//feed in live, once you see them hit your error log you know your
//listener works, then you can change the below code to handle the
//array and grab the leadgen ID for a further GET request of that real-time entry;

$input = json_decode(file_get_contents('php://input'), true);
error_log(print_r($input, true));  ?>

3 - 您的 CRM 中的某种平台页面以订阅页面。这是我们在下面使用的,它非常基础,但可以作为一个很好的起点,将应用程序更全面地集成到您的 CRM 中:

 <h2>Lead Gen Platform</h2>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : 'USEYOUROWNAPPID',
      xfbml      : true,
      version    : 'v2.5'
    });
  };

  (function(d, s, id){
     var js, fjs = d.getElementsByTagName(s)[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement(s); js.id = id;
     js.src = "//connect.facebook.net/en_US/sdk.js";
     fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'facebook-jssdk'));


function subscribeApp(page_id, page_access_token) {
 console.log('Subscribed Page to FB Leads Live Update ' + page_id); 
 FB.api('/' + page_id + '/subscribed_apps', 
 'post',
 {access_token: page_access_token},
 function(response)
 {console.log('Successfully subscribed page', response);
 });

}
   function checkLoginState() {
  FB.getLoginStatus(function(response) {
       console.log('statusChangeCallback');
    console.log(response);
console.log('successfully logged in', response);
  });

 FB.login(function(response) {
   if (response.status == 'connected') {
    // Logged into your app and Facebook.
    FB.api ('me/accounts', function(response) { 
        console.log('successfully retrieved pages', response);

    var pages = response.data;
    var ul = document.getElementById('list');
    for (i = 0, len = pages.length; i < len; i++) 
    {
    var page = pages[i];
    var li = document.createElement('li');
    var a = document.createElement('a');
    a.href = "#";
    a.onclick = subscribeApp.bind(this, page.id, page.access_token);
    li.appendChild(a);
    a.innerHTML = page.name;
    ul.appendChild(li);
    }
});

  } else if (response.status == 'not_authorized') {
    // The person is logged into Facebook, but not your app.
  } else {
    // The person is not logged into Facebook, so we're not sure if
    // they are logged into this app or not.
  }
 }, {scope: 'public_profile,manage_pages'});

   }

</script>


<fb:login-button scope="public_profile,manage_pages" onlogin="checkLoginState();">
</fb:login-button>

<ul id="list"></ul>

使用上面的方法,我们已经成功地让我们的 Facebook 线索广告开始在回调 URL 处击中我们的听众,从而使我们能够实时处理数据。希望这对您的问题有所帮助!

于 2016-02-02T13:38:22.860 回答