Как вы проверяете ставки, которые приходят от монетизаторов в Adfox Header Bidding?
Можно использовать метод, который указан в документации Adfox:
window.Ya.headerBidding.getLastBidsReceived();
Но он покажет только последние ставки, а если вы хотите запросить все ставки можно использовать метод:
window.Ya.headerBidding.getBidsReceived();
Удобнее, но если монетизаторов и рекламных блоков много, то можно голову сломать, пока разберёшь весь этот массив. Поэтому я сделал 2 новых сниппета, для лапочек-коллег
1. Отображаем только активные ставки - где есть цена.
Получаем таблицу всех ставок, монетизаторов, ID кампаний, ID контейнеров, eCPM, размеры и другие. А также краткую статистику ставок.
(function() {
const bids = window.Ya?.headerBidding?.getBidsReceived?.();
if (!Array.isArray(bids)) {
console.warn("Данные о ставках отсутствуют или неверны.");
return;
}
const totalBids = bids.length;
const validBids = bids.filter(bid => bid.cost && !bid.errorCode);
const validBidsCount = validBids.length;
const percentage = ((validBidsCount / totalBids) * 100).toFixed(2);
if (validBidsCount === 0) {
console.info("Нет активных ставок.");
} else {
console.table(validBids.map(bid => ({
'Adapter': bid.adapterName,
'Container ID': bid.containerId,
'Campaign ID': bid.campaignId,
'CPM (RUB)': bid.cost.cpm,
'Size': bid.size ? `${bid.size.width}x${bid.size.height}` : 'N/A',
'Banner URL': bid.banner?.src || 'N/A',
'Request Duration (ms)': bid.requestDuration
})));
}
console.log(`Статистика Header Bidding:`);
console.log(`Ставок всего: ${totalBids}`);
console.log(`Ставок с ценой: ${validBidsCount}`);
console.log(`% ставок с ценой: ${percentage}%`);
})();2. Но что делать, если нужны пустые или ставки с ошибками? Используем второй сниппет, который отобразит в консоли таблицу со всеми ставками по каждой ошибке - вместе с её кратким описанием.
(function() {
const errorDescriptions = {
0: "Неизвестная ошибка.",
1: "Отсутствие ставки или ответа.",
2: "Некорректный ответ.",
3: "Таймаут.",
4: "Ошибка HTTP-протокола.",
5: "Некорректные пользовательские данные в конфигурационном скрипте.",
6: "Некорректные настройки монетизатора.",
7: "Монетизатор прислал ID контейнера, отличный от ID в запросе.",
8: "Монетизатор прислал корректный ответ без статуса.",
9: "В ответе монетизатора отсутствует codeType или он некорректный."
};
const bids = window.Ya?.headerBidding?.getBidsReceived?.();
if (!Array.isArray(bids)) {
console.warn("Данные о ставках отсутствуют или неверны.");
return;
}
const errorBids = bids.filter(bid => bid.errorCode);
if (errorBids.length === 0) {
console.info("Нет ставок с ошибками.");
return;
}
const groupedErrors = errorBids.reduce((acc, bid) => {
acc[bid.errorCode] = acc[bid.errorCode] || [];
acc[bid.errorCode].push(bid);
return acc;
}, {});
Object.keys(groupedErrors).sort((a, b) => a - b).forEach(errorCode => {
const description = errorDescriptions[errorCode] || "Описание отсутствует.";
console.log(`\nОшибка ${errorCode} (${description}): ${groupedErrors[errorCode].length} ставок`);
console.table(groupedErrors[errorCode].map(bid => ({
'Adapter': bid.adapterName,
'Container ID': bid.containerId,
'Campaign ID': bid.campaignId,
'Error Code': bid.errorCode,
'Request Duration (ms)': bid.requestDuration
})));
});
})();Инструкция по созданию сниппета будет в комментариях. Но если сниппеты - это скучно, а нужен плагин для браузера, накидайте огоньков - попробую сделать.