b>j)΄!Pԫ&;"kB޶}pSVT(wę!j x;-m@JnQ+պכ7MajfJͱ4jѲ撆RxZMz7vIW/dٞТזcZM~ji ߒsQzԠDW3Den"M+/B:-uIJ7j委9p='mANޭ=/B:-n&nUfqxZM~c Ϲ+,&ᾺܢF[(1*" ϒ"Jԧ<;b" "jܢF[x ,!q қ*]/؝27SMcs"ޭDQ/应ܢF_! :s" 7`F+SVTn"IJnQ/应B 4 wD"IJ׭-`S9DrjiEJ߅gJ应矁[xZM~n"IB؃!'Тѕ+(mIKʭ/|ϐܢF[xZMzG %嬩/c[[ Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/17848931591237100077.tmp:1) in /var/www/html/wp-content/plugins/wp-super-cache/wp-cache-phase2.php on line 1563

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/17848931591237100077.tmp:1) in /var/www/html/wp-content/mu-plugins/boostclicks-seo.php on line 42

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/17848931591237100077.tmp:1) in /var/www/html/wp-content/mu-plugins/boostclicks-seo.php on line 43

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/17848931591237100077.tmp:1) in /var/www/html/wp-content/mu-plugins/boostclicks-seo.php on line 44

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/17848931591237100077.tmp:1) in /var/www/html/wp-content/mu-plugins/boostclicks-seo.php on line 45
Keitaro и Facebook Conversions API (cAPI) — BoostClicks

Keitaro и Facebook Conversions API (cAPI)

Keitaro и Facebook Conversions API (cAPI) Полезные сервисы

Что лучше — обычный Facebook Pixel или cAPI? На практике и тот, и другой работают одинаково эффективно, даже на больших объёмах. Однако когда в Facebook начинаются «тряски», сообщество традиционно начинает перебирать все варианты и внедрять что-то новое — в столь непростые времена.

Ранее в нашей команде мы использовали трекер Keitaro в связке с S2S-постбэками для передачи конверсий в Facebook через API. Но, как вы знаете, такая связка устроена по принципу:
1 кампания в Keitaro — 1 пиксель — 1 токен,
что не совсем удобно и ограничивает гибкость.

Поэтому мы решили протестировать наработки Адама — платформу для передачи конверсий по API в Meta. У неё был плюс: можно было наглядно отслеживать все переданные события, данные к ним и статусы ответов от Facebook. Однако она не решала ключевую проблему, о которой я говорил выше — необходимость передавать в постбэке и пиксель, и токен.

Чтобы решить этот вопрос, я добавил функционал сохранения пикселя и токена в базу данных. Теперь, когда на платформу приходит S2S-постбэк от Keitaro, в нём содержится только пиксель. Далее система проверяет в БД наличие токена, соответствующего этому пикселю.
Если токен найден — мы отправляем событие в Facebook через API.
Если токен не найден — возвращаем в ответ на постбэк ошибку с сообщением о том, что для указанного Facebook Pixel не найден токен.

Плафторма для Facebook Conversions API

Ниже — скриншот платформы для работы с Keitaro и Facebook cAPI.
Интерфейс понятный и интуитивный. На главной странице размещена инструкция по настройке необходимых параметров и постбеков в Keitaro.

Также доступны вкладки «Статистика» и «Пиксели», где баинг вносит свои пиксели и соответствующие им токены.

Передача данных о лидах с Keitaro в Facebook Conversions API

Все основные данные для отправки конверсий мы передаём S2S-постбеком из кампании в Keitaro на собственную платформу. Исключение — токен. Он заранее хранится в базе данных и подтягивается по пикселю.

В дополнение к основным параметрам постбека мы также можем передавать дополнительные данные, такие как имя, телефон, а при наличии — email. Эти данные пригодятся для улучшения качества события в cAPI и повышения точности атрибуции.

Как передаём имя и телефон с Keitaro в cAPI

На всех наших лендингах в файле api.php после успешной отправки лида мы редиректим пользователя на страницу «спасибо», передавая имя и номер телефона в URL-параметрах для отображения и записи:

header(&amp;amp;#039;Location: success.php?name=&amp;amp;#039; . urlencode($_POST[&amp;amp;#039;name&amp;amp;#039;]) . &amp;amp;#039;&amp;amp;amp;phone=&amp;amp;#039; . urlencode($_POST[&amp;amp;#039;phone&amp;amp;#039;]));

На странице success.php мы записываем эти данные в нужные саб-айди следующим образом:

document.addEventListener(&amp;amp;quot;DOMContentLoaded&amp;amp;quot;, () =&amp;amp;gt; {
  const getCookie = (name) =&amp;amp;gt; {
    const cookies = document.cookie.split(&amp;amp;#039;;&amp;amp;#039;);
    for (let cookie of cookies) {
      const [key, value] = cookie.trim().split(&amp;amp;#039;=&amp;amp;#039;);
      if (key === name) return decodeURIComponent(value);
    }
    return null;
  };

  const subid = getCookie(&amp;amp;#039;_subid&amp;amp;#039;);
  const name = new URLSearchParams(window.location.search).get(&amp;amp;quot;name&amp;amp;quot;);
  const phone = new URLSearchParams(window.location.search).get(&amp;amp;quot;phone&amp;amp;quot;);

  if (subid &amp;amp;amp;&amp;amp;amp; name &amp;amp;amp;&amp;amp;amp; phone) {
    const pingUrl = `${location.protocol}//${location.hostname}?_update_tokens=1&amp;amp;amp;sub_id=${encodeURIComponent(subid)}&amp;amp;amp;sub_id_22=${encodeURIComponent(name)}&amp;amp;amp;sub_id_23=${encodeURIComponent(phone)}`;
    const trackingImg = new Image();
    trackingImg.src = pingUrl;
    trackingImg.referrerPolicy = &amp;amp;#039;no-referrer-when-downgrade&amp;amp;#039;;
    trackingImg.style.display = &amp;amp;#039;none&amp;amp;#039;;
    document.body.appendChild(trackingImg);
  }
});

Эти значения сохраняются и используются для дальнейшей отправки событий в Facebook Conversions API.

Работа с Facebook Pixel и cAPI одновременно

Мы используем как обычный JavaScript Pixel, так и сервисную отправку через cAPI. Чтобы события не дублировались, применяется дедупликация: мы передаём одинаковый eventID как в js-пикселе, так и в cAPI. Это позволяет Facebook перезаписать событие с более актуальными или точными данными, пришедшими позже через сервер.

Пример реализации JS-пикселя с дедупликацией

document.addEventListener(&amp;amp;quot;DOMContentLoaded&amp;amp;quot;, () =&amp;amp;gt; {
  const eventKey = &amp;amp;quot;fbEventSent&amp;amp;quot;;
  const now = Date.now();
  const twoHours = 7200 * 1000;

  const storedEvent = localStorage.getItem(eventKey);
  if (storedEvent) {
    try {
      const { timestamp } = JSON.parse(storedEvent);
      if (timestamp &amp;amp;amp;&amp;amp;amp; now - timestamp &amp;amp;lt; twoHours) return;
    } catch (e) {}
  }

  const pxl = sessionStorage.getItem(&amp;amp;#039;pxl&amp;amp;#039;);
  const subid = sessionStorage.getItem(&amp;amp;#039;external_id&amp;amp;#039;);
  const eventId = sessionStorage.getItem(&amp;amp;#039;event_id&amp;amp;#039;);
  const contentIds = sessionStorage.getItem(&amp;amp;#039;content_ids&amp;amp;#039;);

  if (!pxl) return;

  !function(f,b,e,v,n,t,s){
    if(f.fbq)return;
    n=f.fbq=function(){ n.callMethod ? n.callMethod.apply(n,arguments) : n.queue.push(arguments); };
    if(!f._fbq)f._fbq=n;
    n.push=n;
    n.loaded=!0;
    n.version=&amp;amp;#039;2.0&amp;amp;#039;;
    n.queue=[];
    t=b.createElement(e);
    t.async=!0;
    t.src=v;
    s=b.getElementsByTagName(e)[0];
    s.parentNode.insertBefore(t,s)
  }(window, document, &amp;amp;#039;script&amp;amp;#039;, &amp;amp;#039;https://connect.facebook.net/en_US/fbevents.js&amp;amp;#039;);

  fbq(&amp;amp;#039;init&amp;amp;#039;, pxl);

  const customData = {};
  if (subid) customData.external_id = subid;
  if (contentIds) customData.content_ids = contentIds;

  if (eventId) {
    fbq(&amp;amp;#039;track&amp;amp;#039;, &amp;amp;#039;Lead&amp;amp;#039;, customData, { eventID: eventId });
  } else {
    fbq(&amp;amp;#039;track&amp;amp;#039;, &amp;amp;#039;Lead&amp;amp;#039;, customData);
  }

  localStorage.setItem(eventKey, JSON.stringify({ timestamp: now }));
});

Где храним данные для пикселя и cAPI

Все ключевые параметры сохраняем на главной:

const pxl = sessionStorage.getItem(&amp;amp;#039;pxl&amp;amp;#039;);
const subid = sessionStorage.getItem(&amp;amp;#039;external_id&amp;amp;#039;);
const eventId = sessionStorage.getItem(&amp;amp;#039;event_id&amp;amp;#039;);
const contentIds = sessionStorage.getItem(&amp;amp;#039;content_ids&amp;amp;#039;);

мы сохраняем в sessionStorage на главной странице лендинга. Это позволяет использовать их как в JS-пикселе, так и в серверной части для отправки через Conversions API.

Настройка S2S-постбеков для передачи событий Lead и Sale в Facebook через платформу

Чтобы корректно отправлять события Lead и Sale в Facebook с помощью нашей платформы, необходимо настроить следующие URL постбеков в Keitaro.

🔹 Постбек для лида (Lead):

https://keitaro/lander/capi/postback.php?clickid={subid}&amp;amp;name={sub_id_22}&amp;amp;phone={sub_id_23}&amp;amp;time={conversion_time}&amp;amp;owner={sub_id_24}&amp;amp;fbclid={fbclid}&amp;amp;country={country_code}&amp;amp;city={city}&amp;amp;ip={ip}&amp;amp;user_agent={user_agent}&amp;amp;revenue={payout}&amp;amp;pixel={pxl}&amp;amp;domain={sub_id_25}&amp;amp;action=lead

🔹 Постбек для продажи (Sale):

https://keitaro/lander/capi/postback.php?clickid={subid}&amp;amp;name={sub_id_22}&amp;amp;phone={sub_id_23}&amp;amp;time={conversion_time}&amp;amp;owner={sub_id_24}&amp;amp;fbclid={fbclid}&amp;amp;country={country_code}&amp;amp;city={city}&amp;amp;ip={ip}&amp;amp;user_agent={user_agent}&amp;amp;revenue={payout}&amp;amp;pixel={pxl}&amp;amp;domain={sub_id_25}&amp;amp;action=sale

⚙️ Пошаговая инструкция по настройке постбеков в Keitaro:

  1. Перейдите в раздел Кампании → S2S постбеки
  2. Нажмите кнопку «Добавить»
  3. Выберите метод запроса: GET
  4. Вставьте соответствующий URL (для лида или продажи)
  5. Установите нужный статус события: lead или sale

🧩 Макросы, которые нужно указать вручную в параметрах кампании:

  • name — имя клиента
  • phone — телефон клиента
  • owner_name — имя байера (owner)
  • domain — домен страницы «спасибо»
  • fbclid — идентификатор клика Facebook ({fbclid})

Как использовать платформу

Внизу вы найдёте архив с платформой. Просто:

  1. Залейте содержимое архива в директорию оффера в Keitaro
  2. Подключите платформу к нужной кампании
  3. Отправляйте S2S-постбеки на файл postback.php, как указано выше
  4. Для открытия интерфейса используйте параметр доступа:
?secret=5555

По итогам прикрепляю саму платформу для Keitaro и Facebook Conversions API (cAPI)

Оцените статью
BoostClicks
Информационные партнёры Инфо партнёры