Протягом року багато державних свят та додаткових вихідних днів. Для частини бізнесів немає сенсу рекламуватися у такі дні. Особливо це стосується тих, хто надає термінові послуги: аварійне відкриття замків, послуги евакуатора, ветклініки. Також це актуально для компаній із великою часткою звернень телефоном.
Можна вручну зупиняти рекламу перед вихідними днями та вручну вмикати в робочий день. Можна постійно налаштовувати велику кількість автоправил. Але навіщо, якщо можна оптимізувати та довірити всю роботу скрипту.
Як користуватися скриптом:
- Кампанії, до яких повинен застосовуватися скрипт, потрібно присвоїти ярлик (за замовчуванням це ярлик “active”);
- У скрипті треба в змінній daysOff вказати дати вихідних днів без пробілів і через кому у форматі “dd-mm-yyyy”, dd-дні, mm-місяць, yyyy-рік;
- Встановити в скрипті змінної labelName свій ярлик, якщо використовуєте якийсь інший, який відрізняється від “active”;
- Авторизувати роботу скрипту та налаштувати розклад роботи “Щоденної ночі”.
/******************************************************* * Скрипт останавливает кампании в доп.выходные дни и запускает на следующий рабочий день * Version 1.2 * April 25, 2019 * Created By: Denys German * CBRAND.agency ********************************************************/ var days_off = '28-04-2019,29-04-2019,30-04-2019,01-05-2019,09-05-2019';//задаем даты выходных дней, в которые кампании не должны работать без пробелов в формате dd-mm-yyyy var labelName = 'active';//ярлык кампаний, к которым будет применяться скрипт var statusSwitcher = 0; function main() { //Подготовка списка дат var todayStr = new Date(); var yesterdayStr = new Date(); yesterdayStr.setDate(todayStr.getDate() - 1); var todayStrFromat = Utilities.formatDate(todayStr, AdsApp.currentAccount().getTimeZone(), 'dd-MM-yyyy'); var yesterdayStrFromat = Utilities.formatDate(yesterdayStr, AdsApp.currentAccount().getTimeZone(), 'dd-MM-yyyy'); var dataFormatArr = days_off.split(','); //Алгоритм определения того, что делать с кампаниями: включать, выключать, ничего не делать for (var i=0; i<dataFormatArr.length; i++) { if(dataFormatArr[i]==todayStrFromat) { statusSwitcher = 1; break; } else if(dataFormatArr[i]==yesterdayStrFromat) statusSwitcher = 2; } //Блок включения/выключения кампаний switch (statusSwitcher) { case 1: pauseCampaign(); break; case 2: enableCampaign(); break; default: Logger.log('Никаких изменений'); } } //Остановка кампаний function pauseCampaign() { var campaignIterator = AdsApp.campaigns() .withCondition("LabelNames CONTAINS_ANY ['" + labelName + "']") .get(); var shopingcampaignIterator = AdsApp.shoppingCampaigns() .withCondition("LabelNames CONTAINS_ANY ['" + labelName + "']") .get(); var videocampaignIterator = AdsApp.videoCampaigns() .withCondition("LabelNames CONTAINS_ANY ['" + labelName + "']") .get(); while(campaignIterator.hasNext()) { campaignIterator.next().pause(); } while(shopingcampaignIterator.hasNext()) { shopingcampaignIterator.next().pause(); } while(videocampaignIterator.hasNext()) { videocampaignIterator.next().pause(); } Logger.log("Кампании остановлены"); } //Запуск кампаний function enableCampaign() { var campaignIterator = AdsApp.campaigns() .withCondition("LabelNames CONTAINS_ANY ['" + labelName + "']") .get(); var shopingcampaignIterator = AdsApp.shoppingCampaigns() .withCondition("LabelNames CONTAINS_ANY ['" + labelName + "']") .get(); var videocampaignIterator = AdsApp.videoCampaigns() .withCondition("LabelNames CONTAINS_ANY ['" + labelName + "']") .get(); while(campaignIterator.hasNext()) { campaignIterator.next().enable(); } while(shopingcampaignIterator.hasNext()) { shopingcampaignIterator.next().enable(); } while(videocampaignIterator.hasNext()) { videocampaignIterator.next().enable(); } Logger.log("Кампании запущены"); }