DSP Content | Postback та трекінг
dsp - обов'язковий параметр для постбеків
Postback
Як виглядатиме приблизно клік по вашій сторінці:
https://sevenupdates.com/2025/08/beachgoers-did-not-see-these-funny-beach-moments-coming?widget_id=57966373&site=rtbsystem.org&number_page=47001&teaser_id=1435583086&abtest=0&os_id=2&title=&offer=tardmusjacque2989872_us&keyword=&user_id=11781472095139629543_1002430649_12064939378970662344&subdomain=us2.rtbsystem.org&dsp=kibr&impression_id=&cost=1.940681&external_id=32d499a9-e104-11ef-9dd0-c4cbe1e3eb40
Як повинен формуватися постбек (GET/POST):https://dsp-postback.rtb-system.online/{dsp}/sale?teaser_id={teaser_id}&widget_id={widget_id}&number_page={number_page}&payout=0&abtest={abtest}&os_id={os_id}&user_id={user_id}&impression_id={impression_id}&subdomain={subdomain}
У фігурних дужках вказаному ім'я параметра, яке треба підсатвити, з URL по якому перейшов користувач (тобто поточної сторінки).
Трекінг ID тизера в MGID Publishers (widget subid - SubID)
В код віджету mgid потрібно буде додати data-src-id значенням якого має бути teaser_id
<div data-type="_mgwidget" data-widget-id="1834344" data-src-id="${teaser_id}"></div> <script>(function(w,q){w[q]=w[q]||[];w[q].push(["_mgc.load"])})(window,"_mgq");</script>
Як приблизно має виглядати:
<div data-type="_mgwidget" data-widget-id="1834344" data-src-id="134345345345"></div> <script>(function(w,q){w[q]=w[q]||[];w[q].push(["_mgc.load"])})(window,"_mgq");</script>
Перегляд статистики
MGID
Якщо все ок трекається то тут в mgid маєте бачити id тизерів
Adsense
Автоматом відслідковує URL, тому там все має бути автоматично.
Але не завжди там буде вся статистика -> https://support.google.com/adsense/answer/11988478?hl=en
Скрипт постбеків
Цей скрипт відслідковує необхідні для постбеку параметри, а також кліки по рекламі MGID та Adsense (не 100% точність).
Підключати його можна двома варіантами:
- одразу на початку <body> в тегу <script>......</script>
- як файл скрипту але з ключем defer <script src="/script.js" defer></script>
<script>
(function() {
// //--Підставляю teser_id як SubID для статистики в MGID та подальшого перерахунку--
//
const urlParams = new URLSearchParams(window.location.search);
// const teaserIdparams = urlParams.get("teaser_id");
// if (teaserId) {
// const mgidWidgets = document.querySelectorAll("[data-widget-id]"); //Формуємо массив всіх віджетів mgid на сторінці
// mgidWidgets.forEach((widget) => {widget.setAttribute("data-src-id", teaserId);}); // Додаємо data-src-id до кожного віджету - це наш SubID
// }
//Формуємо массив параметрів необхідних для постбеку
function getUrlParameters() {
return {
dsp: urlParams.get("dsp"), // required
teaser_id: urlParams.get("teaser_id") || "",
widget_id: urlParams.get("widget_id") || "",
number_page: urlParams.get("number_page") || "",
abtest: urlParams.get("abtest") || "",
os_id: urlParams.get("os_id") || "",
user_id: urlParams.get("user_id") || "",
impression_id: urlParams.get("impression_id") || "",
subdomain: urlParams.get("subdomain") || "",
};
}const //buildGetUrl Відправка= постбеку() function sendPostback()=> {
const payout = 0; //default value
const params = getUrlParameters();
// Формуємо URL постбеку
const postbackParamsqs = new URLSearchParams({
teaser_id: params.teaser_id,
widget_id: params.widget_id,
number_page: params.number_page,
payout: payout,0,
abtest: params.abtest,
os_id: params.os_id,
user_id: params.user_id,
impression_id: params.impression_id,
subdomain: params.subdomain,subdomain
}).toString();
return "https://dsp-postback-v2.rtb-system.online/" + encodeURIComponent(params.dsp) + "/sale?" + qs;
};
function sendPostback(){
if (!params.dsp) return;
const url = buildGetUrl();
fetch(url, { method: "GET", mode: "cors", cache: "no-store" })
.then(res => { if (res.ok) return; throw 0; })
.catch(()=> { fetch(url, { method: "GET", mode: "no-cors", keepalive: true, cache: "no-store" }) .catch(()=> (new Image()).src = url + "&_img=1");});
}
function handleAdsenseClick(){
let downAt = 0;
const mark = e => { if (e.target && (e.target.closest(".ad_click") || e.target.closest(".adsbygoogle"))) downAt = Date.now(); };
document.addEventListener("mousedown", mark, { passive: true });
document.addEventListener("touchstart", mark, { passive: true });
const postbackUrlmaybe = `https://dsp-postback.rtb-system.online/${params.dsp}/sale?${postbackParams}`;() fetch(postbackUrl);
}
// Обробник кліку по рекламі для Google AdSense
function handleAdsenseClick()=> { letif mousedownTime(downAt && Date.now() - downAt < 1500) { sendPostback(); downAt = 0; document.addEventListener("mousedown",} (e) => {if (e.target.closest(".ad_click, .adsbygoogle")) {mousedownTime = Date.now();}});
window.addEventListener("blur", () => {if (Date.now() - mousedownTime < 500) {sendPostback(); mousedownTime = 0;}})maybe);
document.addEventListener("visibilitychange", () => { if (document.hiddenhidden) && Date.now() - mousedownTime < 1000) {sendPostback(maybe(); mousedownTime = 0;}});
}
// Обробник кліку по рекламі для MGID
function handleMgidClick() {
document.addEventListener("click", (e)e => {
const mgidWidgetwidget = e.target.closest("[data-widget-id]");
if (mgidWidget)!widget) {return;
const teaser = e.target.closest("a, [data-hash]");
if (teaser) {sendPostback();
}}, { passive: true });
}
// Ініціалізація скрипта для перехоплення кліків та відправки постбек, якщо наявний обов'язковий параметр dsp
function initClickTracking() {
const params = getUrlParameters();
if (!params.dsp) { console.warn("dsp - required parameter not found"); return;} handleAdsenseClick(); handleMgidClick(); }
initClickTracking();
})();
</script>

