Блог про интернет-маркетинг для бизнеса

PPC

Автоматизируем ремаркетинг ВКонтакте с помощью R и Google Tag Manager

161
0
34
33

ВКонтакте, в отличие от Facebook, не предоставляет возможность динамического ремаркетинга, позволяющего подставлять данные о товаре в объявление и показывать пользователям только те товары, которыми они интересовались. Конечно, этот обидный факт не раз огорчал создателей кампаний в ВК. Но в новом гостевом посте веб-аналитик Николай Глушков описал простой способ создания десятков, а то и сотен списков ремаркетинга в ВКонтакте с помощью языка R и Google Tag Manager. 

Смысл данной статьи — показать, как без привлечения вашего IT-отдела с помощью нехитрых приемов можно автоматизировать необходимые процессы маркетинга. Возьмем в качестве примера сайт norakrolika.ru — это сеть квестов, представленная в нескольких городах России. Страницей товара у нас в данном случае будет страница квеста. Страницей товара у нас в данном случае будет страница квеста В статье не будет рассказано, как установить R, Google Tag Manager и начать работать с этими инструментами. Вы можете самостоятельно освоить эти материалы. Переходим к самому алгоритму.

1. Авторизируем приложение ВКонтакте

1.1. Переходим по ссылке.

1.2. Регистрируем Standalone-приложение.

1.3. Переходим в настройки — понадобится id-приложения. Переходим в настройки, нам понадобится id-приложения

1.4. Далее мы должны получить токен для доступа к API. Переходим по ссылке:

https://oauth.vk.com/authorize?client_id={id вашего приложения}& redirect_uri=http://oauth.vk.com/blank.html& display=popup&scope=ads&response_type=token

1.5. Вас перебросит на страницу:

https://oauth.vk.com/blank.html#access_token=xxxx&expires_in=86400&user_id=xxx

где значение access_token – ваш ключ доступа к API. Запомните его. Если появилась ошибка:

{"error":"invalid_request","error_description":"Security Error"}

 просто перезайдите в ВК.

2. Получаем список всех квестов

На этом этапе нам нужно получить таблицу с квестами из двух полей:

  • id квеста;
  • название квеста.

Это можно сделать разными способами: выгрузить из Google Analytics в формате csv или выгрузить из базы данных.

Я получу список товаров, используя API Google Analytics (для этого на сайте должен стоять модуль расширенной электронной торговли).

2.1. Открываем RStudio и создаем новый файл типа R Script.

2.2. Устанавливаем все необходимые библиотеки:

install.packages("httr")
install.packages("stringr")
install.packages(RJSONIO)
install.packages(RGA)

Подключаем:

library("httr") #Для работы с http-запросами
library("stringr") #для работы со строками
library("RJSONIO") #для работы с json
library("RGA") #для работы с API Google Analytics

Получаем токен для доступа в Google Analytics:

#авторизируемся в Google
ga_token <- authorize(client.id = "xxxx", client.secret = "yyyyy")

list_product <- get_ga(profileId = "xxxx",  #id представления Google Analytics(найти его можно в настройках представления)
start.date = "2016-07-01", #дата начала выгрузки
end.date = "2016-07-01", #дата конца выгрузки
dimensions = "ga:productSku,ga:productName", #список параметров
metrics = "ga:productDetailViews") #список метрик

Так мы получим dataFrame со списком квестов и следующими полями:

  • list_product$productSku — id квеста;
  • list_product$productName — название квеста;
  • list_product$productDetailViews — количество просмотров карточки квеста.

Аналогичным образом мы можем получить такой же dataFrame, загрузив csv-файл через функцию read.csv:

list_product = read.csv("путь к файлу", header = TRUE)

3. Создаем списки ремаркетинга через API

Итак, у нас есть список всех товаров. Теперь надо для каждого товара создать список ретаргетинга и получить его код.

Каждый такой код имеет одинаковую структуру и возвращается в ответе при обращении к API.

Структура кода:

<script type="text/javascript">// <![CDATA[
(window.Image ? (new Image()) : document.createElement('img')).src = location.protocol + '//vk.com/rtrg?r={pixel_id}';
// ]]></script>

