View difference between Paste ID: nHNQCK5W and 74g0e1bn
SHOW: | | - or go back to the newest paste.
1
<script>
2
document.addEventListener("DOMContentLoaded", function() {
3
    // Настройки
4-
    const webhookUrl = 'https://n8n-panel.ru/webhook/d998bdc2-2225-45f4-a490-9b4013de88d7'; // Замените на URL вашего вебхука
4+
    const webhookUrl = 'https://n8n-panel.ru/webhook/d998bdc2-2225-45f4-a490-9b4013de88d6'; // Замените на URL вашего вебхука
5-
    const yandexMetrikaID = '71553979'; // Замените на ID вашего счетчика Яндекс Метрики
5+
    const yandexMetrikaID = '89972470'; // Замените на ID вашего счетчика Яндекс Метрики
6
7
    // Функция для генерации случайной строки
8
    function generateRandomString(length) {
9
        const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
10
        let result = '';
11
        for (let i = 0; i < length; i++) {
12
            const randomIndex = Math.floor(Math.random() * characters.length);
13
            result += characters[randomIndex];
14
        }
15
        return result;
16
    }
17
18
    // Функция для установки cookie
19
    function setCookie(name, value, days) {
20
        let expires = "";
21
        if (days) {
22
            const date = new Date();
23
            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
24
            expires = "; expires=" + date.toUTCString();
25
        }
26
        let secure = location.protocol === 'https:' ? "; Secure" : "";
27
        document.cookie = name + "=" + (value || "") + expires + "; path=/" + secure;
28
    }
29
30
    // Функция для получения значения cookie по имени
31
    function getCookie(name) {
32
        const nameEQ = name + "=";
33
        const ca = document.cookie.split(';');
34
        for (let i = 0; i < ca.length; i++) {
35
            let c = ca[i];
36
            while (c.charAt(0) === ' ') c = c.substring(1, c.length);
37
            if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
38
        }
39
        return null;
40
    }
41
42
    // Функция для проверки и сохранения данных в localStorage, если куки не работают
43
    function saveData(key, value) {
44
        try {
45
            localStorage.setItem(key, value);
46
        } catch (e) {
47
            console.error("Не удалось сохранить данные в localStorage:", e);
48
        }
49
    }
50
51
    function loadData(key) {
52
        try {
53
            return localStorage.getItem(key);
54
        } catch (e) {
55
            console.error("Не удалось загрузить данные из localStorage:", e);
56
            return null;
57
        }
58
    }
59
60
    // Функция для отправки данных на вебхук
61
    function sendToWebhook(webhookUrl, data) {
62
        fetch(webhookUrl, {
63
            method: 'POST',
64
            headers: {
65
                'Content-Type': 'application/json'
66
            },
67
            body: JSON.stringify(data)
68
        })
69
        .then(response => response.json())
70
        .then(data => console.log('Success:', data))
71
        .catch((error) => console.error('Error:', error));
72
    }
73
74
    // Функция для извлечения UTM-параметра из URL
75
    function getUTMParameter(name) {
76
        const urlParams = new URLSearchParams(window.location.search);
77
        return urlParams.get(name);
78
    }
79
80
    // Извлекаем UTM-метки из URL и сохраняем в куки
81
    const utmSource = getUTMParameter("utm_source");
82
    const utmCampaign = getUTMParameter("utm_campaign");
83
84
    if (utmSource) {
85
        setCookie("vechkasov_utm_source", utmSource, 30);
86
        saveData("vechkasov_utm_source", utmSource);
87
    }
88
89
    if (utmCampaign) {
90
        setCookie("vechkasov_utm_campaign", utmCampaign, 30);
91
        saveData("vechkasov_utm_campaign", utmCampaign);
92
    }
93
94
    // Проверка, если куки не сохраняются, используем localStorage
95
    const generatedCode = getCookie("vechkasov_wa") || loadData("vechkasov_wa");
96
    const codeGenerationTime = getCookie("vechkasov_code_time") || loadData("vechkasov_code_time");
97
    const lastWebhookTime = getCookie("vechkasov_time") || loadData("vechkasov_time");
98
    let currentTime = Math.floor(Date.now() / 1000);
99
100
    let shouldSendWebhook = false;
101
102
    // Проверяем, если код нужно обновить
103
    if (!generatedCode || !codeGenerationTime || (currentTime - parseInt(codeGenerationTime, 10)) > (7 * 24 * 60 * 60)) {
104
        // Если кода нет или он старше 7 дней, генерируем новый
105
        const randomString = generateRandomString(8);
106
        setCookie("vechkasov_wa", randomString, 30);
107
        setCookie("vechkasov_code_time", currentTime, 30);
108
109
        // Сохраняем в localStorage на случай, если куки не работают
110
        saveData("vechkasov_wa", randomString);
111
        saveData("vechkasov_code_time", currentTime.toString());
112
113
        console.log("Generated new string:", randomString);
114
        shouldSendWebhook = true;
115
    } else {
116
        console.log("Using existing string:", generatedCode);
117
    }
118
119
    // Проверяем, нужно ли отправить данные на вебхук (если прошло больше недели с последней отправки)
120
    if (!lastWebhookTime || (currentTime - parseInt(lastWebhookTime, 10)) > (7 * 24 * 60 * 60)) {
121
        shouldSendWebhook = true;
122
    }
123
124
    // Получение clientID через API Яндекс Метрики
125
    function getYandexMetrikaClientID(callback) {
126
        if (typeof Ya !== 'undefined' && typeof Ya.Metrika !== 'undefined') {
127
            var counter = Ya.Metrika.counters[yandexMetrikaID];
128
            if (counter) {
129
                counter.getClientID(function(id) {
130
                    console.log("ClientID из API Метрики:", id);
131
                    callback(id);
132
                });
133
            } else {
134
                callback(null);
135
            }
136
        } else {
137
            callback(null);
138
        }
139
    }
140
141
    // Проверка clientID через 1 секунду
142
    setTimeout(function() {
143
        getYandexMetrikaClientID(function(clientID) {
144
            if (!clientID) {
145
                console.warn("Не удалось получить clientID");
146
                clientID = getCookie("_ym_uid") || loadData("_ym_uid");
147
                console.log("Используем clientID из куков:", clientID);
148
            } else {
149
                saveData("_ym_uid", clientID);
150
            }
151
152
            if (shouldSendWebhook && clientID) {
153
                // Готовим данные для отправки на вебхук
154
                const webhookData = {
155
                    clientID: clientID,
156
                    generatedCode: generatedCode || getCookie("vechkasov_wa"),
157
                    generationTime: codeGenerationTime || currentTime,
158
                    utmSource: utmSource || getCookie("vechkasov_utm_source") || loadData("vechkasov_utm_source"),
159
                    utmCampaign: utmCampaign || getCookie("vechkasov_utm_campaign") || loadData("vechkasov_utm_campaign")
160
                };
161
162
                console.log("Готовы отправить данные на вебхук:", webhookData);
163
164
                // Отправляем данные на вебхук
165
                sendToWebhook(webhookUrl, webhookData);
166
167
                // Обновляем время последней отправки вебхука
168
                setCookie("vechkasov_time", currentTime, 30);
169
                saveData("vechkasov_time", currentTime.toString());
170
            } else if (!clientID) {
171
                console.warn("ClientID не получен. Вебхук не отправлен.");
172
            }
173
174
            // Функция для замены _NUMBER_ на сгенерированный код в href
175
            function replaceNumberInHref() {
176
                const code = getCookie("vechkasov_wa") || loadData("vechkasov_wa");
177
                if (code) {
178
                    const links = document.querySelectorAll('a[href*="_NUMBER_"]');
179
                    links.forEach(link => {
180
                        // Создаем новый URL-объект для безопасного изменения параметров
181
                        const url = new URL(link.href);
182
                        const textParam = url.searchParams.get("text");
183
184
                        if (textParam) {
185
                            // Заменяем _NUMBER_ на сгенерированный код
186
                            const newTextParam = textParam.replace("_NUMBER_", code);
187
                            url.searchParams.set("text", newTextParam);
188
                            link.href = url.toString();
189
                            console.log("Ссылка изменена:", link.href);
190
                        }
191
                    });
192
                } else {
193
                    console.warn("Код для замены в href не найден.");
194
                }
195
            }
196
197
            // Вызываем функцию замены _NUMBER_ на сгенерированный код
198
            replaceNumberInHref();
199
        });
200
    }, 1000); // Проверяем через 1 секунду
201
});
202
203
</script>