Перейти к содержанию

Конверсии и постбеки

Конверсия - это целевое действие пользователя (продажа, лид, регистрация, депозит), зафиксированное на клике. TrafMate принимает конверсии входящим постбеком, хранит их и рассылает исходящие постбеки (S2S) источникам трафика и партнёрским сетям.

Приём конверсии (входящий постбек)

Партнёрская сеть или рекламодатель уведомляет трекер о конверсии GET-запросом:

https://<домен>/<ключ>/postback?subid={click_id}&status=sale&payout=10

<ключ> - ключ постбека, секретный сегмент адреса. Он создаётся автоматически при установке, у каждой установки свой, и смотреть его нужно в Настройки -> Ключ постбека (там же готовый адрес для партнёрки и кнопка «Сгенерировать»). Без ключа адрес отбивается кодом 403: subid не секрет - он уходит в партнёрку и светится в её логах, поэтому конверсию по открытому адресу мог бы прислать кто угодно.

Переезжающим с Keitaro: впишите в это поле старый ключ, и партнёрки продолжат слать по прежнему адресу без правок на их стороне.

Домен подойдёт любой из ваших доменов кампаний. Если панель открыта по IP, партнёрке всё равно нужен домен с сертификатом.

Параметр subid резолвится в клик: сначала по сабке клика, затем по external_id.

Настраиваемые имена параметров (алиасы)

Имена входящих параметров можно менять под формат вашей сети - Настройки -> Глобальные алиасы параметров. По умолчанию принимаются:

Назначение Имена параметров
Клик (subid) subid, sub_id, click_id, trackID, subaccount, s, external_id
Статус status, type, goal
Выплата payout, revenue, profit, sum
Транзакция transaction_id, txid, trans_id, tid
Валюта выплаты currency, cur, payout_currency

Первые четыре строки редактируются в панели, список валютных имён пока фиксированный.

Что отвечает трекер

Ответ читается партнёркой, поэтому он говорящий:

Ответ Что произошло
ok конверсия записана
ok (duplicate) точный повтор, второй раз не записываем
ok (same status) статус не изменился
ok (transition not allowed) переход статуса запрещён правилами
ok (deferred) приняли и отложили (см. «Надёжность приёма»)
400 no subid в запросе нет идентификатора клика
403 incorrect postback code неверный или отсутствующий ключ постбека
404 click not found клика с такой сабкой нет (частая причина - сеть шлёт свой идентификатор вместо нашей сабки)

Статусы конверсий

Шесть типов. Нумерация совпадает с Keitaro - это важно при переезде со статистикой: при чужой нумерации привезённые депозиты стали бы мусором.

Код Статус Что означает
1 Sale Продажа
2 Lead Лид
3 Rejected Отклонено
4 Trash Мусор
5 Registration Регистрация
6 Deposit Депозит

Входящее значение нормализуется по алиасам:

  • Sale - sale, approved, 1, done, confirm, confirmed, paid, payed, rebill, signup, awarded, sell, sms, birj, redeem, cgbk, insf, test_sale, purchase, ftd
  • Lead - lead
  • Rejected - rejected, reject, failure, cancel, cancelled, canceled, refund, decline, declined, invalid
  • Registration - reg, registration, register
  • Deposit - dep, deposit, redeposit
  • Trash - trash, spam

Неизвестный статус записывается лидом. Обратите внимание: rebill нормализуется в Sale, поэтому правило постбека, повешенное на «rebill», не сработает - вешайте его на Sale.

Одна конверсия на клик - и когда их больше

По умолчанию на клик хранится одна конверсия.

  • Повторный постбек с другим статусом обновляет её, а не создаёт вторую.
  • Переход разрешён любой: побеждает последний постбек.
  • Дубль того же статуса игнорируется.

Технически смена статуса - это пара строк в ClickHouse (отмена прежней -1 и новая +1 с тем же идентификатором конверсии), поэтому в отчётах она не двоится.

Повторные конверсии: ребиллы, вторые депозиты, апселлы

Если сеть присылает по тому же клику постбек с новым tid (идентификатором транзакции), это отдельная конверсия, а не обновление прежней: прежняя остаётся и продолжает считаться. Так работают ребиллы, вторые депозиты и апселлы.

