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

Частые вопросы

Здесь собраны ситуации, которые чаще всего выглядят как поломка трекера, а на деле объясняются его устройством. Каждый ответ - по коду, а не по общим соображениям.

Раздел не открывается, панель пишет об ошибке

Первое, что стоит проверить - блокировщик рекламы. Панель трекера попадает под его фильтры: в адресах запросов живут слова clicks, conversions, domains, и расширение режет их, не спрашивая. Со стороны это выглядит как поломка трекера, хотя запрос до сервера просто не доходит.

Проверка занимает полминуты: откройте панель в режиме инкогнито (расширения там выключены). Заработало - значит дело в расширении.

Решение: добавьте адрес панели в исключения блокировщика (в uBlock Origin и AdGuard это кнопка «выключить на этом сайте»). Панель сама подскажет, если распознает такой случай.

Куда смотреть, когда «не работает»

Три раздела панели закрывают большую часть обращений. Загляните в них ДО того, как писать в поддержку - обычно ответ там.

Симптом Куда смотреть Что там видно
«Партнёрка говорит, что слала конверсию, а её нет» Отчёты -> Входящие постбеки пришёл ли запрос вообще и почему был отклонён: не тот адрес, чужая сабка, незнакомый статус. Строк нет вовсе - значит, запрос до трекера не дошёл
«Домен не открывается по HTTPS» Обслуживание -> Сертификаты выпущен ли сертификат, а если нет - отказали мы (домена нет в списке) или запросов не было вовсе. «Запросов не было» = вопрос к DNS, а не к трекеру
«Вчера вечером что-то случилось» Обслуживание -> Диагностика, карточка «Системный лог» обновления, бэкапы, восстановления, замены гео-базы, домены, которые перестали отвечать
«Клик есть, а конверсии нет» Отчёты -> Лог постбеков что мы отправили в источник и что он ответил
«Кто выключил поток» Обслуживание -> Журнал действий действия пользователей панели

Отличие двух журналов: Журнал действий - что делали люди, Системный лог - что делала система. Вопросы к ним разные, поэтому они разделены.

Конверсии

Не приходят конверсии от партнёрки

Проверяйте по порядку - трекер отвечает на постбек текстом, и этот текст сразу называет причину.

Отправьте постбек руками, подставив сабку реального клика:

curl -i "https://<домен>/postback?subid=<сабка>&status=sale&payout=10"
Ответ Что это значит Что делать
ok Конверсия принята Смотрите лог конверсий
ok (duplicate) Такой постбек уже приходил за последние 30 суток Это не ошибка. Для повторного платежа нужен новый tid
ok (same status) Статус тот же, что уже стоит Партнёрка шлёт повтор
ok (transition not allowed) Переход между статусами запрещён -
ok (deferred) Redis недоступен, запрос отложен на диск и доиграется позже Проверьте состояние трекера
400 no subid В запросе нет параметра с сабкой Партнёрка шлёт сабку под другим именем - см. ниже
403 incorrect postback code В настройках задан секретный код, а в адресе его нет или он неверный Поправьте адрес постбека у партнёрки
404 click not found Такой сабки трекер не знает См. ниже
503 temporary failure Хранилище недоступно и отложить не удалось Проверьте состояние трекера

400 no subid. Трекер принимает сабку под именами subid, sub_id, click_id, trackID, subaccount, s, external_id. Если партнёрка шлёт своё имя, добавьте его в алиасы в настройках постбека - переучивать партнёрку не нужно.

404 click not found. Причины по частоте:

  1. В Offer URL не подставился макрос. Откройте лог кликов, найдите клик, посмотрите поле «Направление» - в нём должен стоять реальный идентификатор, а не буквальное {subid}.
  2. Прошло больше 90 дней. Индекс, по которому постбек находит клик, живёт 90 суток.
  3. Партнёрка шлёт свой идентификатор, а не нашу сабку. Тогда трекер должен знать его как external_id: он ищет клик и по нему тоже, но только если этот идентификатор попал в клик при заходе.
  4. Постбек прилетел на другой домен, который к этой установке не относится.

Статус конверсии определился неправильно

Партнёрки называют одно и то же по-разному, и трекер переводит их слова в свои шесть типов. Например, approved, confirmed, paid, purchase, ftd, rebill и даже 1 становятся продажей; cancel, refund, decline, invalid - отклонением; dep и redeposit - депозитом.

Слово, которого трекер не знает, становится лидом. Отсутствие параметра статуса - тоже лид. Если партнёрка шлёт своё слово, добавьте его имя параметра в алиасы статуса в настройках.

