Настройка Conversions API (Server-Side API) для Facebook Pixel

UPD от 2021-02-10: Начиная с 15 февраля 2021 года все события, отправленные через Conversion API, должны содержать новый обязательный параметр action_source. А все события из сайта (отправляемые через Conversion API, например через GTM Server-side) дополнительно должны содержать параметры client_user_agent и event_source_url.

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

 Facebook Pixel позволяет собирать аудиторию ремаркетинга по определенным событиям или автоматически оптимизировать по ним показ Facebook рекламы. На сайте это можно сделать через Javascript код, в мобильных приложениях – через Facebook SDK. Но как отслеживать события, которые происходят за пределами сайта? Это можно сделать с помощью Conversions API (Server-side API) и в этой статье я расскажу, как его настроить.



Facebook Conversions API (Server-side API) позволяет отслеживать (и использовать в рекламе или рекламном кабинете) события, так же как бы это было бы сделано на сайте через Facebook Pixel. Для начала, я хотел бы привести пример задач, которые можно решить с помощью этого метода:

  • Отслеживания факта совершения телефонного звонка в отдел-продаж.
  • Отправка из CRM системы информации об этапах сделки (в том числе продажах).
  • Отправка информации о продлении подписки, даже если пользователь не заходит сайт.
  • Сбор аудитории ремаркетинга только по группам пользователей, которые могут быть определены спустя несколько часов/дней после посещения сайта (то есть после расчета различных прогнозов: вероятности совершения конверсии, LTV и тд).
  • Отслеживание всех тех событий, которые отслеживаются у вас через Measurement Protocol в Google Analytics.
Я кратко опишу, как этот процесс выглядит с технической точки зрения:
  • Пользователь заходит на сайт.
  • На сайте должен быть установлен Facebook Pixel, который записывает в cookies (1st party) информацию о пользователе.
  • Ваш сервер должен сохранить эту пользовательскую информацию так же, как у вас сохраняется ip адрес пользователя, его user-agent, google analytics client_id или другие параметры, по которым ваш сервер отличает пользователей друг от друга.
  • Когда непосредственно происходит событие от этого пользователя (он уже может не быть на сайте) — ваш сервер должен сделать запрос на сервер Facebook, в котором будет указана информация о событии и об этом пользователе (значения, ранее сохраненные из его cookie). 
Для того, чтобы вы смогли настроить у себя Facebook Conversions API (Server-Side API) вам необходимо:
  • Иметь Facebook Business Manager (без него использовать Conversions API (Server-side API) нельзя)
  • Установить своем сайте Facebook Pixel, который связан с вашим Business Manager
  • Иметь Facebook App (приложение для работы с Facebook API), которое связано с вашим Business Manager
А теперь приступим непосредственно к настройке: 

1. Перейдите на вкладку Event Manager в вашем Business Manager, нажмите на кнопку «Add New Data Source» и выберите пункт «Conversions API (Server-Side API)»:



2. Ознакомьтесь с возможностями сервиса на приветственном окне, перейдите к настройкам, выберите свой пиксель (установленный у вас на сайте) и перейдите дальше по кнопке «Next»:



3. На следующем этапе вам нужно выбрать приложение для работы с API. Если у вас его нет — можете сразу же его создать, нажав кнопку «Create a New App». В открывшемся окне заполните поля «App Name», «Contact Email» (указывайте свой email) и в качестве «App Mode» выберите пункт «Development»:

После того, как приложение создалось, выберите его и нажмите «Next», чтобы перейти на следующий шаг.

4. На этом этапе вам надо выбрать системный аккаунт, с помощью которого будут отправляться запросы на сервер Facebook. Если у вас его нет — придуймате ему название, введите его в поле «Create New System User» и нажмите кнопку «Create».


После того, как системный аккаунт будет создан — выберите его и нажмите кнопку «Next».

5. На этом этапе нужно сгенерировать токен доступа, который будет указан в запросах API. Для этого нажмите кнопку «Generate Access Token»:


После того, как токен будет сгенерирован — скопируйте его, нажав на область с этим токеном. Также, обязательно сохраните его, например, создав текстовый файл с этим токеном. После того, как вы где-то сохранили токен — нажмите кнопку «Next».



6. На этом шаге вы можете получить инструкции по внедрению Conversions API (Server-Side API). По кнопке «Send Instructions» вы можете сразу их отправить себе и разработчику, который будет это внедрять или можете прочитать инструкции здесь. Для завершения нажмите «Done».



7. Подготовка к отправке данных на сервер Facebook закончена. Осталось перейти на вкладку Settings на странице вашего Facebook Pixel и убедиться, что в нем включена опция «First-party Cookies»: 




Теперь все готово для того, чтобы отправлять информацию о событиях через Conversions API (Server-Side API).  Ниже приведен пример кода на Python, который это делает, а именно — отправляет событие Purchase в размере $1:


В этом коде есть две глобальных переменных:

  • access_token — здесь нужно указать токен системного аккаунта, который вы получили на 5 шаге.
  • pixel_id — ID вашего Facebook Pixel, в которой отправляется информация о событии. Его можно взять прямо в коде вашего пикселя — fbq('init', '{pixel_id}') и найти на странице Event Manager.
Ниже есть класс UserData, внутри которого передаются все пользовательские параметры, которые известны вам на момент совершения события. Чем больше параметров вы отправите — тем больше вероятность, что Facebook успешно определит пользователя, который совершил это событие. Полный список параметров, который можно передавать находится здесь. Отдельного внимания заслуживают параметры fbp и fbc, которые предварительно должны быть получения из cookie пользователя, совершающего событие. 

Класс CustomData принимает второстепенную информацию о событии, которое отправляется на сервер. Например, value — сумму покупки и currency — валюту покупки. Полный список находится здесь.

Класс Event принимает информацию о самом событии: event_name — название события (может быть стандартным или собственным), event_time — UNIX-время совершения события. В этом примере отправляется текущее время, но можно отправлять прошедшее время для событий, которые произошли в прошлом, но не позже, чем 7 дней назад. Список параметров для этого класса доступны здесь.

В этом примере отправляется 1 событие на 1 запрос. Если вы отправляете события не в режиме стримминга — вы можете отправлять до 1000 событий на 1 запрос (через массив events). Подробнее о лимитах API здесь.

Чтобы проверить корректность работы Conversions API (Server-Side API) — перейдите на страницу Test Events своего пикселя, дальше выберите вкладку Server и скопируйте приведенный ниже код:



Если в классе EventRequest передать этот код в качестве параметра test_event_code — то после выполнения кода вы сможете увидеть, как Facebook получил от вас информацию о событии. Это выглядит так:

В примере выше этот параметр закомментирован, но если вы захотите проверить работоспособность кода перед внедрением — уберите # в начале этой строки.

В качестве бонуса, хотел бы поделиться гайдом от Facebook по отслеживанию событий для Subscribtion модели монетизации. Такую модель монетизации мы в MacPaw используем в наших продуктах, например в Setapp — где можно оформить одну подписку сразу на все программы для Mac. 

