Конверсии и постбеки¶
Конверсия - это целевое действие пользователя (продажа, лид, регистрация, депозит), зафиксированное на клике. TrafMate принимает конверсии входящим постбеком, хранит их и рассылает исходящие постбеки (S2S) источникам трафика и партнёрским сетям.
Приём конверсии (входящий постбек)¶
Партнёрская сеть или рекламодатель уведомляет трекер о конверсии GET-запросом:
<ключ> - ключ постбека, секретный сегмент адреса. Он создаётся автоматически при
установке, у каждой установки свой, и смотреть его нужно в Настройки -> Ключ постбека
(там же готовый адрес для партнёрки и кнопка «Сгенерировать»). Без ключа адрес отбивается
кодом 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)¶
При появлении или изменении конверсии рассылаются исходящие постбеки:
- Постбек источника трафика - URL, заданный в карточке источника. Отправляется дополнительно к правилам кампании (его текст показан внизу вкладки «S2S postbacks»).
- Правила кампании - вкладка «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 % и доход по типам врут, а заметить это можно только сверкой с кабинетом сети.
Лечится в Настройках: шесть полей вида «Слова сети для «Продажа»». Перечислите через запятую слова, которые эта сеть присылает.
Два уточнения:
- это слова самих статусов, а не имена параметров. Соседнее поле «Постбек: статус»
задаёт, в каком параметре искать значение (
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(свой прокси).
Когда событие уходит¶
Все условия сразу:
- конверсия записана (постбеком или импортом) и это не строка отмены при смене статуса
- возврат события Meta требует отдельного потока, которого у нас нет;
- интеграция включена, а кампания конверсии попадает в её список (или список пуст);
- статус конверсии сопоставлен событию;
- в клике есть
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 подставляется в ссылку
оффера автоматически, а шаблон постбека сети предлагается при создании правила.