Условие одно: сеть должна слать уникальный tid на каждую транзакцию. Постбек без tid повтором не считается - иначе каждый ретрай сети задваивал бы доход.

Пара «тот же tid + другой статус» - это по-прежнему обновление статуса (сеть шлёт lead, потом sale по той же транзакции), а не новая конверсия.

Сколько денег записывается

Сумму разбирает трекер, а не strconv: понимаются 10.50, 10,50, 1 234.56, 1,234.56, $10, 10 USD, +10, -5. Неразобранная сумма попадает в лог сервиса - молча нулём она больше не становится.

Дальше работают настройки оффера (карточка оффера, поля «Выплата», «Тип выплаты», «Валюта», «Авто-выплата (из постбека)», «Разрешить апселлы»):

Ситуация Что запишется
«Авто-выплата» выключена всегда фиксированная выплата оффера, что бы сеть ни прислала
«Авто-выплата» включена, сумма пришла сумма из постбека
«Авто-выплата» включена, суммы нет / payout=0 / сумма не разобрана фиксированная выплата оффера
Тип выплаты CPC фиксированная выплата в конверсию не идёт (она уже начислена за клик), остаётся только явная сумма от сети
Повторная конверсия, «Разрешить апселлы» выключено фиксированная выплата не начисляется; явно присланную сумму это не отменяет

Валюта: у суммы из постбека - валюта из постбека (иначе валюта оффера), у фиксированной выплаты - всегда валюта оффера. Приведение к валюте трекера в отчётах идёт по курсам из настроек (см. «Настройки» и «Отчёты»).

Оффера у клика может не быть вовсе (поток ведёт прямо на адрес) - тогда доход всегда берётся из постбека.

Дедупликация и надёжность приёма

  • Ключ дедупа - tid + статус, а при отсутствии tid - клик + статус.
  • Окно дедупликации - 30 дней, снимок конверсии живёт 90 дней (столько же, сколько данные клика для постбека).
  • Конверсия, снимок и ключ дедупа пишутся одной транзакцией: половинчатой записи, из-за которой оплаченная продажа исчезала из статистики, больше нет.

Если Redis временно недоступен, трекер не отвечает «клик не найден» (по такому ответу сеть постбек не повторяет и конверсия теряется навсегда). Запрос ложится во внутренний буфер, партнёрке уходит ok (deferred), и трекер сам доигрывает отложенные постбеки каждые 15 секунд в течение недели. Если буфер недоступен - отдаётся 503, временный отказ, по которому сеть повторит сама.

Исходящие постбеки (S2S)

При появлении или изменении конверсии рассылаются исходящие постбеки:

  1. Постбек источника трафика - URL, заданный в карточке источника. Отправляется дополнительно к правилам кампании (его текст показан внизу вкладки «S2S postbacks»).
  2. Правила кампании - вкладка «S2S postbacks» в карточке кампании. У каждого правила свой URL, метод (GET/POST) и набор статусов-триггеров чекбоксами (Sale, Lead, Rejected, Trash, Registration, Deposit). До 20 правил на кампанию.

Для POST параметры остаются в строке запроса и дополнительно дублируются в теле form-urlencoded - партнёрские приёмники читают их и оттуда, и оттуда.

Макросы URL-шаблона

Макросов около шестидесяти, имена совпадают с Keitaro - скопированный оттуда URL работает без переписывания. Наши прежние имена остались синонимами.

Клик и конверсия

{subid} = {sub_id} = {click_id}, {external_id}, {status}, {tid} = {transaction_id}, {revenue} = {payout} = {sum} = {conversion_revenue}, {currency} = {revenue_currency}, {cost} = {conversion_cost}, {profit} = {conversion_profit} (доход минус расход), {date} (время клика), {conversion_time}.

Сущности

{campaign_id} = {keitaro_campaign}, {campaign_name} = {keitaro_campaign_name}, {campaign_alias}, {ts_id} = {source_id}, {traffic_source_name}, {stream_id}, {landing_id}, {offer_id}, {offer_name}, {affiliate_network_name}, {parent_campaign_id}.

Посетитель

{country} = {country_code} = {country_name}, {region} = {region_name}, {city}, {ip}, {isp}, {operator} = {carrier}, {connection_type}, {language}, {os}, {os_version}, {browser}, {browser_version}, {device_type}, {device_model}, {device_brand}, {user_agent} = {ua} = {useragent}, {x_requested_with}, {referrer} = {referer}, {search_engine} = {se}, {keyword}, {source}, {ad_campaign_id}, {creative_id}, {is_bot}, {is_using_proxy}, {current_domain}, {destination}.

