Максим Вознюк

+56
с 2021

Интернет-маркетолог. Рассказываю о том, как автоматизировать процесс работы рекламных кампаний и не только 👋

13 подписчиков
13 подписок
Думай иначе

Think Different

Сделал телеграм-бот для автоматизации рекламных кампаний в Я.Директ. Часть 2

Всем привет. В июне я писал статью, где делился своим телеграм-ботом для оптимизации рекламы. В течение полугода я работал над ним в свободное время, не гнался за сроками и разрабатывал в комфортном темпе.

2
Создаем кнопку бабло 🫰: Автоматическая оптимизация рекламных кампаний с помощью Direct и Telegram API

Признаюсь честно, я долго не решался писать на эту тему. Никогда не учился кодить, и мне бывает сложно использовать профессиональный сленг, объясняя простыми словами то, что сам понимаю скорее интуитивно. Однако возможности автоматической оптимизации всегда меня крайне сильно интересовали. Ведь это значительно экономит время, освобождает внимание,…

7
Создаем кастомную цель в Яндекс Метрике на основе поведения пользователей.

Приветствую вас! Сегодня я хочу поделиться подходом к созданию кастомных целей, основанных на действиях пользователей на сайте. В случаях, когда я работаю со сложным или дорогостоящим продуктом, количество прямых конверсионных действий может быть недостаточным для эффективного обучения рекламных кампаний.