Не записывается второй платёж (ребилл)

Повторной конверсией считается только постбек с новым непустым tid (идентификатор транзакции). Постбек без tid при уже существующей конверсии либо отсеется как дубликат, либо будет понят как смена статуса.

Попросите партнёрку передавать идентификатор транзакции. Трекер принимает его под именами transaction_id, txid, trans_id, tid - можно добавить своё.

Выплата пришла нулевой или не той, что в постбеке

Правило зависит от переключателя «Автоматическая выплата» у оффера:

  • выключен - в конверсию всегда идёт фиксированная выплата оффера, что бы ни прислала партнёрка;
  • включен - берётся сумма из постбека; если её нет, она не разобралась или равна нулю, подставляется фиксированная выплата оффера.

Ещё два случая, когда фиксированная выплата не применяется:

  • у оффера тип выплаты CPC;
  • это повторная конверсия (ребилл), а «Выплата за апселл» у оффера выключена.

Трекер понимает суммы вида 10.50, 10,50, 1 234.56, $10, 10 USD, +10, -5. Научная запись (1e3) отвергается.

Конверсия есть, а Conversion Cap не тикает

Счётчик увеличивается только на новых конверсиях: смена статуса уже существующей его не двигает. Кроме того, кап работает, только когда лимит больше нуля и переключатель включён - при выключенном переключателе ненулевой лимит не действует.

Постбеки в источник трафика

Постбек отправлен, но сеть его не видит

Откройте отчёт «Постбеки» (лог отправленных). В нём по строке на каждую отправку: итоговый адрес после подстановки макросов, HTTP-код, число попыток, длительность и начало тела ответа.

Успехом считается только код ответа ниже 400. Раньше любой ответ ниже 500 считался доставкой, и постбек с опечаткой в адресе молча не работал неделями.

Что смотреть в логе:

Что видно Причина
http_code = 0 Ответа не было вовсе: сеть недоступна, адрес не резолвится, вышел таймаут (8 секунд по умолчанию)
404 или 403 Неверный адрес или неверный ключ в шаблоне
401 Сеть не признала ключ
В адресе видны фигурные скобки Макрос с опечаткой - неизвестный макрос остаётся в тексте как есть
attempts = 3 Три попытки исчерпаны. Повторяются только сетевые ошибки, 5xx и 429; прочие 4xx останавливают отправку сразу

Постбек уходит с буквальными скобками в адресе

Скопированный из другого трекера шаблон может содержать макросы, которых у нас нет под таким именем. Неизвестный макрос не подставляется и уезжает в сеть как есть - именно это и видно в логе постбеков.

Список поддерживаемых имён - в разделе Конверсии и постбеки. Отдельно помните про две формы: {имя} подставляет значение URL-кодированным, {_имя} - сырым.

Постбек не отправляется вообще

Проверьте:

  • у кампании выбран источник трафика, и у источника заполнен шаблон постбека - либо заведено правило постбека;
  • в правиле указан подходящий статус. Пустой список статусов означает «любой»;
  • правило включено;
  • лицензия трекера действительна: при недействительной лицензии доставка конверсий останавливается.

Права доступа

Баер вошёл, но не видит ни одной кампании

Почти всегда - ему не выданы группы. Это отказ по умолчанию, а не поломка: пользователь без групп не видит ни кампаний, ни потоков, а отчёты у него пустые (именно нулевые, а не «вся установка»).

Порядок настройки: завести группу -> разложить по ней кампании -> выдать группу пользователю в его карточке.

Баер видит слишком много

Проверьте набор разделов. Пустой набор означает «не настроено» и открывает все разделы - снятые галочки при пустом наборе ничего не ограничивают. Чтобы ограничить, нужно сохранить непустое подмножество разделов.

Помните также, что записи без группы (общие) видны всем: так сделано ради источников трафика, которые обычно заводятся без группы. Менять их всё равно может только администратор.

Баер не видит источники трафика в карточке кампании

Проверьте, что ему выдан раздел traffic_sources. Если раздел есть, а список пуст - значит, источники разложены по группам, к которым у него нет доступа. Общие источники (без группы) видны всем.

Баер жалуется, что не может создать себе API-ключ

И не сможет: ключи создаёт только администратор. Ключ, созданный админом для баера, наследует ровно его права.

Вход и пароли

Забыт пароль владельца, в панель войти некому

На сервере:

trafmate reset-password

Команда возьмёт логин из .env (или admin), сгенерирует пароль и покажет его один раз. Можно задать явно:

