Динамический ремаркетинг для калькуляторов

Каждый мужчина в жизни должен сделать 3 вещи: посадить дерево, построить дом и настроить автоматическую генерацию фида для динамического ремаркетинга через диспетчер тегов от Google.

Pourquoi?

В Google Adwords есть классный инструмент, позволяющий после посещения всяких e-shop’ов догонять вас рекламой продуктов, которые вы посмотрели или “забыли” в корзине. Но! Это вполне конкретные продукты с конкретными ценами. А как быть, если клиент у вас считает стоимость ремонта, путевки на троих, пиццу на тонком тесте с колбасками по кругу, ежемесячный платеж по ипотеке или и того хуже - страховку?! Хочется же тоже догнать его и чисто по-человечески:

Эй, 1000167059.1490858211, дарагой, скидку дам, дагаваримся!
a good web-analyst

Более того! Если у вас достаточно информации о клиенте, вы можете заранее делать расчет и показывать ему персональную рекламу.

Смотрите, общая идея такова: при каждом расчете будем создавать фиктивные продукты в фиде и периодически заносим их в Adwords.

Для реализации подготовьте в браузере следующие вкладки: Google Tag Manager, Google SpreadsheetsGoogle Apps Script и Google Adwords. Теперь, когда самое сложное позади, распишу план действий:

  1. Готовим шаблон фида под разные продукты в Spreadsheets
  2. Пишем приложение в Apps Script, которое принимает данные из url и закидывает в фид
  3. Подключаем скрипт к Tag Manager
  4. Подключаем скрипт к Adwords
  5. Ставим код динамического ремаркетинга через Tag Manager

Автор (бишь я) предполагает, что вы уже умеете узнавать, когда клиент сделал расчет, и сколько у него получилось. В другой статье я рассмотрю кейсы на эту тему.

Шаблон фида в Spreadsheets

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

Правда, у меня есть еще вкладка Легенда для всего, что вставляется ”по умолчанию”.

Шаблон специального фида

Вот вам сам документ, пользуйтесь, пожалуйста.  

Генерация фида через Apps Script

Следующим этапом направляемся в Инструменты - Редактор скриптов... Постарался подробно закомментить код, тем не менее готов ответить на вопросы в конце статьи. doGet() - стандартная функция в Apps Script, обрабатывающая параметры, переданные GET-запросом, которые мы суем в url

 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
var SHEET_KEY = "15qsZmsnCkTFuoMIfetb8qgXEi8POyjQ3ndhPliA6c8f8"; // идентификатор таблицы, берется из url
var SHEET_NAME = 'Продукт1'; //лист по умолчанию
var LEGEND_NAME = "Легенда"; //лист с предустановками 
var DISCOUNT_NAME = "Скидка"; //имя поля с размером скидки
var AMOUNT = 2000; //количество сохраняемых расчетов

function doGet(e){
  SHEET_NAME = e.parameter.product; // параметр product из url определяет лист
  var lock = LockService.getPublicLock();
  try {
    var doc = SpreadsheetApp.openById(SHEET_KEY);
    var sheet = doc.getSheetByName(SHEET_NAME);
    var legend = doc.getSheetByName(LEGEND_NAME);
    var headRow = e.parameter.header || 1; //параметр header определяет ряд заголовков, по умолчанию первая строка
    var headers = sheet.getRange(headRow, 1, 1, sheet.getLastColumn()).getValues()[0];
    var row = [];
    var priceID, ID; //id цены для простановки скидки
    // переменные в запросе должны соответствовать заголовкам в колонках, иначе берем из легенды
    for (i in headers){
      var l = getLegend(headers[i], SHEET_NAME, legend) || e.parameter[headers[i]];
      //особые варианты
      switch(headers[i]) {
        case 'ID' :
          ID = i;
          break;
        case 'Price' :
          priceID = i;
          break;      
        case 'Sale price' :
          l = parseFloat(row[priceID]) * ( 1 - parseFloat(getLegend(DISCOUNT_NAME, SHEET_NAME, legend))); //скидка
          break;
      }
      row.push(l);
    }
    var old = getId(row[ID], sheet); // проверяем повторный ID и удаляем
    if(old) sheet.deleteRow(old);
    if (row[priceID]) sheet.getRange(sheet.getLastRow() + 1, 1, 1, row.length).setValues([row]); // чекаем нормальную цену на всякий случай и записываем ряд
    if(sheet.getLastRow() > AMOUNT) sheet.deleteRow(2); // проверяем лимит и удаляем самый старый ряд.
  } catch(e){
    return ContentService
          .createTextOutput(JSON.stringify({"result":"error", "error": e}))
          .setMimeType(ContentService.MimeType.JSON);
  } finally {
    lock.releaseLock();
  }
}
// поиск предустановки по листу, названиям ряда и столбца
function getLegend (rowName, colName, legend) {
  var data = legend.getSheetValues(1, 1, -1, -1);
  for (var col in data) {
    if (data[0][col] == colName) break;
  }
  for (var row in data) {
    if (data[row][0] == rowName) break;
  }
  return data[row][col];
}
// поиск ID
function getId(id, sheet) {
  //var data = sheet.getDataRange();
  var data = sheet.getSheetValues(1, 1, -1, 1);
  for (var row in data) {
    if(data[row][0] == id) return parseInt(row) + 1;
  }
  return 0;
}

  Не забудьте зарелизить приложение через Публикация - Развернуть как веб-приложение.... В этом случае бонусом получите ссылку, чтобы его использовать.

Динамический ремаркетинг Adwords - генерация фида в Apps Script

 

Передача данных в Spreadsheets через Tag Manager

Создаем новый тег с типом Пользовательское изображение, вставляем ссылку на скрипт, добавив в конце параметры, должно получиться что-то вроде этого:

  где {{valueCost}} содержит то, что насчитал клиент, а {{idGoogleClient}} - его cid. Триггерить надо по событию расчета, но на этот момент все переменные должны быть определены.

Динамический ремаркетинг Adwords - генерация фида в Spreadsheets через Tag Manager

  Ну и на всякий случай:

Никакого изображения конечно не появится
a good web-analyst
 

Автоматическое обновление аудитории в Adwords

Прежде чем научить этого рекламного левиафана автоматически забирать наш фид, придется сперва создать его вручную. Поэтому выгружаем  csv через Файл - Скачать как и сразу же создаем прямую ссылку через Файл - Опубликовать в интернете...

Динамический ремаркетинг Adwords - публикация фида

  Переходим в Google Adwords, держим путь в Общую библиотеку - Коммерческие данные. Чтобы добавить фид жамкаем Закачали csv‘шку, заходим в появившийся фид, вкладка Запланированные загрузки. Здесь ни в чем себе не отказывайте, надо только качестве источника выбрать HTTPS и вставить ссылку на опубликованный лист.  

Динамический ремаркетинг через Tag Manager

Статья длинная, так что ловите еще гифку.

Пришло время заставить это все работать, в чем нам снова поможет диспетчер тегов от Google. Заводим новый тег с типом Ремаркетинг Adwords, проставляем Идентификатор конверсии (где взять, написано там же), пользовательские параметры проставляем вручную. Триггером - событие расчета.

Динамический ремаркетинг Adwords - настройка Tag Manager

 

comments powered by Disqus