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

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

Pourquoi?

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

Эй, 1000167059.1490858211, дарагой, скидку дам, дагаваримся!

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

Тонкости настройки аналитики в Telegram канале

Содержание

  1. Pourquoi?
  2. Шаблон фида в Spreadsheets
  3. Генерация фида через Apps Script
  4. Передача данных в Spreadsheets через Tag Manager
  5. Автоматическое обновление аудитории в Adwords
  6. Динамический ремаркетинг через Tag Manager
  7. Комментарии

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

Для реализации подготовьте в браузере следующие вкладки:  Google Tag Manager, Google Spreadsheets Google 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

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

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

https://script.google.com/macros/s/AKfycbw8VT4b0kn5oDRWKA2sMvgv49uBvPjWpgFMn2YrxdtC2HA9uvxG/exec?product=Продукт1&ID=idGoogleClient&Price=valueCost где valueCost содержит то, что насчитал клиент, а idGoogleClient - его cid. Триггерить надо по событию расчета, но на этот момент все переменные должны быть определены.

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

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

Никакого изображения конечно не появится

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

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

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

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

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

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

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

Автор (бишь я) осознает, что все описанное выше можно бесконечно улучшать и допиливать под разные ситуации. Меня интересовала сама возможность автоматически подстраивать объявления под конкретного человека, используя только продукты Google. Если дерзнете воспользоваться - отпишитесь в комментариях, как оно у вас, переживаю ж.