Метки

{sub_id_1} ... {sub_id_30}, {extra_param_1} ... {extra_param_10}.

Параметрические формы

Форма Что делает
{status:lead=0 sale=1 rejected=-1} отдаёт сети её код вместо нашего слова. Разделитель - пробел, запятая или точка с запятой. Статуса нет в списке - уйдёт пустая строка
{date:Y-m-d H:i:s} время клика в заданном формате (буквы формата PHP: Y y m n d j H G i s U)
{date:Y-m-d H:i:s,Europe/Kyiv} то же в указанном часовом поясе (без пояса - UTC)
{conversion_time:...} то же для времени конверсии
{date} / {date:U} unix-время
{random:1,100} случайное число в диапазоне
{sample:a,b,c} одно из перечисленных значений

Экранирование. {макрос} подставляется закодированным для URL - это защита от значения вида ...&status=sale, которым внешний параметр дописывал в наш запрос к сети чужие поля. Если в макросе лежит готовый кусок адреса и кодировать его не нужно, используйте форму с подчёркиванием: {_макрос}.

Неизвестный макрос остаётся в адресе как есть - это видимый след опечатки, а не тихая пустая строка.

Чего ожидать не стоит. {destination}, {parent_campaign_id} и {device_brand} сейчас всегда пустые. {user_agent} и {referrer} заполняются только у кликов, записанных после того, как соответствующий макрос появился в шаблоне постбека, и обрезаются (256 и 512 символов) - это плата за то, чтобы данные кликов не съели память сервера.

Доставка

  • До 3 попыток на постбек.
  • Успехом считается только код 2xx/3xx. Раньше успехом был любой ответ ниже 500, и постбек с опечаткой в адресе неделями «работал», получая 404 от приёмника сети.
  • Повторяются только те отказы, у которых есть шанс пройти позже: обрыв связи, 5xx и 429. Прочие 4xx - отказ по существу, повтор прекращается сразу.
  • Таймаут запроса - настройка Таймаут S2S-постбека (по умолчанию 8 секунд).

Лог входящих постбеков

Раздел Отчёты -> Входящие постбеки. По строке на каждый постбек, который пришёл к нам от партнёрской сети. Это ответ на самую частую жалобу: «партнёрка говорит, что слала конверсию, а её нет».

Ключевое: здесь видны и отклонённые запросы. Именно они обычно и есть ответ - запрос был, но мы его не приняли, и по колонке «Итог» сразу видно почему:

Итог Что это значит и что делать
Записано конверсия создана, ищите её в логе конверсий
Повтор точно такой же постбек уже приходил, второй раз не пишем
Тот же статус конверсия уже в этом статусе
Переход запрещён правила переходов не пускают такую смену статуса
Отложено приняли, клик ещё не долетел до хранилища, применим позже
Неверный код сеть шлёт на адрес без кода постбека или с чужим - выдайте ей правильный адрес
Клик не найден сеть шлёт свой идентификатор вместо нашей сабки. Самая частая причина жалобы
Нет сабки в запросе нет параметра с сабкой вообще

Фильтры: период, сабка (подстрока - можно вбить то, что назвала сеть) и «Только отказы». Начинать разбор проще всего с «только отказов» за нужный день.

В колонке «Запрос» - строка запроса как её прислала сеть, без значений, похожих на ключи доступа (key, token, signature и подобные заменены на hidden): ключи партнёрки не должны оседать в таблице, которую читает любой админ и которая уезжает в бэкапе. Наведите курсор на строку, чтобы увидеть метод, путь и IP отправителя.

Записей нет вовсе, хотя сеть настаивает, что слала? Значит, запрос до трекера не дошёл: неверный домен, запрос ушёл на старый сервер, или его срезал файрвол на стороне сети.

Лог хранится 30 дней. Ограничение доступа по группам работает как для отчётов, но у отказов с ненайденным кликом кампании нет вовсе - такие строки видны админу.

Лог отправленных постбеков

Раздел Отчёты -> Лог постбеков. По строке на каждую исходящую отправку - и S2S, и вебхуки интеграций. Именно сюда нужно смотреть по жалобе «сеть не получила конверсию».

