fix реклама Яндекса: сегмент Аудиторий указывается с приставкой 20 — без неё Директ отвечает «объект не найден»
Настоящая причина, по которой портал не мог завести кампанию. Прежний диагноз «сегменту нужно не меньше 1000 опознанных людей» оказался ВЫДУМКОЙ: он был построен на статьях, а не на замере, и увёл в ожидание, которое ничего не решало. Что происходит. Сегмент Аудиторий указывается в условии ретаргетинга не своим номером, а номером с приставкой 20: сегмент 58034825 уходит как ExternalId 2058034825. Без приставки Директ ищет цель Метрики с таким номером и честно отвечает 8800 «Object not found» — тем же отказом, что и на несуществующий сегмент. Поэтому поломка выглядела как «аудитория не готова». Замер на боевом кабинете 30.07 на одном и том же ГОТОВОМ сегменте: ExternalId 58034825 -> отказ 8800 «Object not found» ExternalId 2058034825 -> условие создано, № 41678818 После починки то же самое кодом портала: условие № 41678854 создано и убрано за собой. Приставку показал сам Яндекс: у уже существующего в кабинете условия на этот сегмент retargetinglists.get возвращает ровно "ExternalId": 2058034825. Документация про приставки говорит глухо и только «для интересов» — живой ответ кабинета оказался надёжнее документации. Попутно снят ложный «дефект продукта». Порога в 1000 человек НЕ существует: сегмент годится для Директа при 134 опознанных людях из 151 номера. Минимум портала менять не нужно. Ещё один замер, важный на будущее: статус is_processed у сегмента — это НЕ «готов», у готового статус processed, заполнены matched_quantity и cookies_matched_quantity, и стоит can_create_dependent. Судить о готовности только по can_create_dependent. Тестов на приставку было ДВА, и оба закрепляли поломку: проверяли, что уходит номер БЕЗ приставки. Оба были зелёные всё время. Тест, написанный по нашему представлению о правде, а не по ответу живой системы, охраняет баг и делает его невидимым. Теперь оба проверяют приставку и падают без неё; реклама портала 43 из 43. Вместе с починкой ложатся три промта смен: 29.07 сведение телеграма и прокси, 29.07 робот креативов в работу и 30.07 состояние после живой приёмки. В последнем ложный диагноз про порог в 1000 человек помечен как неверный прямо в шапке — чтобы следующая смена не пошла по нему второй раз. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -344,9 +344,39 @@ it('в условие ретаргетинга кладёт срок хране
|
||||
Http::assertSent(function ($req) {
|
||||
$arg = $req->data()['params']['RetargetingLists'][0]['Rules'][0]['Arguments'][0];
|
||||
|
||||
expect($arg['ExternalId'])->toBe(58276009);
|
||||
expect($arg['ExternalId'])->toBe(2058276009);
|
||||
expect($arg['MembershipLifeSpan'])->toBe(30);
|
||||
|
||||
return true;
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 🔴 Сегмент Аудиторий в условии ретаргетинга указывается НЕ своим номером, а номером
|
||||
* с приставкой «20»: сегмент 58034825 → ExternalId 2058034825. Без приставки живой Директ
|
||||
* отвечает «Object not found» — он ищет цель Метрики с таким номером и, конечно, не находит.
|
||||
*
|
||||
* Замер 30.07.2026 на боевом кабинете, один и тот же ГОТОВЫЙ сегмент:
|
||||
* ExternalId 58034825 → отказ 8800 «Object not found»
|
||||
* ExternalId 2058034825 → условие создано, № 41678818
|
||||
* Приставку подсказал сам Яндекс: у уже существующего в кабинете условия на этот сегмент
|
||||
* в `retargetinglists.get` стоит ровно `"ExternalId": 2058034825`.
|
||||
*
|
||||
* 🪤 Прежний тест закреплял поломку: он проверял, что уходит номер БЕЗ приставки. Тест,
|
||||
* написанный по нашему представлению о правде, а не по ответу живой системы, охраняет баг.
|
||||
*/
|
||||
it('сегмент Аудиторий уходит с приставкой 20 — иначе Директ не находит объект', function () {
|
||||
Http::fake(['*/json/v5/retargetinglists' => Http::response(['result' => ['AddResults' => [['Id' => 7]]]])]);
|
||||
|
||||
$client = new YandexDirectClient('https://api.direct.yandex.com', 'T');
|
||||
|
||||
expect($client->addRetargetingList('Лидерра #6', 58034825, 30))->toBe(7);
|
||||
|
||||
Http::assertSent(function ($req) {
|
||||
$arg = $req->data()['params']['RetargetingLists'][0]['Rules'][0]['Arguments'][0];
|
||||
|
||||
expect($arg['ExternalId'])->toBe(2058034825);
|
||||
|
||||
return true;
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user