Меняется только лишь pixel_id, то есть по сути нам нужны id квеста и id пикселя, привязанного к конкретному квесту.

Получаем следующий код:

#создаем пустой список для дальнейшего генерирования json-файла
array_list<- vector(mode="list")

#запускаем цикл n-раз, где n- количество квестов
for(i in 1:nrow(list_product) ) { 

  #для каждого квеста делаем POST-запрос к методу ads.createTargetGroup
  #который создает список ремаркетинга
  pixel_resp<-content(POST("https://api.vk.com/method/ads.createTargetGroup",

                           body = list(account_id = xxxx,   #id вашего рекламного кабинета
                                       name = list_product$productName[i], #название списка ретаргетинга
                                       domain ="norakrolika.ru",  #домен сайта
                                       lifetime=15,   #время жизни списка
                                       access_token="xxx" #токен доступа, получили на предыдуoем шаге
                           )))

  #Используем регулярные выражения, вытаскиваем id пикселя
  rtg_id<-str_match(pixel_resp$response$pixel, "(?<=r\=)[^']+")[,1]

  #arr - массив, необходимый для генерирования json-контейнера, подробно на следующем шаге
  arr <- vector(mode="list")

  arr[[1]]<- list(
    "type"="TEMPLATE",
    "key"="key",
    "value"= list_product$productSku[i]
  )

  arr[[2]]<- list(
    "type"= "TEMPLATE",
    "key"= "value",
    "value"= rtg_id

  )
  array_list[[i]]<-list(
    "type" = "MAP",
    "map" = arr
  )

  #ставим задержку 1 секунду
  Sys.sleep(1)

}

Что мы сделали:

  • cоздали пустой массив array_list, из которого будет генерироваться json (подробно об этом на следующем шаге);
  • в цикле пробежались по каждому квсесту и сделали списки ретаргетинга;
  • создали еще один массив и занесли в него информацию id квеста и id пикселя.

4. Генерируем специальный json-файл формата «переменная lookup table»

На этом шаге мы должны получить валидный json-файл, который будет содержать переменную типа «таблица поиска» и принимать входную переменную id товара, а также, в случае нахождения, на выход отдавать id пикселя.

На предыдущем шаге мы создали пустой массив:

array_list<- vector(mode="list")

и заполнили его следующей информацией:

arr[[1]]<- list(
  "type"="TEMPLATE",
  "key"="key",
  "value"= list_product$productSku[i]   #id квеста
)

arr[[2]]<- list(
  "type"= "TEMPLATE",
  "key"= "value",
  "value"= rtg_id  #id пикселя
)
array_list[[i]]<-list(
  "type" = "MAP",
  "map" = arr
)

Здесь говорится, что в качестве ключа мы принимаем id товара, а в качестве значения будем отдавать id пикселя. На следующем шаге нам необхоимо сгенирировать список с определенной структурой, который мы потом преобразуем в json-файл.

#пустой массив со списком gtm-переменных
array_var<-vector(mode="list")

#пустой массив со списком настроек переменной
array_parameter<-vector(mode="list")

array_parameter[[1]]<-list(
  "type" = "BOOLEAN",
  "key" = "setDefaultValue",
  "value" = "false"

)
array_parameter[[2]]<-list(
  "type"="TEMPLATE",
  "key"= "input",
  "value"= "{{product id}}" #то, что таблица поиска будет принимать на вход, в данном случае id квеста

)
array_parameter[[3]]<-list(
  "type"= "LIST",
  "key"= "map",
  "list"= array_list #список со всеми id квестов и id пикселей

)

array_var[[1]]<-list(
  "accountId"="xxx", #id аккауна GTM
  "containerId"= "xxx", #id контейнера GTM
  "variableId"= "1",
  "name"= "lookup table", #название gtm-переменной
  "type"="smm",
  "parameter" = array_parameter

)

#конечный список
lookup_json = list(
  "exportFormatVersion" = 1.3,
  "containerVersion" =list( "variable" = array_var  )
)
#преобразовываем список в json-строку
exportJson <- toJSON(lookup_json)