Колонки: время, кампания, тип, статус, адрес, ответ, попыток, время в мс, Sub ID. Итог показан плашкой: код ответа, сбой - ответа не было вовсе (таймаут, DNS, обрыв).

Фильтры над таблицей: кампания, статус, Sub ID (точное совпадение), «Только неудачные» и период. Sub ID здесь главный: жалоба баера почти всегда приходит именно с сабкой («по subid X денег нет»).

Быстрее всего попадать сюда из Лога конверсий: клик по конверсии -> кнопка «Постбеки конверсии» в карточке. Она открывает этот раздел, урезанный до отправок по одной этой конверсии; снять сужение можно крестиком на метке в тулбаре.

Клик по строке открывает карточку отправки - ради неё экран и сделан:

  • Адрес после подстановки макросов - видно, что именно ушло в сеть;
  • тело ответа (первый килобайт) - приёмники сетей пишут причину отказа именно туда;
  • ошибка транспорта, число попыток, длительность;
  • привязка: кампания, статус, Sub ID, tid, Click ID, Conversion ID, источник, оффер.

Лог хранится 30 дней. Строк нет вовсе, хотя постбеки настроены, - проверьте, что обновлён воркер.

Лог конверсий

Раздел Отчёты -> Лог конверсий: Sub ID, кампания, источник, External ID, время конверсии, статус, доход (в валюте конверсии). Клик по строке открывает детали.

Показываются только «живые» конверсии - записи, отменённые сменой статуса, отсеиваются.

Если сеть присылает свои слова статусов

Трекер понимает распространённые слова: sale, approved, paid, lead, refund, rejected, deposit и десятки синонимов. Но каждая сеть придумывает свои - verified, qualified, payout_done.

Незнакомое слово записывается лидом. Конверсия не теряется (за неё уже заплатили), но продажа тихо оказывается лидом: Approve % и доход по типам врут, а заметить это можно только сверкой с кабинетом сети.

Лечится в Настройках: шесть полей вида «Слова сети для «Продажа»». Перечислите через запятую слова, которые эта сеть присылает.

Слова сети для «Продажа»:      verified, payout_done
Слова сети для «Отклонена»:    charged_off

Два уточнения:

  • это слова самих статусов, а не имена параметров. Соседнее поле «Постбек: статус» задаёт, в каком параметре искать значение (status, type, goal), а эти - как понимать найденное;
  • ваши слова сильнее встроенных. Так и задумано: у одной сети confirmed - это продажа, у другой - подтверждённая регистрация.

Импорт конверсий файлом понимает те же слова: одна и та же конверсия, привезённая файлом и пришедшая постбеком, получит один тип.

Импорт конверсий файлом

Раздел Обслуживание -> Импорт конверсий (доступен администратору). Нужен в двух случаях: при переезде с другого трекера, когда клики перенесены, а конверсии за тот же период есть только выгрузкой; и когда у партнёрской сети отвалились постбеки за сутки - без импорта этот день остаётся без дохода навсегда.

Выберите файл и нажмите «Загрузить». Панель показывает ход передачи, а после - отчёт.

Формат файла

Текстовый файл, по строке на конверсию:

subid,payout,tid,status,currency,datetime
a1b2c3d4e5,12.50,TX-1001,sale,USD,2026-07-31 14:20:00
f6a7b8c9d0,,TX-1002,lead,,
a1b2c3d4e5,40.00,TX-1003,deposit,USD,2026-08-01 09:05:00
Столбец Обязателен Что в нём
subid да Сабка клика: sub_id, click_id или external_id - как её называет ваша сеть
payout нет Сумма выплаты. Пусто - берётся выплата из настроек оффера
tid нет Идентификатор транзакции сети
status да sale, lead, deposit, registration, rejected, trash
currency нет Валюта суммы тремя латинскими буквами: USD, EUR, UAH
datetime нет Время конверсии. Пусто - запишется текущим временем

Первые четыре столбца - формат Keitaro слово в слово, поэтому его выгрузка загружается как есть. currency и datetime - наши добавки: без валюты суммы разных офферов складываются как голые числа, а без времени вся привезённая история ложится сегодняшним днём, и вчерашние отчёты остаются пустыми.

