Postback в Keitaro работает, когда партнёрская сеть возвращает точный subid исходного клика и передаёт валидный status. payout, currency и tid делают запись полной, но обязательный контракт — subid плюс status.
Общая форма:
https://tracker.example/POSTBACK_KEY/postback?subid={NETWORK_CLICK_MACRO}&status={NETWORK_STATUS_MACRO}&payout={NETWORK_PAYOUT_MACRO}&tid={NETWORK_TRANSACTION_MACRO}
Macros справа нужно заменить точными placeholders вашей сети. Keys слева принадлежат Keitaro.
Какие параметры ждёт Keitaro
Согласно официальной документации Keitaro:
| Параметр | Обязательный | Назначение |
|---|---|---|
subid | Да | Click ID, по которому находится исходный визит |
status | Да | Conversion type или raw value для status training |
payout | Нет | Доход по конверсии |
currency | Нет | Валюта до конвертации в currency трекера |
tid | Нет | Transaction ID для раздельной записи повторных конверсий |
Keitaro поддерживает aliases входящих ключей. Настраивайте их явно: clickid и profit не обязаны работать без соответствующей Alias-конфигурации.
Шаг 1. Передайте {subid} в offer
Keitaro создаёт {subid} на входе в campaign. Сеть должна сохранить его в своём поле.
https://network.example/offer?aff_sub={subid}
или:
https://network.example/offer?sub1={subid}
Выбор поля зависит от сети. Ready-made template может добавить его автоматически; при ручной настройке проверьте delivered URL. В нём должно быть реальное значение, а не строка {subid}.
Шаг 2. Верните значение в postback
Если сеть хранит клик в aff_sub и раскрывает {aff_sub}, callback выглядит так:
https://tracker.example/POSTBACK_KEY/postback?subid={aff_sub}&status={status}&payout={payout}&tid={conversion_id}
Runtime-запрос должен содержать уже resolved values:
https://tracker.example/POSTBACK_KEY/postback?subid=cb0d82f4a2&status=sale&payout=42.50&tid=conv_98211
Шаг 3. Зафиксируйте mapping статусов
Сеть может присылать new, reg, approved, deposit, billed или rejected. До запуска оформите таблицу:
| Raw status | Keitaro type | Смысл |
|---|---|---|
new | Registration | Регистрация без подтверждённого payout |
lead | Lead | Hold/unconfirmed revenue |
sale / approved | Sale | Подтверждённый доход |
deposit | Deposit или custom FTD | Значение по договору с партнёром |
rejected | Rejected | Отмена или корректировка |
Неизвестный status без training может быть проигнорирован, даже если endpoint ответил успешно.
Шаг 4. Используйте tid для реальных повторов
Один click может дать registration, FTD и redeposit. Один бизнес-event должен иметь стабильный transaction ID:
- тот же retry → тот же
tid; - новая реальная transaction → новый
tid; - не генерируйте новый random ID на каждый retry.
Pass/fail проверка
| Этап | Нужный факт |
|---|---|
| Campaign click | В Keitaro есть реальный click и subid |
| Offer URL | Сеть получила это значение в согласованном поле |
| Network storage | Значение видно в click/conversion log |
| Raw callback | В postback log нет literal placeholder |
| Click lookup | Нет ошибки Click for subid not found |
| Status | Событие получило нужный conversion type |
| Payout | Доход и currency соответствуют контракту |
| Idempotency | Повтор одной transaction не добавляет revenue |
| Reporting | Конверсия стоит на исходной campaign и route |
Официальный troubleshooting Keitaro рекомендует тот же порядок: сначала доказать передачу subid, затем читать postback log и проверять conversion type.
Частые ошибки
- Click for subid not found: сеть вернула пустое, literal или другое значение.
- Postback status is not set: status macro не раскрылся или параметр отсутствует.
- Conversion type not found: создайте custom type или status training.
- Incorrect postback code: скопируйте актуальный endpoint из Settings → Postback URL.
- Одна конверсия перезаписывает другую: добавьте стабильный
tidдля отдельных событий.
Если между Keitaro и offer есть PWA или routing layer, каждый redirect должен сохранять subid, fbclid, ttclid и campaign fields. Используйте Click ID vs Sub ID, Postback URL Builder и чеклист диагностики.
Настройка проходит acceptance только тогда, когда один контролируемый click создаёт одну правильно типизированную conversion на исходной строке Keitaro с правильным payout, а идентичный callback не добавляет её второй раз.