Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <script>
- document.addEventListener("DOMContentLoaded", function() {
- // Настройки
- const webhookUrl = 'https://n8n-panel.ru/webhook/d998bdc2-2225-45f4-a490-9b4013de88d7'; // Замените на URL вашего вебхука
- const yandexMetrikaID = '71553979'; // Замените на ID вашего счетчика Яндекс Метрики
- // Функция для генерации случайной строки
- function generateRandomString(length) {
- const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
- let result = '';
- for (let i = 0; i < length; i++) {
- const randomIndex = Math.floor(Math.random() * characters.length);
- result += characters[randomIndex];
- }
- return result;
- }
- // Функция для установки cookie
- function setCookie(name, value, days) {
- let expires = "";
- if (days) {
- const date = new Date();
- date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
- expires = "; expires=" + date.toUTCString();
- }
- let secure = location.protocol === 'https:' ? "; Secure" : "";
- document.cookie = name + "=" + (value || "") + expires + "; path=/" + secure;
- }
- // Функция для получения значения cookie по имени
- function getCookie(name) {
- const nameEQ = name + "=";
- const ca = document.cookie.split(';');
- for (let i = 0; i < ca.length; i++) {
- let c = ca[i];
- while (c.charAt(0) === ' ') c = c.substring(1, c.length);
- if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
- }
- return null;
- }
- // Функция для проверки и сохранения данных в localStorage, если куки не работают
- function saveData(key, value) {
- try {
- localStorage.setItem(key, value);
- } catch (e) {
- console.error("Не удалось сохранить данные в localStorage:", e);
- }
- }
- function loadData(key) {
- try {
- return localStorage.getItem(key);
- } catch (e) {
- console.error("Не удалось загрузить данные из localStorage:", e);
- return null;
- }
- }
- // Функция для отправки данных на вебхук
- function sendToWebhook(webhookUrl, data) {
- fetch(webhookUrl, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify(data)
- })
- .then(response => response.json())
- .then(data => console.log('Success:', data))
- .catch((error) => console.error('Error:', error));
- }
- // Функция для извлечения UTM-параметра из URL
- function getUTMParameter(name) {
- const urlParams = new URLSearchParams(window.location.search);
- return urlParams.get(name);
- }
- // Извлекаем UTM-метки из URL и сохраняем в куки
- const utmSource = getUTMParameter("utm_source");
- const utmCampaign = getUTMParameter("utm_campaign");
- if (utmSource) {
- setCookie("vechkasov_utm_source", utmSource, 30);
- saveData("vechkasov_utm_source", utmSource);
- }
- if (utmCampaign) {
- setCookie("vechkasov_utm_campaign", utmCampaign, 30);
- saveData("vechkasov_utm_campaign", utmCampaign);
- }
- // Проверка, если куки не сохраняются, используем localStorage
- const generatedCode = getCookie("vechkasov_wa") || loadData("vechkasov_wa");
- const codeGenerationTime = getCookie("vechkasov_code_time") || loadData("vechkasov_code_time");
- const lastWebhookTime = getCookie("vechkasov_time") || loadData("vechkasov_time");
- let currentTime = Math.floor(Date.now() / 1000);
- let shouldSendWebhook = false;
- // Проверяем, если код нужно обновить
- if (!generatedCode || !codeGenerationTime || (currentTime - parseInt(codeGenerationTime, 10)) > (7 * 24 * 60 * 60)) {
- // Если кода нет или он старше 7 дней, генерируем новый
- const randomString = generateRandomString(8);
- setCookie("vechkasov_wa", randomString, 30);
- setCookie("vechkasov_code_time", currentTime, 30);
- // Сохраняем в localStorage на случай, если куки не работают
- saveData("vechkasov_wa", randomString);
- saveData("vechkasov_code_time", currentTime.toString());
- console.log("Generated new string:", randomString);
- shouldSendWebhook = true;
- } else {
- console.log("Using existing string:", generatedCode);
- }
- // Проверяем, нужно ли отправить данные на вебхук (если прошло больше недели с последней отправки)
- if (!lastWebhookTime || (currentTime - parseInt(lastWebhookTime, 10)) > (7 * 24 * 60 * 60)) {
- shouldSendWebhook = true;
- }
- // Получение clientID через API Яндекс Метрики
- function getYandexMetrikaClientID(callback) {
- if (typeof Ya !== 'undefined' && typeof Ya.Metrika !== 'undefined') {
- var counter = Ya.Metrika.counters[yandexMetrikaID];
- if (counter) {
- counter.getClientID(function(id) {
- console.log("ClientID из API Метрики:", id);
- callback(id);
- });
- } else {
- callback(null);
- }
- } else {
- callback(null);
- }
- }
- // Проверка clientID через 1 секунду
- setTimeout(function() {
- getYandexMetrikaClientID(function(clientID) {
- if (!clientID) {
- console.warn("Не удалось получить clientID");
- clientID = getCookie("_ym_uid") || loadData("_ym_uid");
- console.log("Используем clientID из куков:", clientID);
- } else {
- saveData("_ym_uid", clientID);
- }
- if (shouldSendWebhook && clientID) {
- // Готовим данные для отправки на вебхук
- const webhookData = {
- clientID: clientID,
- generatedCode: generatedCode || getCookie("vechkasov_wa"),
- generationTime: codeGenerationTime || currentTime,
- utmSource: utmSource || getCookie("vechkasov_utm_source") || loadData("vechkasov_utm_source"),
- utmCampaign: utmCampaign || getCookie("vechkasov_utm_campaign") || loadData("vechkasov_utm_campaign")
- };
- console.log("Готовы отправить данные на вебхук:", webhookData);
- // Отправляем данные на вебхук
- sendToWebhook(webhookUrl, webhookData);
- // Обновляем время последней отправки вебхука
- setCookie("vechkasov_time", currentTime, 30);
- saveData("vechkasov_time", currentTime.toString());
- } else if (!clientID) {
- console.warn("ClientID не получен. Вебхук не отправлен.");
- }
- // Функция для замены _NUMBER_ на сгенерированный код в href
- function replaceNumberInHref() {
- const code = getCookie("vechkasov_wa") || loadData("vechkasov_wa");
- if (code) {
- const links = document.querySelectorAll('a[href*="_NUMBER_"]');
- links.forEach(link => {
- // Создаем новый URL-объект для безопасного изменения параметров
- const url = new URL(link.href);
- const textParam = url.searchParams.get("text");
- if (textParam) {
- // Заменяем _NUMBER_ на сгенерированный код
- const newTextParam = textParam.replace("_NUMBER_", code);
- url.searchParams.set("text", newTextParam);
- link.href = url.toString();
- console.log("Ссылка изменена:", link.href);
- }
- });
- } else {
- console.warn("Код для замены в href не найден.");
- }
- }
- // Вызываем функцию замены _NUMBER_ на сгенерированный код
- replaceNumberInHref();
- });
- }, 1000); // Проверяем через 1 секунду
- });
- </script>
Advertisement
Add Comment
Please, Sign In to add comment