Постбэки партнёру
5 мин чтения
Партнёрская сеть узнаёт о судьбе своего лида только от вас. Не приходит постбэк — ваш оффер выглядит у них нулевым по конверсии, закупщик режет бюджет, и трафик уходит к тому, кто уведомления присылает. Поэтому постбэки настраивают в первый же день подключения партнёра, а не когда он начнёт спрашивать.
Зачем партнёру постбэк
Постбэк — это запрос от нас на адрес партнёра: «заказ такой-то перешёл в такое-то состояние». По нему партнёрская сеть закрывает конверсию у себя, считает выплату своему вебмастеру и решает, оптимизировать кампанию или выключить её. Ваш интерес тот же: у партнёра, который видит апрув в реальном времени, качество трафика выправляется само.
Партнёрская сетьПостбэкиПостбэк заводят на партнёра — тогда уведомления уходят только по его заказам. Вариант весь проект означает любые заказы, включая созданные вручную и принятые по телефону: так подключают не партнёрскую сеть, а собственный трекер или склад.
События
| Событие | Когда уходит |
|---|---|
| Принят лид | Заказ создан и попал в обработку: лид дошёл, а не потерялся между формой партнёра и вашим приёмом. Заказ, созданный сразу в отказе антифродом, такого уведомления не получает. |
| Подтверждён | Заказ дошёл до группы «Принят» — оператор договорился с клиентом. |
| Отправлен | Группа «Отправлен». Разведено с подтверждением намеренно: сети платят за разное. |
| Выкуплен | Группа «Оплачен» — деньги получены. |
| Возврат | Группа «Возврат». |
| Отменён | Группы «Отменён» и «Ошибка/Спам»: спам отдельным событием не выделен. |
| Любая смена статуса | Каждый шаг заказа, включая недозвоны. Нужно своим системам, партнёрским сетям — почти никогда. |
Событий у одного постбэка может быть несколько. Обычный набор для CPA-сети: Принят лид, Подтверждён, Отменён и, если платите за выкуп, Выкуплен. Одно и то же событие по одному заказу дважды не уйдёт: партнёр не получит два подтверждения одного лида, даже если заказ вернули в прежний статус и провели заново. Исключение — Любая смена статуса, где самостоятелен каждый переход.
Адрес и макросы
Адрес даёт партнёр — обычно готовой строкой из своей документации. Макросы в фигурных скобках подставляем мы; значения кодируются под передачу в адресе, так что город с пробелом ничего не ломает.
Название
AdsTeam / основной
Партнёр
AdsTeam
Адрес
https://cpa.example/postback?click={external_id}&status={event}&sum={payout}
События
Макросы
| Макрос | Что подставляется |
|---|---|
| {order_id} | Ваш номер заказа |
| {external_id} | Идентификатор партнёра — то, что он прислал при приёме |
| {event} | Событие: created, approved, canceled, shipped, bought_out, refunded, status_changed |
| {status} · {status_id} · {status_group} | Название, номер и группа статуса |
| {previous_status} | Прежний статус — для «любой смены статуса» |
| {flow} · {webmaster} | Код потока и логин вебмастера |
| {total} · {payout} · {currency} · {quantity} | Сумма заказа, начисленная выплата, валюта, количество товара |
| {country} · {region} · {city} | Страна, область, город |
| {phone_hash} | SHA-256 от телефона в формате E.164 |
| {created_at} | Когда заказ создан, ISO 8601 |
| {utm_source} и остальные utm | Метки, пришедшие с заявкой |
Список закрытый: наугад добавленный макрос не подставится и адрес не сохранится — придёт ошибка с перечнем неизвестных имён. Так партнёр не сможет вытащить произвольное поле заказа, а опечатку в имени макроса вы увидите сразу, а не через месяц по пустому параметру.
По умолчанию уведомление уходит запросом GET — так работают почти все трекеры. Постбэк можно перевести на POST: тогда те же значения уедут телом JSON, а не в адресе. Метода в диалоге нет, он задаётся через программный интерфейс. Сохранённый адрес превращается примерно в такой запрос:
GET https://cpa.example/postback
?click=12345
&status=approved
&sum=250
&order=100000042
&phone=9f86d081884c7d659a2f...Что не уходит наружу
Персональных данных в постбэке нет — ни телефона, ни ФИО, ни адреса, даже если партнёр просит. Постбэк уходит по чужому адресу, часто через редиректы и логи трекера: отправить туда телефон клиента значит опубликовать его.
- Вместо номера доступен
{phone_hash}. Партнёр сверит по нему свой лид с вашим заказом, но позвонить клиенту не сможет и базу не соберёт. - Хеш считается от номера в международном формате, поэтому у партнёра он сойдётся, только если он считает так же. Это стоит проговорить при подключении.
- Адрес принимает только
httpиhttps, и перед каждой отправкой проверяется, что имя ведёт наружу, а не внутрь сети. Постбэк — единственное место, где внешний человек задаёт адрес, по которому ходит наш сервер, поэтому проверка не разовая, а на каждой попытке.
Что ещё видит и не видит партнёр — в статьях Партнёрская сеть и Защита данных.
Доставка и повторы
Отправка идёт очередью, а не внутри запроса оператора: партнёрский сервер может лежать полчаса, и это не повод терять уведомление и уж тем более мешать оператору менять статус. Не вышло — попытка повторяется с растущей паузой: минута, две, четыре и дальше, до двух часов между попытками. Всего попыток восемь; после последней отправка переходит в Отказ и сама больше не повторяется.
| Когда | Постбэк | Заказ | Событие | Состояние | Попыток | Ответ | |
|---|---|---|---|---|---|---|---|
| 02.11 14:31 | AdsTeam / основной | 100000042 | Подтверждён | Доставлен | 1 | 200 · ok | |
| 02.11 14:28 | MobiLead / s2s | 100000040 | Выкуплен | Повтор | 3 | 502 · Bad Gateway | |
| 01.11 09:14 | MobiLead / s2s | 100000017 | Отменён | Отказ | 8 | Имя cpa.example не разрешается |
| Состояние | Что значит |
|---|---|
| В очереди | Ждёт первой попытки. Обычно это секунды. |
| Доставлен | Партнёр ответил кодом 200–299. Перенаправление успехом не считается: почти всегда это значит, что адрес сменился и запрос ушёл в никуда. |
| Повтор | Попытка не удалась, следующая по расписанию. В колонке ответа виден код и начало тела. |
| Отказ | Попытки кончились. Дальше — только вручную. |
Кнопка обновления рядом со строкой возвращает отправку в очередь и обнуляет счётчик попыток. Нажимать её имеет смысл после того, как партнёр починил приём: до этого она добавит ещё восемь неудачных попыток.
Как отладить с партнёром
- 1Заведите постбэк на этого партнёра с адресом из его документации. Начните с одного события — Принят лид: его проще всего вызвать.
- 2Попросите прислать тестовый заказ и найдите его в журнале приёма: Способы передачи заказов. Если заказа нет, дело не в постбэке.
- 3Откройте Отправки и найдите строку по номеру заказа. В колонке Ответ лежит то, что вернул партнёр, — код и начало тела. Это и есть ответ на «нам ничего не приходило».
- 4Переведите тестовый заказ по статусам и проверьте, что события уходят в том порядке, который ждёт партнёр. Затем добавьте остальные события.
Что обычно оказывается причиной:
- Имя не разрешается. Опечатка в адресе или партнёр прислал внутренний адрес своей сети.
- Код 4xx. Партнёр не узнаёт параметры: чаще всего он ждёт свой идентификатор в
{external_id}, а тот пуст — значит, при приёме заказа он его не передавал. - Код 200, но конверсия не закрылась. Партнёр принял запрос, но не понял событие: сверьте, какие значения
{event}он ожидает, и при необходимости заведите по постбэку на событие с нужным ему значением в адресе. - Уведомлений нет вовсе. Проверьте переключатель Включён и то, что заказы действительно размечены на этого партнёра: постбэк на партнёра не сработает по заказу без вебмастера.
Не нашли ответ
Напишите на hello@xe.kg — ответим и дополним статью. Так она и растёт.