Meta CAPI: серверные конверсии, которым не страшен iOS
Браузерный пиксель не видит самого ценного в Telegram-воронке: старт бота, вступление в канал, депозит - всё это происходит там, где пикселю просто неоткуда взяться. Добавьте сюда ограничения приватности iOS и потерю cookie на лендинге, и Meta начинает оптимизироваться по обрывку реальных конверсий - аудитории хуже, CPA выше при том же бюджете. Серверный CAPI закрывает этот разрыв: Leadgram отправляет каждую конверсию напрямую со своего бэкенда в Meta, вместе с click ID для точного матчинга.
Создайте CAPI-аккаунт на странице Facebook
- Откройте Facebook в разделе «Рекламные площадки» и нажмите «Добавить аккаунт».
- Название аккаунта - внутренняя метка, по которой вы его узнаете.
- Pixel ID - числовой ID вашего пикселя из Events Manager.
- Токен доступа - сгенерируйте его в Events Manager → ваш пиксель → Settings → Conversions API (это токен системного пользователя). Хранится в зашифрованном виде; в интерфейсе видны только последние 4 символа.
- Test event code (необязательно, но рекомендуем) - возьмите из Events Manager → Test Events. Открывает безопасную тестовую конверсию в один клик.

Сопоставьте кампанию с аккаунтом
На странице Кампании впишите тот же Pixel ID в поле «ID пикселя Meta» кампании. Совпадение должно быть точным - при отправке Leadgram сопоставляет ID пикселя кампании с вашими CAPI-аккаунтами. Форма проверяет это на лету, прямо во время ввода: вы увидите либо «Найден CAPI-аккаунт … - события CAPI будут отправлены», либо предупреждение, что события останутся только браузерными. Баннер после сохранения повторяет вердикт, так что опечатка не пройдёт незамеченной.
Что уходит в Meta
- Имя события - по внутреннему маппингу:
registration→ CompleteRegistration,deposit/ftd/purchase→ Purchase,bot_start/lead→ Lead,channel_join→ Subscribe,join_request→ SubmitApplication,first_dm→ Contact,land→ PageView,click/miniapp_launch→ ViewContent. Заявка и вступление - разные имена намеренно: если вы одобряете заявки вручную, человек сначала даст SubmitApplication, а после одобрения - Subscribe, и Ads Manager покажет две ступени воронки, а не удвоенную одну. Если вы покупаете трафик именно в заявку, оптимизироваться можно прямо по SubmitApplication. Всё, чего в этом списке нет, в Meta не уходит вообще: этоsubscription_renewed,subscription_cancelledиcustom_*. Такое событие не создаёт доставку и не падает с ошибкой - оно попадает в счётчик «Событие не сопоставлено» на карточке Meta (см. ниже). - fbc click ID -
fbclid, пойманный вашей трекинг-ссылкой, пересобирается в параметр Metafbc- её сильнейший сигнал матчинга после хэшированных PII. - event_id - детерминированный ID на каждую конверсию, поэтому ретраи никогда не создают дублей покупок в Ads Manager.
- event_time - реальный момент, когда произошло событие, взятый из времени, когда его записал Leadgram. Meta принимает события с отметкой времени не старше 7 дней, поэтому у доставки старше этого срока метку подрезают до самой ранней отметки, которую Meta ещё берёт (7 дней назад плюс час запаса), вместо того чтобы завернуть с ошибкой всю партию. Подрезают именно к нижней границе, а не к «сейчас»: из допустимых значений это ближайшее к моменту, когда событие правда произошло.
Проверьте до спенда
- В строке аккаунта нажмите «Отправить тест-событие».
- Вставьте или подтвердите код Test Events.
- Откройте Events Manager → Test Events - Purchase появится за секунды.
Тест синтетический: он не трогает оптимизацию рекламы, атрибуцию и ваши списания. Если Meta отклонит его, диалог покажет точную причину от Meta (токен в тексте скрыт) - чаще всего это неверный pixel ID, токен доступа или код Test Events.
Следите за доставкой
Доставка конверсий показывает отправленные, сбойные и мёртвые доставки CAPI за 24 часа и 7 дней, с повторной отправкой в один клик для всего, что застряло. Проверяйте её всякий раз, когда цифры в Ads Manager кажутся заниженными.
Карточка последней ошибки привязана к платформе, а не к пикселю. Если у вас два пикселя Meta, каждый получает свой CAPI-аккаунт, но Доставка конверсий показывает их под одной общей карточкой Meta - проблема с токеном в одном аккаунте может спрятаться за здоровым результатом другого. Чтобы проверить конкретный пиксель, используйте кнопку «Отправить тест-событие» именно у этого аккаунта.
Сбойная доставка не считается мёртвой после первого же промаха. Leadgram повторяет её с экспоненциальной задержкой - до 5 попыток (5, 10, 20, 40 секунд) - и только потом помечает доставку мёртвой, оставляя её на странице, чтобы вы могли переотправить вручную.
Блок «Пропущено (не отправлено)» есть у карточки любой CAPI-площадки, Meta в том числе: он появляется, как только за окно набрался хотя бы один пропуск, и раскладывает пропуски за сегодня и за 7 дней по причине. У Meta работает ровно одна строка - «Событие не сопоставлено»: столько конверсий не ушло, потому что их тип не входит в маппинг выше. Соседние строки «Нет click ID» и «Клик устарел» на карточке Meta всегда нули: причину про click ID сообщают адаптеры Google и TikTok (каждый на своей карточке называет свой идентификатор - gclid и ttclid), а «Клик устарел» - один Google. Meta отправляет событие и без fbclid, поэтому такой ветки пропуска у неё нет вовсе. Пропуск не создаёт строку доставки, поэтому в таблице проблемных доставок его нет и переотправлять там нечего: это счётчик, а не очередь.
Отправить в Meta тип, которого нет в маппинге, можно единственным способом - задать событию имя вручную: тогда гейт не срабатывает, и событие уходит в Meta под этим именем. Ради custom_* это и сделано: что значит ваш custom_3, знаете только вы, поэтому имени по умолчанию у этих восьми слотов нет и не будет. Точечно имя задаёт узел «Событие» в редакторе Флоу, поле «Переопределение имени события» в секции «Facebook CAPI»: оно действует только на конверсии, которые создаёт сам узел, зато все восемь слотов custom_* в списке его типов есть. Шире действует имя события у интеграции Facebook в настройках кампании: оно снимает гейт со ВСЕХ событий этой кампании разом, включая click и land, и все они уходят в Meta под одним и тем же именем - вся воронка кампании схлопывается в Ads Manager в одну строку. Обоих событий подписки в списке типов узла нет, так что до них дотягивается только этот второй, широкий способ. Имя, заданное любым из двух, перебивает маппинг выше - в том числе для типов, у которых маппинг есть. Через API событий имя не передать вовсе: платформа вырезает это поле из payload.
Частые грабли
- Pixel ID в кампании отличается от аккаунта на одну цифру - события молча остаются браузерными. Живой индикатор и баннер после сохранения - ваша страховка, читайте их.
- Токен доступа протух или выдан не с теми правами - доставки падают с OAuth-ошибкой в Доставке конверсий. Перегенерируйте токен в Events Manager, затем нажмите «Редактировать» у аккаунта: оставьте поле токена пустым, чтобы сохранить текущий, или вставьте новое значение, чтобы его сменить.
- В кликах нет
fbclid- сделайте трекинг-ссылку кампании прямым назначением объявления, тогда Meta добавитfbclidсама. Если в цепочке есть ещё трекеры, пробрасывайте параметр через них. - Кнопка теста отказывается срабатывать - вы не указали код Test Events. Это сделано намеренно: событие без кода Meta засчитала бы как настоящую конверсию.
- Отставание старше 7 дней не отклоняется полностью - Leadgram подрезает метку времени вместо того, чтобы выдать ошибку, - но у подрезанной конверсии всё равно меньше веса в атрибуции, чем у свежей, так что копить доставки ради этого не стоит.