Сейчас в сети: 437
Учитесь работать в AdWords вместе с нами!
star_border

Скрипты AdWords. Контроль над расходами.

При всем богатстве инструментов AdWords некоторых функций все же не хватает.


Например, нельзя выделить на отдельно взятую кампанию 1000 рублей. 
Вы скажете, что есть дневной бюджет, и будете правы, но он решает задачу дневного и среднемесячного расхода. Но не более того.
 
Также Вы, наверняка, знаете, что от дневного бюджета - зависит количество возможных показов в день. Многие рекламодатели используют расписание, отключая рекламу на ночь.
Но система, зная сколько ей выделили денег на сутки, продолжает их бережливо резервировать и растягивать даже на то время, когда реклама физически выключена. Конечно можно увеличить бюджет в двое или перейти с равномерной на ускоренную модель показа, но при таких условиях расходы могут внезапно вырасти. По странному стечению обстоятельств не все этому рады.

Кто виноват и что делать?
Виноватых тут нет. А вот "что делать", вдохновленный статьями Владимира Конвута для себя решил этот вопрос при помощи скрпитов AdWords. 
Чтобы упросить использование тем, кто со скриптами на "Вы" все настройки вынесены в Таблицу Google. 
 
Итак для полноценной работы скрипта, ему нужны
  1. Название кампании
  2. Размер ограничения
  3. Стартовая дата отслеживания
  4. Электронная почта для уведомлений.

Все эти данные необходимо внести в электронную табличку (сохраните себе в Google Disk) http://goo.gl/ywSu7
Сохраните ссылку из браузера своего документа, она понадобится на следующих шагах.
 
Табличку можно раскрасить по вкусу, а менять расположение ячеек не стоит, заполняем строчки которые выделены жирным шрифтом.
  
Вот содержание скрипта, с максимальными комментариями. Для скачивания тут http://goo.gl/QY9by
function main() {
var ss = SpreadsheetApp.openByUrl(
    "https://docs.google.com/spreadsheet/ccc?key=0Ahq3mrXBUIYHdDBtZS1FUFBuamZQU2FWSTB4MzZDT1E#gid=0");//Ссылка на свою таблицу
  var balance = ss.getRange("C3").getValue();  //Сумма ограничений
  var data_start =  ss.getRange("C4").getValue(); //Дата с которой происходит отслеживание
  data_start = Utilities.formatDate(data_start, "PST", "yyyyMMdd");
  var data_today = new Date();//Сегодняшняя дата
  data_today = Utilities.formatDate(data_today, "PST", "yyyyMMdd");
  
  var company_name = ss.getRange("C2").getValue(); //Название отслеживаемой кампании
  var email = ss.getRange("C5").getValue();  //Электронная почта для уведомлений
  var cost = 0;// Начальная стоимость
  var status = ss.getRange("E7").getValue(); //Статус кампании (была ли отключена скрпитом)
  var campaignsIterator = AdWordsApp.campaigns()
  .withCondition("Name = '" + company_name + "'")
      . get();
   
   while (campaignsIterator.hasNext()) {
    var campaign = campaignsIterator.next();
    var stats = campaign.getStatsFor(data_start, data_today);
    cost += stats.getCost();   
  }//Определение стоимости затрат за указанный интервал времени
  
  if( campaign.isEnabled()){
    ss.getRange("E7").setValue("0");
    ss.getRange("D7").setValue("");
    //Определение состояния кампании включена/выключена. Если включена обнолвяет служебную информацию.
  var budget = campaign.getBudget()
     Logger.log("Потрачено за период: " + cost);//Отладочная информация выводится в журнале
     Logger.log("Ежедневный бюджет: " + budget);
     Logger.log("Ограничения расходов: " + balance);
  var budget=campaign.getBudget()//Определение ежедневного бюджета
    
  if (cost >= balance-(budget/12)) {//Проверка перерасхода
    campaign.pause();//Ставим кампаниию в паузу и пишем письмо
    var subject = "Кампания " + company_name + " исчерпала свой предельный бюджет";
    var body = "Потрачено: " + cost +  " Указанный предел расходов:" + balance + " кампания " + company_name + "  будет отключена" ;
    MailApp.sendEmail(email, subject, body);
    Logger.log("Отправлена почта: " + email);//Отладочная информация выводится в журнале
    ss.getRange("E7").setValue("1");//Служебная отметка в Гугл таблице
    ss.getRange("D7").setValue(new Date());//Запись в таблицу времени и дата остановки кампании
    
      } 
   }
 }
 
 
