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

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

Когда партнёрка сообщила о конверсии, её нужно вернуть в рекламный кабинет — иначе источник не научится искать похожих людей. Для этого трекер сам дёргает URL источника.

Где задаётся URL

Шаблон берётся из первого непустого поля:

Приоритет Где Поле
1 Кампания S2S postback URL (исходящий)
2 Источники → карточка источника Postback URL (шаблон)

URL кампании выигрывает всегда. Шаблон источника — общий дефолт для всех кампаний, привязанных к этому источнику: настроили один раз, и новым кампаниям дописывать нечего. Пустое поле кампании означает «взять шаблон источника», а не «ничего не отправлять».

Источник, созданный кнопкой 📚 Каталог, у части сетей (MGID, RichAds, Notix, Kadam, ClickAdilla, PropellerAds, Adsterra, Taboola…) приезжает с уже заполненным шаблоном — в нём остаётся подставить свои доступы (YOUR_TOKEN у MGID, RichAds, Notix, Kadam и ClickAdilla, YOUR_ACCOUNT_ID у PropellerAds, YOUR_AID у Adsterra) и заменить плейсхолдер click_id самой сети на макрос трекера. Шаблон Taboola приезжает без токена и уже с {click_id} — править в нём нечего. У Facebook, Google Ads, TikTok и Яндекс.Директа шаблон в каталоге пустой — эти площадки принимают конверсии не постбэком.

Правки применяются сразу: и карточка источника, и кампания перезагружают кеш трекера сразу после сохранения. Авто-reload раз в ~30 секунд — только подстраховка на случай, если перезагрузка не удалась.

Если конверсии в ту же площадку уже уходят через Facebook CAPI или TikTok Events, оба поля оставляют пустыми — иначе источник получит событие дважды.

Макросы

В исходящем URL работает свой короткий набор — не весь справочник макросов:

Макрос Значение
{click_id} · {subid} ID клика в трекере
{status} статус конверсии
{payout} · {revenue} сумма выплаты
{currency} валюта
{txid} ID транзакции партнёрки
{sub_id_1}{sub_id_30} sub-параметры клика; альтернативное написание {subid_1} тоже принимается

Значения подставляются уже URL-кодированными. Всё остальное остаётся в адресе как есть — в том числе плейсхолдеры сетей вроде {clickid}, [CLICK_ID] или ${SUBID}: их нужно заменить руками.

https://source.example.com/pb?cid={sub_id_1}&status={status}&payout={payout}&cur={currency}

Источнику нужен его собственный click id

fbclid у Facebook, ttclid у TikTok, click id пуш-сетей — всё это приходит в tracking-ссылке как sub-параметр. Возвращать надо именно его: {click_id} трекера источник никогда не видел и сматчить не сможет. Подставляйте {sub_id_N} с тем номером, куда параметр разложен в карточке источника.

Когда уходит

Постбэк отправляется сразу после того, как конверсия записана — и для конверсии из постбэка партнёрки, и для браузерной (/action, /px.gif). Запрос всегда GET, таймаут 10 секунд, из ответа сохраняются первые 4 КБ.

Исключение — браузерная конверсия без валидного пер-кликового токена: в отчётах она есть, но наружу не уходит вообще — ни исходящим S2S, ни в CAPI, ни в вебхуки. Так подделанное с лендинга событие не сожжёт бюджет источника. Подробнее — Click API и SDK.

В {status} и в фильтре статусов подставляется канонический статус — уже после маппинга статусов сети, а не то, что прислала партнёрка.

Набор статусов, о которых сообщают источнику, — поле кампании s2s_statuses. Пустой список означает «отправлять все статусы», включая rejected и trash.

Фильтр статусов есть только в API

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

Только публичные адреса

Исходящие постбэки идут через SSRF-защищённый клиент: соединение с loopback, link-local (включая 169.254.169.254) и приватными диапазонами обрывается на этапе подключения — на каждом редиректе тоже. Приёмник должен быть доступен из интернета, иначе в журнале будет ошибка blocked.

Ретраи и DLQ

Повторяются сетевые ошибки, 5xx, 429 и 408. Остальные ответы, включая прочие 4xx, считаются окончательными: повторять те же байты бессмысленно, такой постбэк остаётся только в журнале и в DLQ не попадает.

Всего три попытки: сразу, через 30 секунд и ещё через минуту. После третьей неудачи постбэк уходит в DLQ (очередь недоставленных).

DLQ — не свалка, а рабочий инструмент: Настройки → DLQ, блок «Исходящие postback'и». В строке видно click_id, статус, число попыток, последнюю ошибку и время следующей попытки; кнопка «Повторить» — на строке, «Повторить все» — над таблицей.

Ждать вручную обычно не нужно: раз в минуту трекер сам забирает из DLQ строки, у которых подошло время следующей попытки (первая — через 10 минут после попадания). «Повторить все» эту паузу игнорирует — она для случая «приёмник точно починился».

Журнал

Раздел Постбэки показывает обе стороны: in — что прислала партнёрка, out — что трекер отправил источнику: время, направление, код ответа, click_id, итоговый URL с подставленными макросами и ошибку. Это первое место, куда стоит смотреть при разборе «источник не видит конверсий».

Вебхуки

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