无法将Facebook的主要广告发送到我们订阅的终端

时间:2015-11-02 09:37:01

标签: facebook facebook-graph-api facebook-graph-api-v2.4

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

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

然而,经过几个小时试图整合这个,我没能让它工作。以下是我迄今为止所遵循的流程无济于事。

设置应用程序

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

我已使用应用程序ID和应用程序密钥为此应用程序注册了leadgen回调。这是使用以下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://输入发送到文本文件的所有内容。

设置潜在客户广告

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

由于我们不希望在此测试阶段花费任何预算,因此目前设置为无效。但是,我们知道帐户仍然可以使用给定的URL进行注册(上图)。

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

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端点向我们的端点发送测试数据包的尝试都会失败并出现以下错误(意味着我们仅限于能够使用真实账户进行测试):

    {&#34;错误&#34;:{&#34;消息&#34;:&#34;(#3)应用必须在白名单上&#34;,&#34;输入&#34;:& #34; OAuthException&#34;&#34;代码&#34;:3,&#34; fbtrace_id&#34;:&#34; HH5gInxafKP&#34;}}

有点坚持如何从这里开始。是否有任何人将此引导广告发送到订阅的终端是否有任何成功?

1 个答案:

答案 0 :(得分:2)

我已经使用Facebook在video中完成的PHP方法成功获得了Facebook端点广告的实时更新。

假设您的文件位于测试服务器或实时服务器上,您将需要三件事。

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

2 - 您的回调网址上的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主导广告开始在回调网址上听到我们的听众,从而允许我们实时处理数据。希望这有助于你的问题!