Установка скрипта

1)Переходим в раздел "Операции над несколькими элементами," выбираем "Скрипты".
Жмем add-script.png
 
2)Чтобы все заработало  - необходимо разрешить выполнение скрипта. Разрешаем.
 
add.png
 
3)В поле для редактирования вносим скрипт полностью.
4) В строчке номер три, вставляем ссылку на свою табличку
 
ad-table-1.png
 
5) Сохраняем.

Все, скрипт готов к работе.
Убедиться в корректности да можно по кнопке Просмотр. На вкладке журнал, если вы видите email, значит условия ограничений выполнились и пора проверять почтовый ящик.
 
ad-log.png
На вкладке "Показать изменения" отражаются изменения, которые бы внес скрипт, будучи запущенным прямо сейчас.
 
 Осталось только настроить расписание в списке скриптов и разобраться с логикой программы.

ad-rasp.png
 
 
Что внутри?

Алгоритм работы таков:

  1. Раз в час (чаще пока нельзя) скрипт забирает из таблицы название кампании, сумму ограничений, дату начала отслеживания
  2. Подсчитывает расходы
  3. Проверяет, активна ли кампания, если активна - выставляет служебные метки в таблице. Если не активна - полезных действий не производит и останавливается .*
  4. Запрашивает ежедневный бюджет аккаунта (чуть ниже объясню почему)
  5. Производит вычисление, сравнивая затраты на кампанию, начиная с определенной даты по сегодняшний момент, с пороговым значением отключения. Если достигнуто, переходит в пункт 6. **
  6. Отключает кампанию
  7. Отправляет письмо на указанную почту
  8. Производит запись в Гугл табличке, что кампания отключена и время ее отключения.
 
* Служебная отметка нужна для того, чтобы скрипт не писал нам раз в час очевидные вещи. 

** Ежедневный бюджет нужен для примитивного расчета поправки. Так как скрипт выполняется не чаще раза в час,  обозначенная сумма ограничений может накопиться в этом интервале. Чтобы уменьшить эту вероятность, берем дневной бюджет и распределяем его скажем на 12 часов и тем самым чуть занижаем планку.
Например: Сумма ограничения 1000 рублей. Дневной бюджет - 120 рублей. Скрипит должен остановить кампанию, если расходы равны или превысят: 1000-120/12 = 990 руб.
 
После того, как кампания отработала свои деньги, можно ничего не предпринимать.
Если необходим такой контроль для новой кампании, введите в гугл табличке новые данные, и при следующем заходе скрипта условия начнут отслеживаться.

Внимание: Если вы включите кампанию после автоматического отключения, скрипт по-прежнему будет проверять условия, и если они удовлетворяют требованиям - кампанию выключит. Чтобы этого не происходило, нужно изменить условия или выключить скрипт.
 
Вот и все. Если есть вопросы пишите в комментариях. 

Романовский Павел
Специально для ru.adwords-community.com

Павел Романовский

Всем привет. Я Ведущий участник данного сообщества с 2013 года. Меня зовут Романовский Павел, живу и работаю в Минске, Беларусь. Люблю интересные, необычные и сложные задачи. Дружу с контекстом и аналитикой. В свободной время - учу Java Script, PHP и битрикс, летаю на гоночных квадрокоптерах.

Комментарии
Александр Ц
августа 2014

demureless написано:

При всем богатстве инструментов AdWords некоторых функций все же не хватает.


Например, нельзя выделить на отдельно взятую кампанию 1000 рублей. 
Вы скажете, что есть дневной бюджет, и будете правы, но он решает задачу дневного и среднемесячного расхода. Но не более того.
 
Можно поставить автоматизированное правило, когда стоимость компании будет больше или равно 1000 рублей - остановить компанию.
demureless Ведущий участник
августа 2014

"Можно поставить автоматизированное правило, когда стоимость компании будет больше или равно 1000 рублей - остановить компанию."

Все верно, только это функция в автоматических правилах появилась на 3-6 месяцев позже чем дата публикации статьи.

Nevada K
декабря 2015
Александр
Ноябрь

Здравствуйте.

Возможно ли реализация подобного скрипта для нескольких кампаний с одного листа в Google таблицах?

 

https://docs.google.com/spreadsheets/d/1MfYJiq1ac7y5wOlaBIaB_1Moxf0RJU_vwUONlYhOqhc/edit#gid=1228125...