trafmate reset-password myadmin --password 'НовыйПароль123'

Пароль короче 8 символов команда не примет. Существующему пользователю меняется только пароль (и возвращается статус active), роль не меняется. Если такого логина нет - создаётся администратор. Все прежние сессии этого пользователя гасятся.

Вход отвечает 200, но панель снова показывает форму

Классическая причина - кука сессии с флагом Secure, которую браузер выбрасывает при работе по HTTP. Сейчас трекер решает этот флаг по каждому запросу: по HTTPS кука Secure, по HTTP - нет. Отдельная настройка COOKIE_INSECURE для входа по адресу вида http://<IP>/admin/ больше не нужна.

Если проблема осталась, смотрите:

  • статус учётной записи должен быть active;
  • IP-белый список (если включён) - обращение с адреса вне списка даёт 403;
  • ответ 401 session_evicted означает, что вход вытеснен более новым. По умолчанию число одновременных сессий НЕ ограничено ни на одном тарифе, так что в норме этого не бывает; лимит может быть выставлен лишь индивидуально под конкретную сделку, и тогда при превышении выбрасывается самая старая сессия.

«Слишком много попыток входа»

Сработал ограничитель перебора: счётчики ведутся и по адресу, и по логину. Ждать 15 минут. Успешный вход счётчики сбрасывает.

Сменил пароль пользователю, а он всё ещё в панели

Смена пароля из панели не выбивает уже выданную сессию - она живёт до 7 суток. Чтобы гарантированно закрыть доступ, уведите учётную запись из статуса active. Сброс пароля через CLI, в отличие от панели, сессии гасит.

Домены

Домен не подключается

Порядок проверки:

  1. Домен заведён в трекере? Сертификат выпускается только для доменов из таблицы: Caddy перед выпуском спрашивает трекер, наш ли это хост, и на незаведённый отвечает отказом. Незаведённый хост движок отдаёт как 404.
  2. DNS смотрит на наш сервер? Нажмите «Проверить» у домена. Признак «не на нашем сервере» означает, что по этому имени отвечает не трекер - надо переключить A-запись или Cloudflare на наш IP. IP сервера показаны плашками над списком доменов.
  3. Порт 443 открыт? Если открыт только 80, домен покажет статус «сеть - жива, SSL - ошибка» с текстом «нет ответа по HTTPS».
  4. Сертификат выпущен? Проверка делает TLS-рукопожатие и показывает срок действия. Ошибка рукопожатия и «сертификат не предъявлен» - разные вещи: первое обычно значит, что перед нами стоит чужой сервер.

Фоновый монитор перепроверяет домены сам: успешный - раз в 6 часов, с ошибкой - раз в 30 минут, с сертификатом, истекающим меньше чем через 14 дней, - раз в час.

При добавлении домена - «Домен уже заведён»

Домен уже есть в трекере. Не создавайте его заново - подключите к кампании кнопкой «Выбрать домены».

При добавлении домена - ошибка 402

Исчерпан лимит доменов по тарифу лицензии.

Wildcard-домен не ловит нужный поддомен

Wildcard записывается как *.example.com и покрывает поддомены ровно одного уровня: a.example.com подойдёт, a.b.example.com и голый example.com - нет.

Отдельно: автоматический выпуск сертификата wildcard-запись не покрывает - Caddy спрашивает про конкретный хост, а сверка идёт по точному совпадению имени.

Удалил домен, а он всё ещё отдаётся

Caddy спрашивает разрешение только при выпуске сертификата, поэтому уже выписанный продолжал бы работать. При удалении домена трекер ставит задачу на чистку сертификатов. Если агент обновлений не включён, сделайте это руками:

trafmate certificates prune --yes

Клики и отчёты

Клик не записался, а посетитель получил 404

Движок отдаёт 404 на хост, которого нет в разделе «Домены». Это защита: Caddy принимает запросы на любом имени, и раньше чужой хост мог подхватить чужую кампанию. В логе трекера при этом появляется строка вида «хост X не заведён в разделе «Домены» - запросы к нему отдаём 404».

Изменил поток, а на ссылке ничего не поменялось

Движок держит снимок конфигурации в памяти. После любой успешной правки в панели он получает сигнал и перечитывает снимок: отключение потока применяется примерно за полсекунды, включение - за полторы. Есть и страховка - плановое обновление раз в 30 секунд.

Если прошло больше минуты, проверьте, что правка действительно сохранилась (панель показывает ошибку сохранения), и посмотрите доступность Redis в диагностике.

Расход считается не так, как я ожидал