4
), '$1');\n\nif (cookieValue) {\ncurrentViews = parseInt(cookieValue, 10);\nif (isNaN(currentViews)) {\ncurrentViews = 0; // Сброс, если значение не число\n}\n}\n\ncurrentViews++;\n\n// Устанавливаем cookie на сеанс (удаляется при закрытии браузера)\n// Если нужно хранить дольше сеанса, можно добавить expires=... или max-age=...\ndocument.cookie = cookieName + '=' + currentViews + '; path=/; SameSite=Lax';\n\n// Опционально: вывести в консоль для отладки\n// console.log('Page views count updated:', currentViews);\n\n})();\n\u003C/script\u003E","lang":""}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Нажмите на секцию \"Триггеры\".","Выберите триггер \"Окно загружено\".\u003Cbr /\u003E","Сохраните тег.\u003Cbr /\u003E"],"type":"UL"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Шаг 4: Настройка триггеров для времени на сайте и скролла страницы"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Cb\u003EТриггер для времени на сайте:\u003C/b\u003E\u003C/p\u003E"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Перейдите в \"Триггеры\".","Нажмите \"Создать\".\u003Cbr /\u003E","Назовите триггер, например, Timer - 60 Seconds.\u003Cbr /\u003E","Тип триггера: \"Таймер\".\u003Cbr /\u003E","Имя события: gtm.timer (оставьте по умолчанию).\u003Cbr /\u003E","Интервал: 60000 (миллисекунды = 60 секунд или поменяйте на свое значение).\u003Cbr /\u003E","Ограничение: 1 (чтобы сработал только один раз на странице).\u003Cbr /\u003E","Условия активации триггера: \"Все события-таймеры\" (или укажите конкретные страницы, если нужно).\u003Cbr /\u003E","Сохраните триггер.\u003Cbr /\u003E"],"type":"UL"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Шаг 5: Тег для отправки события в Яндекс.Метрику"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЭтот тег будет содержать основную логику проверки всех условий и отправку цели reachGoal. Мы будем использовать sessionStorage, чтобы избежать повторной отправки цели в рамках одного сеанса, если пользователь выполнит условия несколько раз. В GTM перейдите в \"Теги\":\u003C/p\u003E"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Нажмите \"Создать\".","Назовите тег, например, HTML - Yandex Metrica - involved_user Event.\u003Cbr /\u003E","Тип тега: \"Пользовательский HTML\"\u003Cbr /\u003E","В поле HTML вставьте следующий код. Обязательно замените ВАШ_ID_СЧЕТЧИКА на реальный ID вашего счетчика (можно использовать переменную {{Yandex Metrica ID}}) и involved_user на ваш идентификатор цели из Шага 1.\u003Cbr /\u003E"],"type":"UL"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cscript\u003E\n (function() {\n // --- Настройки ---\n var metricaCounterId = 'ВАШ_ID_СЧЕТЧИКА'; // Замените или используйте {{Yandex Metrica ID}}\n var goalName = 'involved_user'; // Замените на ваш идентификатор цели\n var pageViewsCookieName = 'gtm_page_views'; // Должно совпадать с именем cookie из Шага 2 и 3\n var minPageViews = 2; // Нужно \u003E 1 страницы, т.е. минимум 2\n var timeThreshold = 60000; // 60 секунд в мс\n var scrollThreshold = 60; // 60%\n var sessionStorageFlag = 'ym_complex_engagement_fired'; // Флаг, что событие уже отправлено\n\n // --- Логика проверки ---\n\n // 0. Проверить, не отправляли ли уже событие в этом сеансе\n if (sessionStorage.getItem(sessionStorageFlag) === 'true') {\n // console.log('YM Complex Goal: Already fired in this session.');\n return;\n }\n\n // 1. Проверить количество просмотров страниц\n var pageViews = 0;\n var pvCookieValue = document.cookie.replace(new RegExp('(?:(?:^|.*;\\\\s*)' + pageViewsCookieName + '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.* ), '$1');\n if (pvCookieValue) {\n pageViews = parseInt(pvCookieValue, 10);\n }\n if (isNaN(pageViews) || pageViews \u003C minPageViews) {\n // console.log('YM Complex Goal: Page views condition not met (' + pageViews + ').');\n return; // Условие по страницам не выполнено\n }\n\n // 2. Проверить время на сайте (используем факт срабатывания триггера Timer)\n // Мы знаем, что этот тег сработает ТОЛЬКО если сработал триггер таймера И триггер скролла (см. Шаг 6)\n // Поэтому отдельная проверка времени здесь не нужна, если используется Trigger Group.\n // Если триггеры будут отдельные, тут нужна будет доп. логика с sessionStorage/флагами.\n\n // 3. Проверить глубину скролла (используем факт срабатывания триггера Scroll)\n // Аналогично пункту 2 - проверка не нужна при использовании Trigger Group.\n\n // --- Отправка цели ---\n try {\n if (typeof ym === 'function') {\n ym(metricaCounterId, 'reachGoal', goalName);\n // console.log('YM Complex Goal: Fired!', goalName);\n\n // Установить флаг, что событие отправлено в этом сеансе\n sessionStorage.setItem(sessionStorageFlag, 'true');\n } else {\n console.error('Yandex Metrica function (ym) not found.');\n }\n } catch (e) {\n console.error('Error sending Yandex Metrica goal:', e);\n }\n\n })();\n\u003C/script\u003E","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E*\u003Cb\u003E Важно: Если вы используете переменную {{Yandex Metrica ID}} вместо прямого указания ID счетчика в коде, замените 'ВАШ_ID_СЧЕТЧИКА' на {{Yandex Metrica ID}} (без кавычек).\u003C/b\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EТриггер: Вот здесь ключевой момент — нам нужно, чтобы тег сработал только тогда, когда и таймер сработал, и скролл достигнут. Используем группу триггеров:\u003C/p\u003E"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Нажмите \"+\" в правом верхнем углу, чтобы создать новый триггер.","Назовите триггер, например, TG - 60s AND 60% Scroll.\u003Cbr /\u003E","Тип триггера: \"Группа триггеров\".\u003Cbr /\u003E","Нажмите \"Выберите триггер\" и добавьте созданные ранее триггеры: Timer - 60 Seconds, Scroll - 60 Percent.","Убедитесь, что опция \"Активировать этот триггер при выполнении всех условий (...)\" выбрана (это по умолчанию).\u003Cbr /\u003E","Сохраните триггер группы.\u003Cbr /\u003E","Выберите этот триггер (TG - 60s AND 60% Scroll) для вашего тега HTML - Yandex Metrica - Complex Engagement Event.\u003Cbr /\u003E","Сохраните тег.\u003Cbr /\u003E"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EГотово, осталось только протестировать цель и убедиться что все работает:\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"09fcd066-566f-5334-bce0-5260598fa308","width":1692,"height":169,"size":12084,"type":"png","color":"dbd9d6","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAJQAlAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIECf/EAB8QAAEDBAMBAAAAAAAAAAAAAAEAAhEDBBITIVKRcf/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/8QAFhEBAQEAAAAAAAAAAAAAAAAAAAER/9oADAMBAAIRAxEAPwDUsNthS0h1PXEYyIhXKmwgtrACAyjx8TKbFWLeo8UUYt6jxB//2Q=="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВы можете взять мой шаблон скрипта или подставить свои значения при необходимости, или обратиться ко мне, если нужно отслеживать другие события на сайте. Буду рад сотрудничеству.\u003C/p\u003E"}},{"type":"link","cover":false,"hidden":false,"anchor":"","data":{"link":{"type":"link","data":{"url":"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Ft.me%2FMaxOVo&postId=1922477","title":"Maxim Voznyuk","description":"рџ“€Marketing","image":{"type":"image","data":{"uuid":"0c5ec522-6456-5837-a7a9-efa6a12645d2","width":180,"height":180,"size":4016,"type":"png","color":"26a5e4","hash":"","external_service":[]}},"v":1,"hostname":"t.me"}}}}],"customUri":"kastomnye-tseli-v-yandeks-metrike","commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"commentsSeenCount":null,"counters":{"comments":0,"favorites":1,"reposts":0,"views":393,"hits":387,"reads":null,"online":0,"timespent":null,"shares":0,"reactions":4,"link_clicks":0,"subs_post_island":0,"show_comments_count":0,"total":785},"isPinned":false,"isNews":false,"ogTitle":null,"ogDescription":"Создание кастомных целей в Яндекс Метрике, анализ поведения пользователей, настройка GTM, определение ключевых действий, оптимизация рекламных кампаний","isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"summaryContent":null,"isExistSummaryContent":false,"reactions":{"counters":[{"id":1,"count":4}],"reactionId":0},"url":"https://vc.ru/marketing/1922477-kastomnye-tseli-v-yandeks-metrike","repostData":null,"dateFavorite":0,"isFavorited":false,"warningFromEditorTitle":null,"warningFromEditor":null,"subscribedToTreads":false,"author":{"id":779649,"name":"Максим Вознюк","nickname":null,"description":"Интернет-маркетолог. Рассказываю о том, как автоматизировать процесс работы рекламных кампаний и не только 👋","uri":"","avatar":{"type":"image","data":{"uuid":"1ae97b5c-3500-572b-b435-2f7fe1779865","width":1254,"height":1254,"size":1113290,"type":"png","color":"d1d1d1","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAgYHCP/EACUQAAIBAwMCBwAAAAAAAAAAAAECAwAEEQUGIQcSEyJBUVJhkf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwDTG6NAtZOou3teltT45EYtbhYWMkSq/nQPnhWyMgDnnNBR3EYdgYTkE+lA5rBA4jd4Y2aM5QlQSp+vagDsX4j8oP/Z"}},"cover":{"cover":{"type":"image","data":{"uuid":"4963838f-7454-5b9a-b626-90d521d531a9","width":4896,"height":3264,"size":329702,"type":"jpg","color":"638eca","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAAKAAoDASEAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAwUGCP/EACYQAAIBAwIEBwAAAAAAAAAAAAECAwAEBREhBgciQRIVFzFRYYH/xAAVAQEBAAAAAAAAAAAAAAAAAAAGBf/EABwRAAICAwEBAAAAAAAAAAAAAAEDAAIEISISof/aAAwDAQACEQMRAD8AJn+YuPsbUpl7nh2FgCQsEYeTbt0Lt+1HeufCK9PkEz6beIIu/wB+9Lr5ik87P2HqY7GdTPeelle7nZ5HZmcliWJJOvelup+aOMJ9GWqDU//Z"}},"cover_y":60},"achievements":[{"title":"5 лет на vc.ru","code":"registration_5_years","description":"Провёл 5 лет вместе с vc.ru. Получена 6 апреля 2026.","previewUuid":"a9140d54-73b8-5f40-afa8-449fbaafd42b","formats":{"glb":"https://static.vc.ru/achievements/whale.glb","usdz":"https://static.vc.ru/achievements/whale.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.533203125,"textY":0.658203125,"logoX":0.533203125,"logoY":0.77734375,"logoXNoText":0.4375,"logoYNoText":0.66015625},"id":7149159,"userId":779649,"count":0,"shareImage":"https://api.vc.ru/achievements/share/7149159"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4657386,"userId":779649,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4657386"},{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":1033299,"userId":779649,"count":0,"shareImage":"https://api.vc.ru/achievements/share/1033299"}],"collectibles":[{"type":"achievement","data":{"title":"5 лет на vc.ru","code":"registration_5_years","description":"Провёл 5 лет вместе с vc.ru. Получена 6 апреля 2026.","previewUuid":"a9140d54-73b8-5f40-afa8-449fbaafd42b","formats":{"glb":"https://static.vc.ru/achievements/whale.glb","usdz":"https://static.vc.ru/achievements/whale.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.533203125,"textY":0.658203125,"logoX":0.533203125,"logoY":0.77734375,"logoXNoText":0.4375,"logoYNoText":0.66015625},"id":7149159,"userId":779649,"count":0,"shareImage":"https://api.vc.ru/achievements/share/7149159","dateAchieved":1775423133,"isPinned":false}},{"type":"achievement","data":{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4657386,"userId":779649,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4657386","dateAchieved":1753346655,"isPinned":false}},{"type":"achievement","data":{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":1033299,"userId":779649,"count":0,"shareImage":"https://api.vc.ru/achievements/share/1033299","dateAchieved":1753293278,"isPinned":false}}],"lastModificationDate":1789274358,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"category":{"discoveryType":"blogs"},"counters":{"subscribers":13},"favoriteCollectible":{"type":"achievement","data":{"id":7149159,"previewUuid":"a9140d54-73b8-5f40-afa8-449fbaafd42b","title":"5 лет на vc.ru"}},"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":199113,"name":"Маркетинг","description":"Рекламные кейсы из России и других стран, советы по продвижению, маркетинг и digital.","uri":"/marketing","avatar":{"type":"image","data":{"uuid":"d66009fe-9bf0-52da-bdbf-4c758eba39e7","width":2400,"height":2400,"size":841299,"type":"jpg","color":"f97373","hash":"0c1cf06cf0d010","external_service":[]}},"cover":{"type":"image","data":{"uuid":"5488a646-f32d-57a6-a31f-d290afc4388a","width":960,"height":280,"size":177,"type":"png","color":"fc7c7c","hash":"","external_service":[]}},"lastModificationDate":1661337194,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"marketing","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"donations":{"amount":0,"isDonated":false},"isBlur":false}}],"cursor":"PuR2GsZKFTvhhGtYB4zm78HbBa8hRyGI6YitsrXO+VvHeLfWP7Kpw0lf6m5EnCBg","isAnonymized":true}};