Подробности разбора:

  • Разделитель определяется сам: запятая, точка с запятой или табуляция. Excel в русской локали сохраняет CSV с точкой с запятой - такой файл тоже подойдёт.
  • Строка заголовка необязательна. Есть - столбцы читаются по именам, и порядок значения не имеет; нет - читаются по порядку из таблицы выше. В заголовке понимаются и синонимы: sub_id, click_id, external_id; revenue, sum, amount; transaction_id, txid; sale_status; cur, payout_currency; date, timestamp, created_at. Если заголовок распознан, но в нём нет subid и status - файл отклоняется целиком.
  • Статусы принимаются вместе с синонимами сетей: approved, paid, purchase, ftd -> sale; refund, cancel, declined, invalid -> rejected; reg, register -> registration; dep, redeposit -> deposit; spam -> trash. Незнакомое слово - ошибка строки, а не «пусть будет лид»: опечатка в столбце статуса должна вернуться вам строкой отчёта, а не расползтись сотней лидов.
  • Время читается в форматах 2026-07-31 14:20:00, 2026-07-31T14:20:00, 31.07.2026 14:20, 2026-07-31, unix-секундах и миллисекундах. Формат без часового пояса читается в поясе трекера. Американского 03/04/2026 нет намеренно: это либо 3 апреля, либо 4 марта, и угадывать дату конверсии трекер не будет.
  • Пустые строки и строки, начинающиеся с #, пропускаются. Лишние столбцы справа игнорируются - хвост выгрузки мешать не будет. Кавычки Excel ("12,50") понимаются.
  • Файл должен быть в UTF-8. UTF-16 (обычное «Сохранить как» из Блокнота) отклоняется целиком с явной причиной.
  • Предел одного файла написан на самой форме, рядом с выбором файла - панель спрашивает его у движка, который этот предел и применяет (по умолчанию 8 МБ и 100 тыс. строк). Файл больше предела панель отклоняет сразу, не заливая его: ждать загрузку сотни мегабайт ради отказа в конце незачем. Большую выгрузку разделите на части - они применяются независимо, и повторы между частями движок всё равно отсеет по transaction_id.
  • Предел возраста конверсии равен сроку хранения статистики («Обслуживание -> Очистка статистики», от 1 до 3650 дней). Подняли срок до года - импорт примет годовалые конверсии; урезали до месяца - всё старше месяца будет отклонено с причиной. Так и должно быть: строку старше срока ClickHouse удалил бы ближайшим слиянием, и «загружено 40 000 конверсий» назавтра превратилось бы в пустой отчёт.

Конверсии старше срока хранения загрузить нельзя

Строка с датой старше срока хранения статистики отклоняется с причиной «старше срока хранения статистики». Это не ограничение импорта: у таблиц статистики стоит TTL, и запись с более старой датой ClickHouse удалит ближайшим слиянием. Принять её значило бы показать «загружено 40 000 конверсий», которых назавтра не будет ни одной.

Предел жёсткий - 256 дней, столько же живут таблицы кликов и конверсий. Настройка Обслуживание -> Очистка статистики его не двигает: если вы задали там срок короче, экран импорта покажет ваше число (оно ближе к правде - строка всё равно уйдёт при вашей чистке), но отклонять движок будет по 256 дням. Задать срок длиннее и привезти историю за два года нельзя.

Строка без столбца времени записывается текущим моментом и по возрасту не отклоняется никогда.

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

Пределы

  • размер файла - 8 МБ (это примерно 130 тысяч строк выгрузки);
  • число строк - 100 000;
  • длина одного значения - 256 символов;
  • в отчёте перечисляются первые 500 проблемных строк, остальные считаются числом.

Файл больше предела не применяется частично - он не применяется вовсе. Разбейте его на части.

Файл больше 2 МБ разбирается в фоне: панель показывает полоску «разобрано столько-то строк из стольких-то» и ждёт итога. У фоновых импортов поимённо перечисляются первые 100 проблемных строк (у обычных - 500), сводка причин полная в обоих случаях. Закрытая вкладка импорт не отменяет: он идёт на сервере, вернитесь на экран позже.

Одновременно идёт один импорт. Вторая загрузка получит отказ «импорт уже выполняется, дождитесь его окончания».

Что бывает с ошибочными строками