Три частые причины:

  1. Тип стоимости. При CPM значение делится на 1000: CPM 5 даёт расход 0.005 на клик, а не 5. При CPA, CPS и RevShare расход на клике вообще не создаётся - он возникает не в момент клика. При CPUC расход начисляется только на уникальные в кампании клики.
  2. Автоматический расход. Если он включён, параметр cost в ссылке заменяет расчёт по типу стоимости целиком. Имя параметра можно переназначить в соответствии параметров источника.
  3. Потеря трафика. Процент делит расход: расход / (1 - потеря/100). При потере 10% расход клика растёт примерно на 11%. Процент кампании перебивает процент источника.

Отдельно: расход из рекламного кабинета всегда приходит с задержкой. Чтобы проставить настоящие траты задним числом, есть ручное обновление расхода - см. раздел про API. Сумма в нём относится ко всему срезу и делится на его клики.

Отчёт за прошлый месяц изменился сам собой

Если у вас несколько валют - это ожидаемо. Суммы приводятся к валюте трекера в момент построения отчёта, по текущим курсам. Изменили курс - изменились и прошлые отчёты.

Approve % кажется заниженным

Approve % считается как (Продажи + Депозиты) / все Конверсии * 100. Знаменатель включает лиды, регистрации, отклонения и мусор. На наборе 10 лидов, 3 продажи и 2 отклонения получится 20%, а не 60%.

CTR лендинга показывает ровно 100%

Метрика ограничена сотней сверху. Свежие данные превысить её не могут - LP-клик это флаг на клик, а не счётчик нажатий. Ровно 100% означает, что по всем кликам среза было нажатие CTA. В старой истории, записанной когда каждое нажатие добавляло строку, метрика могла показывать больше - потолок нужен именно для неё.

eCPC подозрительно большой

Так и должно быть: eCPC - это расход на тысячу кликов, а не на один. Расход на один клик показывает колонка CPC. Аналогично eCPM - это прибыль на тысячу кликов, а не выручка.

В отчёте по дате конверсии нули в униках, ботах и расходе

Так и задумано. В базисе даты конверсии клик-метрики неприменимы: конверсия относится к дню постбека, а уники и расход - к дню клика. Колонка «Клики» в этом базисе означает число кликов, давших конверсию.

Поиск в логе кликов не находит клик, который точно был

Убедитесь, что период отчёта его покрывает. Поиск идёт на сервере по всему периоду (раньше он фильтровал только уже отданную страницу, и клик часовой давности не находился никогда). Ищется подстрока по идентификатору клика, сабке, external_id, IP, sub_id_1..5, ключевому слову, источнику, идентификаторам кампании и креатива сети, рефереру и адресу назначения.

Эксплуатация

Клики идут, а статистика не растёт

На машинах с 3-4 ГБ оперативной памяти ClickHouse упирается в общий лимит памяти, а не в лимит отдельного запроса. В логах это выглядит как clicks insert failed ... memory limit exceeded. Смотрите диагностику («Настройки» -> «Система»): там видно состояние очереди и воркера.

Помогает уменьшить нагрузку: закрыть лишние вкладки с отчётами (каждая строит свою агрегацию), сузить период отчёта, почистить старую статистику в разделе обслуживания.

Как убедиться, что бэкап рабочий

trafmate backups list      # какие есть: размер, версия, дата
trafmate backups verify    # проверить, НЕ разворачивая
trafmate backups prune     # удалить старые

И главное: бэкап на том же сервере бэкапом не является. Задайте выгрузку наружу (BACKUP_REMOTE или BACKUP_UPLOAD_CMD в .env) - иначе копия уедет вместе с сервером. Это не теория: именно так был потерян архив на выбывшей машине.

Восстановление само снимает страховочную копию приёмника перед затиранием.

Как откатиться на предыдущую версию

trafmate update 1.1.3

trafmate update без аргумента ставит текущую стабильную версию из канала.

Что показывает trafmate status и что делать, если сервис не поднялся

trafmate status показывает состояние контейнеров, trafmate logs <сервис> - логи. Порядок при обновлении важен: миграции применяются до подъёма сервисов, и клиентский тракт соблюдает это сам.

Лицензия

Панель стала read-only

Так выглядит недействительная лицензия. Одновременно движок перестаёт клоачить (отвечает 503), а доставка конверсий останавливается. Запись статистики при этом не блокируется - данные не теряются.

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

Click API отвечает 503

То же самое: при недействительной лицензии Click API закрывается - иначе он был бы обходом остановки трафика.