#сохраняем все в виде json-файла
write(exportJson, "lookup_json.json")

Кстати, id аккаунта и id контейнера можно получить из url в GTM: id аккаунта и id контейнера можно получить из url в GTM

В итоге у нас должен получиться такой файл:

{
    "exportFormatVersion": 1.3,
    "containerVersion": {
        "variable": [{
            "accountId": "xxxx",
            "containerId": "xxxxx",
            "variableId": "1",
            "name": "lookup table",
            "type": "smm",
            "parameter": [{
                "type": "BOOLEAN",
                "key": "setDefaultValue",
                "value": "false"
            }, {
                "type": "TEMPLATE",
                "key": "input",
                "value": "{{product id}}"
            }, {
                "type": "LIST",
                "key": "map",
                "list": [{
                    "type": "MAP",
                    "map": [{
                        "type": "TEMPLATE",
                        "key": "key",
                        "value": "1408"
                    }, {
                        "type": "TEMPLATE",
                        "key": "value",
                        "value": "xxxxxxxx"
                    }]
                }, {
                    "type": "MAP",
                    "map": [{
                        "type": "TEMPLATE",
                        "key": "key",
                        "value": "alkhimiya"
                    }, {
                        "type": "TEMPLATE",
                        "key": "value",
                        "value": "xxxx"
                    }]
                }

5. Настраиваем Google Tag Manager

Теперь надо импортировать json в GTM и создать один тег ремаркетинга.

5.1. Заходим в раздел импорта контейнера. Заходим в раздел импорта контейнера 5.2. Загружаем туда наш json-файл. Загружаем туда наш json-файл Подтверждаем импорт

У нас должна создаться gtm-переменная «lookup table». У нас должна создаться gtm-переменная «lookup table» 5.3 Создаем тег ретаргетинга ВК. Создаем тег ретаргетинга ВК Условия активации в данном случае — просмотр карточки товара. Готово! В итоге должны получиться списки для всех товаров, которые заполнятся пользователями, посмотревшими эти товары. В итоге должны получиться списки для всех товаров, которые заполнятся пользователями, посмотревшими эти товары Аналогично можно настроить списки на тех, кто совершил какое-то действие на странице товара, например, посмотрел отзывы или фотографии.

Выводы

Так, с помощью базовых навыков программирования можно автоматизировать рутинную работу без помощи дорогостоящих специалистов. Весь алгоритм можно разбить на несколько шагов:

  1. Авторизируем приложение ВКонтакте.
  2. Получаем статистику по товарам.
  3. Для каждого товара создаем список ремаркетинга через API.
  4. Генерируем специальный json-файл формата «Переменная lookup table».
  5. Настраиваем Google Tag Manager.

Внедрение алгоритма занимает 15 минут. Попробуйте сами и убедитесь.

Читайте продолжение статьи об автоматическом создании объявлений для списков ретаргетинга ВКонтакте.

Комментарии (8)

  1. 0
    год назад

    ДД, подскажите пожалуйста, rtg_id<-str_match(pixel_resp$response$pixel, "(?<=r\=)[^']+")[,1] кажется тут ошибка, скрипт не отрабатывает, но если поставь код единого пикселя то все работает гуд

    • 1
      Leonid Guryev
      год назад

      Что выводит команда print(pixel_resp$response$pixel)?
      должна выводит строку с пикселем
      Какая ошибка?
      библиотека stringr подключена?

      • 0
        Николай Глушков
        год назад

        наверно я про библиотеку забыл, но если Вам интересно реализовали этот код на Python, могу поделится, может быть кому-то будет удобнее работать с питоном

  2. 0
    год назад

    А это всё еще актуально когда появился единый пиксель для всех страниц?

  3. 2
    год назад

    Ребята, вот такие посты мега полезны, спасибо!

  4. 3
    год назад

    Спасибо за отличный контент!

Чтобы оставить комментарий, необходимо авторизироваться

Подписаться

на самую полезную рассылку по интернет-маркетингу

Самое

обсуждаемое популярное читаемое