Негодная строка не отменяет файл: она попадает в отчёт с номером строки (тем самым, что видно в редакторе) и причиной по-русски, а остальные строки применяются. Отчёт показывается сразу после загрузки:

  • первой строкой - сводка: сколько строк в файле, сколько принято, обновлено, сколько повторных, пропущенных и отклонено, и доход по валютам (валюты не складываются в одно число - это контрольная цифра для сверки с кабинетом партнёрки);
  • затем сводка причин («клик не найден: 812») - она отвечает на вопрос «почему принято меньше, чем я ждал»;
  • затем список проблемных строк: номер, сабка, статус, исход, причина.

Исходы строки:

Исход Что произошло
Создана Заведена новая конверсия
Статус обновлён У существующей конверсии сменился статус
Повторная конверсия Новый tid по тому же клику: ребилл, второй депозит, апселл
Уже загружали Точный повтор - такая конверсия уже есть
Статус тот же Менять нечего
Переход статуса запрещён Правила переходов те же, что у входящего постбека (см. выше)
Клик не найден По такой сабке клика нет: клик не переносился, сабка не та или клик уже вне срока хранения
Строка не разобрана Нет сабки или статуса, незнакомый статус, неразобранная сумма или дата, битая кодировка

Что ещё важно знать

  • Повторная загрузка того же файла ничего не задваивает: файл узнаётся по отпечатку, и в отчёте появится пометка «этот файл уже загружали, изменений нет» с цифрами прошлой загрузки. Нужно применить его заново (например, клики доехали позже и строки, отбитые с «клик не найден», теперь найдутся) - отметьте галочку «Загрузить повторно, даже если этот файл уже применяли». Доход при этом не задвоится: уже записанные конверсии отсекает дедупликация, а не отпечаток файла.
  • Импорт, оборванный по времени или перезапуском, применён частично - отчёт покажет, сколько строк успело записаться. Загрузите файл повторно: применённые строки будут пропущены как уже загруженные.
  • Исходящие постбеки по импортированным конверсиям не отправляются. Импорт привозит историю, а рассылка ста тысяч постбеков за прошлый месяц испортила бы обучение кабинетов источников задним числом.
  • Каждая строка проходит тот же путь, что и постбек от сети: тот же расчёт выплаты (в том числе фиксированная выплата оффера при payout_auto), та же дедупликация, тот же счётчик Conversion Cap.
  • Импорт доступен только администратору. Ограничить его группами баера нельзя: в файле нет кампаний, только сабки, а кампанию у сабки знает индекс кликов - то есть баер мог бы дописать доход в кампанию чужой команды.

Facebook Conversions API

Раздел Инструменты -> Facebook CAPI (виден администратору). Трекер сам отправляет события конверсий в пиксель Meta серверным запросом - без пикселя на лендинге и без зависимости от блокировщиков в браузере.

Что нужно от Facebook

Из Events Manager: идентификатор пикселя (только цифры) и маркер доступа («Настройки -> Сгенерировать маркер доступа»). Meta показывает маркер один раз - потеряли, генерируйте новый.

Настройка

Кнопка «Добавить интеграцию», поля формы:

Поле Что писать
Название На работу не влияет, нужно чтобы отличать интеграции в списке
Включена Выключенная не отправляет ничего
Pixel ID Идентификатор пикселя, только цифры
Токен доступа Маркер из Events Manager. При изменении оставьте поле пустым, чтобы не менять прежний
Тестовый код события Пока он задан, события видны только во вкладке Test Events и не попадают в отчётность кабинета. Для боевой работы поле очищают
Версия API По умолчанию v21.0, формат строго vЧИСЛО.ЧИСЛО
Кампании Мультивыбор. Ничего не выбрано = все кампании
Статусы конверсий и события Facebook Для каждого статуса трекера выбирается событие Meta либо первый пункт списка, «не отправлять»

Умолчания маппинга: Sale -> Purchase, Lead -> Lead, Registration -> CompleteRegistration, Deposit -> Purchase. Rejected и Trash по умолчанию не отправляются - отказы и мусор портят обучение алгоритма закупки. В списке 18 стандартных событий Meta, но можно вписать и своё имя (латиница и цифры, начиная с буквы, до 50 символов).

Токен наружу не отдаётся никогда: в списке видно только огрызок вида EAAGxx…ab12, в API его нет, в запросе к Meta он уходит телом, а не в адресе - иначе попал бы в лог постбеков.

