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