Невозможно отправить ведущую рекламу Facebook на нашу подписанную конечную точку

В настоящее время я пытаюсь заставить Facebook отправлять все лиды, поскольку они зарегистрированы в режиме реального времени на подписанную конечную точку. Facebook упоминает в своей документации, что это возможно, настроив обновление в режиме реального времени от новой службы рекламных объявлений.

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

Однако после нескольких часов, пытаясь интегрировать это, я не смог заставить его работать. Ниже приведен процесс, которому я следовал до сих пор безрезультатно.

Настройка приложения

Я установил приложение Facebook (423332064458136), которое в настоящее время связано с моей личной учетной записью. Это приложение работает, но не работает на какой-либо платформе, так как оно не требует одобрения путем проверки (насколько я понимаю).

Я зарегистрировал обратный вызов для этого приложения, используя как идентификатор приложения, так и секрет приложения. Это было достигнуто с помощью следующего запроса 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:// ввод в текстовый файл.

Настройка ведущего объявления

Я установил ведущее объявление на странице VoucherSelector ( https://www.facebook.com/permalink.php?story_fbid=1009785315719107&id=140148862682761), используя инструкцию из документации Facebook: 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), я получаю только себя в файле загрузки.
  • Любая попытка использовать конечную точку /subscription_sample для отправки тестового пакета в нашу конечную точку заканчивается неудачей со следующей ошибкой (что означает, что мы ограничены только возможностью тестирования с реальными учетными записями):

    {"error": {"message": "(# 3) приложение должно быть в белом списке","type":"OAuthException","code":3,"fbtrace_id":"HH5gInxafKP"}}

Вид застрял на том, как действовать отсюда. У кого-нибудь был какой-либо успех в том, чтобы эта рассылка приводила рекламу к подписанной конечной точке?

1 ответ

Я успешно получил в режиме реального времени обновления ведущей рекламы в Facebook для нашей конечной точки, используя метод PHP, который проходит через Facebook в этом видео.

Вам понадобятся три вещи, если у вас есть файлы на тестовом сервере или на реальном сервере.

1 - Правильно настроено приложение Facebook. Глядя на вышесказанное, вы, кажется, правильно настроили URL-адрес обратного вызова и приложение. Просто убедитесь, что приложение имеет правильный URL-адрес обратного вызова, и в настройках webhook указаны поля для 'leadgen'. Также у нас были проблемы с приложением, обращающимся к слушателю, если оно не было в домене https (убедитесь, что у вас есть действительный сертификат SSL), и вы также захотите дать разрешения домену приложения в любой защитной службе, такой как Cloud Flare или другой брандмауэр. поэтому он не будет заблокирован от удара слушателя.

2 - PHP слушатель по вашему URL обратного вызова. Вот как мы настроили наш 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 обратного вызова и, таким образом, позволяли нам обрабатывать данные в режиме реального времени. Надеюсь, это поможет с вашим вопросом!

Другие вопросы по тегам