Проверка связи

Кнопка «⟳ связь» в строке интеграции. Она не отправляет пробное событие (оно попало бы в отчётность кабинета), а спрашивает у Graph API сам пиксель - и этим проверяет сразу три вещи: жив ли токен, есть ли у него права на этот пиксель, существует ли пиксель.

Итог остаётся в колонке «Проверка»: «связь есть» (с именем пикселя) или «ошибка» с текстом причины в подсказке. Не нажимали - будет «не проверялась»; сама по себе проверка не переспрашивается.

Что означают ответы:

  • «Facebook отклонил токен» - маркер просрочен или отозван, сгенерируйте новый;
  • «Facebook не принял запрос» - обычно неверный Pixel ID или у токена нет прав на него;
  • «Facebook временно недоступен» / «нет связи с Facebook» - с сервера нет выхода к graph.facebook.com. Если Meta недоступна из вашей страны, адрес Graph API переопределяется переменной окружения FB_GRAPH_URL (свой прокси).

Когда событие уходит

Все условия сразу:

  1. конверсия записана (постбеком или импортом) и это не строка отмены при смене статуса
  2. возврат события Meta требует отдельного потока, которого у нас нет;
  3. интеграция включена, а кампания конверсии попадает в её список (или список пуст);
  4. статус конверсии сопоставлен событию;
  5. в клике есть fbclid.

Последний пункт - самая частая причина «ничего не отправляется». fbclid приносит готовый шаблон источника трафика facebook.com (он кладёт fbclid в external_id). Если источник кампании настроен иначе, метки в клике не будет и событие не уйдёт с причиной «в клике нет fbclid - событие не с трафика facebook».

Одна конверсия может уехать сразу в несколько интеграций.

Что именно отправляется

Событие Meta с полями: имя события из вашего маппинга, время конверсии, event_id = идентификатор конверсии (по нему Meta склеивает событие с браузерным пикселем, если он у вас тоже стоит), action_source: website, адрес перехода.

Данные посетителя: fbc (собирается из fbclid и времени клика), IP и User-Agent клика - как есть; страна, регион, город и сабка - хешируются sha256, как того требует Meta. Доход и валюта уходят в custom_data вместе с tid как номером заказа; при нулевом доходе блок не отправляется.

Данные клика берутся из индекса кликов, он живёт 90 дней. По более старой конверсии часть полей уедет пустой - событие всё равно отправится.

Где смотреть отправки

  • На самой странице интеграции - блок «Последние отправки за 7 дней»: время, кампания, статус, итог («принято» / «отказ <код>» / «не отправлено»), причина и Sub ID. Клик по строке открывает карточку с адресом запроса и ответом Meta.
  • В общем Логе постбеков (Отчёты -> Лог постбеков), тип «Facebook Conversions API». Там же фильтр «Только неудачные» и поиск по Sub ID.

Отказы, случившиеся до запроса (нет fbclid, не настроен пиксель), тоже попадают в лог - с нулём попыток и без кода ответа. Не попадает в лог только «статус не сопоставлен»: это штатная настройка, лог бы ею забился.

Повторы и таймауты

До трёх попыток с паузами 0.5 и 1 секунда, и только для временных отказов (сеть, 429, 5xx). Отказ авторизации и отказ по данным повторять бессмысленно - они прекращают попытки сразу. Таймаут запроса общий с постбеками (настройка «Таймаут S2S», по умолчанию 8 секунд).

Успехом считается не код ответа, а поле events_received в ответе Meta: она умеет отвечать 200 с текстом ошибки внутри, и без этой проверки отказ выглядел бы доставкой.

Неудачная отправка не влияет на саму конверсию - она уже записана и в отчётах видна.

Интеграции-вебхуки

Раздел Инструменты -> Вебхуки. Вебхук на событие conversion отправляет JSON конверсии POST-запросом на ваш URL. Ретраев у вебхуков нет (в отличие от S2S), но каждая отправка попадает в тот же Лог постбеков с типом «Вебхук интеграции».

Партнёрские сети

У партнёрской сети хранится шаблон постбека и имя параметра, которым она принимает наш идентификатор клика. Оффер привязывается к сети - тогда click_id подставляется в ссылку оффера автоматически, а шаблон постбека сети предлагается при создании правила.