Комментарии

  1. Добрый день.
    Возможно ли таким образом передавать расходы из рекламной кампании в google analytics?

    ОтветитьУдалить
    Ответы
    1. Нет, для этой задачи у меня есть другая статья: https://iosiuk.blogspot.com/2019/11/facebook-ads-cost-google-analytics.html

      Удалить
  2. Это рабочее решение для алгоритма оптимизации Facebook? Другими словами, обучают ли алгоритм оптимизации данные, поступающие из CRM через Server-Side API?

    ОтветитьУдалить
    Ответы
    1. Да, вот здесь написано: ...server-side events are used in measurement, reporting, and optimization in the same way as browser pixel events.

      https://developers.facebook.com/docs/marketing-api/server-side-api

      Удалить
  3. И вопрос вдогонку: работает ли это решение для рекламы «Генерация лидов»? Т.е. без сайта и Facebook Pixel.

    ОтветитьУдалить
    Ответы
    1. Думаю, что нет. Данное решение основано на Facebook Pixel.

      Удалить
  4. Как сдружить это с трекером(TDS Keitaro к примеру)?

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

      Удалить
  5. Is there a way to track the audience of competitor?
    I don't mind purchasing Facebook pixel app if there's a way.

    ОтветитьУдалить
  6. привет!) можно ли этот инструмент использовать для приложений?

    ОтветитьУдалить
    Ответы
    1. У меня есть идеи, как это использовать для трекинга рекламы без доступа к идентификаторам (типа IDFA), но я еще не успел протестировать ее работоспособность.

      Удалить
  7. Привет, сколько стоит внедрить такую историю под ключ. Задача из амосрм передавать данные о изменении статуса воронки в фб

    ОтветитьУдалить
    Ответы
    1. Привет, не могу оценить, так как не занимаюсь такими услугами. Думаю для реализации достаточно выделить 5-10 часов разработчика и дать ему ссылку на эту статью :)

      Удалить
  8. Привет! Фейсбук ругаете при передаче событий:
    ПРОБЛЕМА
    Ваш сервер отправляет для событий Registration метки времени, которые слишком далеки от фактической даты события, поэтому мы не можем получить или использовать ее для атрибуции или оптимизации рекламы.
    Это может быть из-за разного часового пояса у фб и сервера, если да, то как правильно передавать параметр event time, что бы фейсбук не ругался?

    ОтветитьУдалить
    Ответы
    1. Привет! Ответ здесь: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/server-event#event-time

      Удалить
  9. Было бы здорово, если бы еще была ссылка на статью с подробными инструкциями для разработчиков :)

    ОтветитьУдалить
    Ответы
    1. Подробная инструкция для разработчиков — это документация + примеры кода. В этой статье есть ссылки на все это ;)

      Удалить
  10. полезная статья, спасибо
    а у вас есть опыт использования conversions api без сайта?

    у меня нет сайта, и конверсия происходит в чатботе.
    с одной стороны вижу в документации, что Conversions API предназначен "to send web events from their servers directly to Facebook", с другой стороны, в action source есть подходящее мне значение - chat. то есть все таки не-веб можно тоже?

    Я уже отправляю события скриптом с доступными мне данными (имя, мейл, телефон, естественно нет никаких кук, юзер-агентов), и даже на 20 ивентов - 1 сматчился судя по ads reports

    Сейчас фб требует верификацию домена (которого нет) + вижу у вас в статье процесс технический описан исходя из того, что сайт есть
    ФБ очень расплывчато отвечает на тему, правильно ли я использую. Если вы сталкивались с кейсами, похожими на мой, на практике, буду рада знать детали

    ОтветитьУдалить
    Ответы
    1. Спасибо за фидбек!

      Суть в том, что для отправки запросов через Conversion API нужно отправлять fbc и fbp параметры, которые сейчас можно получить только в web.

      В action_source можно указать значение chat для тех случаев, когда пользователь перешел в чат из вашего сайта и вам удалось сопоставить ID пользователя в чат-боте и его данные с сайта (fbc, fbp, user-agent, IP). К слову, в Telegram такую связь можно обеспечить через get-параметр start.

      Удалить
    2. спасибо! поизучаю детальней возможности Telegram

      Удалить
  11. Не могли бы вы предоставить сценарий, который у вас есть?

    ОтветитьУдалить
  12. Статья не актуальна( Менюхи поменялись. Второй день бьюсь - этапа с выбором/созданием приложения нет. Делаю всё по инструкции самого ФБ - API access deactivated. To reactivate, go to the app dashboard

    ОтветитьУдалить
    Ответы
    1. К сожалению, нет времени ее актуализировать. В любом случае у Facebook есть официальная документация: https://developers.facebook.com/docs/marketing-api/conversions-api/get-started

      Удалить
    2. вот я и пытаюсь по инструкции самого фб делать. Как я понял сейчас пропускаются пункты связанные с озданием и настройкой приложения и систем юзера, он автоматом создает некий Conversions API Application и системного юзера, но вот запросики не проходят)

      Удалить
    3. Подскажите, пожалуйста, нашли решение?

      Удалить
    4. Перейдите по ссылку на оф. документацию https://developers.facebook.com/docs/marketing-api/conversions-api/using-the-api

      Листайте до видео под пунктом Video Walkthrough и там свежее понятное объяснение.

      Автору спасибо за статью.

      Удалить
    5. Не совсем понятно как настроить дедупликацию

      Удалить
    6. Что именно не понятно? Вам надо хранить одинаковое ID события во всех местах, где оно может быть отправлено и передавать его как eventID (для Facebook Pixel) и как event_id (для Conversion API).

      Удалить
  13. Ошибка следующая:

    Очень много ложных событий (покупок) вместо 20 покупок в фб - 2 покупки по утм или в срм-ке

    Вы отправляете одинаковый ID события сразу для
    нескольких своих событий (разные события). ID события — это уникальный
    идентификатор, который используется для дедупликации одинаковых событий,
    полученных от пикселя и API Conversions, чтобы они не были засчитаны
    дважды. У каждого из ваших событий должен быть свой уникальный ID, чтобы
    они точно подсчитывались на Facebook. Дупликация событий может вызвать проблемы с их измерением и атрибуцией рекламных кампаний.

    Писал в тех поддержку сказали что знают об этой проблеме. но я вот думаю что может разраб не правильно сделал апи и пиксель. вы как думаете?

    ОтветитьУдалить
  14. Думаю, ошибка на вашей стороне отправки событий. Проверьте свои логи и убедитесь, что вы получаете правильные ответы от сервера FB, а так же проверьте, чтобы eventID/event_id были одинаковыми только для тех событий, для которых есть риск повторной отправки данных с front-end и/или back-end.

    ОтветитьУдалить
  15. Этот комментарий был удален администратором блога.

    ОтветитьУдалить
  16. Можете подсказать, можно ли использовать механизм conversion api для событий с мобильного приложения? А то тех поддержка все мутно отвечает вроде как и можно а как конкретно не говорят. Или ссылку на статью где бы про это было написано.

    ОтветитьУдалить
    Ответы
    1. Суть в том, что Conversion API работает на user-level, а например Apple делает все, чтобы собирать данные на этом уровне было не возможно. Потому можно ли это использовать в мобильном приложении — в теории да, на практике — есть много блокеров и рисков в реализации.

      Удалить
  17. Дмитрий, добрый день! Спасибо за статью!

    Вы год назад упоминали, что у Вас есть идея использования conversion api для мобильных приложений без IDFA.

    Интересно получилось ли реализовать?

    ОтветитьУдалить
    Ответы
    1. Добрый день, да, получилось, но потом мы увидели такую информацию в Apple Policy и отказались от реализации:

      Per the Apple Developer Program License Agreement, you may not derive data from a device for the purpose of uniquely identifying it. Examples of user or device data include, but are not limited to: properties of a user’s web browser and its configuration, the user’s device and its configuration, the user’s location, or the user’s network connection. Apps that are found to be engaging in this practice, or that reference SDKs (including but not limited to Ad Networks, Attribution services and Analytics) that are, may be rejected from the App Store.

      Удалить
    2. Пробовали ли вы собирать данные через веб лендинги и метчить пользователя после конверсий в мобильных приложений?

      Если да, скажите пожалуйста, как вы фингерпринтили пользователей? Использовали ли вы Appsflyer тулзы для этого?

      Спасибо!

      Удалить
  18. Этот комментарий был удален автором.

    ОтветитьУдалить
  19. Этот комментарий был удален администратором блога.

    ОтветитьУдалить
  20. Всем привет! Ищу специалиста который сможет настроить серверную аналитику google и Facebook Conversions API. Как оказывается не легко найти такого человека в СНГ) Моя страница фб https://www.facebook.com/profile.php?id=100002373113964

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

Как стримить Google Analytics данные в Facebook Analytics через Pixel

Как незаметно поломать систему аналитики для сайта на базе SPA