Перейти к основному контенту
(function () {
var FLAG_KEY = "recross_tg_test";
var FLAG_VALUE = "1";
// ← налаштуй
var LINK_MODE = "direct"; // "direct" | "api"
var BOT_USERNAME = "RECROSS_dev_bot";
var API_BASE = "https://ВАШ-ПУБЛІЧНИЙ-API.qteam.dev"; // лише для LINK_MODE=api
function isTestMode() {
try {
return localStorage.getItem(FLAG_KEY) === FLAG_VALUE;
} catch (e) {
return false;
}
}
function findOrderId() {
try {
if (window.dataLayer && window.dataLayer.length) {
for (var i = window.dataLayer.length - 1; i >= 0; i--) {
var ev = window.dataLayer[i] || {};
if (ev.ecommerce && ev.ecommerce.transaction_id) {
return String(ev.ecommerce.transaction_id);
}
if (ev.transaction_id) return String(ev.transaction_id);
if (ev.order_id) return String(ev.order_id);
}
}
} catch (e1) {}
try {
var text = document.body ? document.body.innerText || "" : "";
var m =
text.match(/Замовлення\s*№?\s*(\d{3,12})/i) ||
text.match(/Order\s*#?\s*(\d{3,12})/i) ||
text.match(/№\s*(\d{3,12})/);
if (m) return m[1];
} catch (e2) {}
try {
var params = new URLSearchParams(window.location.search);
var fromQuery = params.get("order") || params.get("order_id") || params.get("id");
if (fromQuery && /^\d{3,12}$/.test(fromQuery)) return fromQuery;
} catch (e3) {}
return null;
}
function findPhoneDigits() {
try {
var text = document.body ? document.body.innerText || "" : "";
var m =
text.match(/\+?38\s*\(?0\d{2}\)?[\s\-]*\d{3}[\s\-]*\d{2}[\s\-]*\d{2}/) ||
text.match(/0\d{9}/);
if (!m) return null;
var digits = m[0].replace(/\D/g, "");
if (digits.length === 10 && digits[0] === "0") digits = "38" + digits;
if (digits.length >= 12) return digits.slice(0, 12);
return digits.length >= 9 ? digits : null;
} catch (e) {
return null;
}
}
function looksLikeSuccessPage() {
var path = (window.location.pathname || "").toLowerCase();
var href = (window.location.href || "").toLowerCase();
if (/success|thank|thanks|complete|checkout|order/.test(path + " " + href)) {
return true;
}
var text = (document.body && document.body.innerText) || "";
return /дякуємо|спасибо|thank you|замовлення\s*№/i.test(text);
}
function buildHref(orderId) {
if (LINK_MODE === "api") {
return API_BASE.replace(/\/$/, "") + "/go/" + encodeURIComponent(orderId);
}
var phone = findPhoneDigits();
if (!phone) return null;
var start = "o" + orderId + "_" + phone;
return "https://t.me/" + BOT_USERNAME + "?start=" + start;
}
function mountButton(orderId, href) {
if (document.getElementById("recross-tg-test-btn")) return;
var wrap = document.createElement("div");
wrap.id = "recross-tg-test-btn";
wrap.style.cssText =
"margin:24px auto;max-width:480px;padding:16px;text-align:center;" +
"font-family:system-ui,sans-serif;border:2px dashed #1d6b4f;border-radius:12px;background:#e5f4ee;";
var note = document.createElement("div");
note.textContent = "TEST MODE — localStorage recross_tg_test=1";
note.style.cssText = "font-size:12px;color:#667;margin-bottom:10px;";
var a = document.createElement("a");
a.href = href;
a.target = "_blank";
a.rel = "noopener noreferrer";
a.textContent = "Підтвердити замовлення в Telegram";
a.style.cssText =
"display:inline-block;padding:14px 20px;background:#1d6b4f;color:#fff;" +
"text-decoration:none;border-radius:10px;font-weight:700;font-size:16px;";
var sub = document.createElement("div");
sub.textContent = "Замовлення №" + orderId;
sub.style.cssText = "margin-top:8px;font-size:13px;color:#333;";
wrap.appendChild(note);
wrap.appendChild(a);
wrap.appendChild(sub);
var host = document.querySelector(
".checkout-success, .order-success, .thank-you, main, .content, body",
);
(host || document.body).appendChild(wrap);
}
function tryMount() {
if (!isTestMode()) return;
if (!looksLikeSuccessPage()) return;
var orderId = findOrderId();
if (!orderId) return;
var href = buildHref(orderId);
if (!href) {
console.warn("[recross] order id є, але телефон на сторінці не знайдено (direct mode)");
return;
}
mountButton(orderId, href);
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", function () {
tryMount();
setTimeout(tryMount, 1500);
setTimeout(tryMount, 4000);
});
} else {
tryMount();
setTimeout(tryMount, 1500);
setTimeout(tryMount, 4000);
}
})();