Меню

Reference

Постбэки S2S

Конверсию сообщает ваш сервер одним запросом. Ни пикселя, ни JavaScript: блокировщики и мобильные браузеры на приём не влияют.

Контракт из двух шагов

  1. Принять click_id в адресе посадочной страницы и сохранить его рядом с заказом — так, чтобы он пережил закрытие вкладки.
  2. В момент целевого действия отправить серверный запрос с этим click_id, идентификатором заказа и подписью.

Больше от рекламодателя ничего не требуется. Адрес приёмника, секрет и список целей выдаёт кабинет сети — они разные у разных сетей, поэтому здесь их нет.

Два метода на выбор

POST телом запроса:

POST https://<приёмник сети>/cpa/postback/<offer_id>
Content-Type: application/json

{
  "click_id": "clk_01HXVB...",
  "external_id": "order-10245",
  "status": "sale",
  "sum": 12000,
  "goal": "sale",
  "signature": "<hex(HMAC-SHA256(secret, canonical))>"
}

GET параметрами — если CRM умеет только «дёрнуть ссылку»:

GET https://<приёмник сети>/cpa/postback/<offer_id>?click_id=clk_01HXVB...&external_id=order-10245&status=sale&sum=12000&signature=...

Оба пути ведут в один приёмник и дают одинаковый результат. Метод фиксируется в журнале попыток, поэтому при разборе видно, каким именно способом пришёл запрос.

Параметры

ПараметрОбязателенЧто означает
click_idдаИдентификатор перехода — пришёл в адресе вашей посадочной страницы.
external_idдаВаш идентификатор заказа. По нему считается идемпотентность: повтор не создаёт вторую конверсию.
statusдаСтатус действия на вашей стороне. Сопоставление со статусами сети настраивается в кабинете.
sumзависитСумма заказа. Обязательна для моделей, где вознаграждение считается процентом.
goalнетКод цели воронки. Без него конверсия относится к цели по умолчанию.
signatureдаПодпись запроса секретом оффера.

Подпись

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

Цели воронки

Внутри одного оффера может быть несколько шагов — регистрация, промежуточная веха, оплата. Каждый приходит своим постбэком с параметром goal; дедупликация считается по тройке «сеть — заказ — цель», поэтому оплата не перетирает регистрацию, а порядок прихода не важен.

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

Коды ответа

КодЧто произошло
400Не хватает обязательного параметра или он не разобрался.
401Подпись не сошлась: чаще всего секрет от другого оффера или изменён порядок полей при подписании.
404Переход с таким идентификатором не найден. Строка сохраняется в журнале как «не найден» и обновится при повторном постбэке с валидным идентификатором.
409Заказ с этим идентификатором уже принят. Это не ошибка интеграции: повторная отправка безопасна и намеренно не создаёт вторую конверсию.
410Окно атрибуции истекло — с момента перехода прошло больше, чем допускают условия оффера.

Проверка до запуска трафика

В кабинете есть тестер: он отправляет настоящий постбэк через настоящий приёмник с настоящей подписью, то есть проверяет ровно тот путь, по которому пойдут боевые запросы. Строки, созданные тестером, помечаются тестовыми и не попадают ни в статистику, ни в рейтинг оффера.

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

Если конверсия не засчиталась

Журнал попыток хранит каждый запрос — включая отклонённые — с методом, параметрами и кодом ошибки, и доступен обеим сторонам. Разбор «мы шлём, вы не получаете» сводится к чтению одной строки.

Полная инструкция с примерами под конкретные CRM — в справке кабинета, раздел о постбэках. Обзор того, как это устроено со стороны сети, — приём конверсий по S2S; что происходит с конверсией дальше — холд и подтверждение.