Протягом року багато державних свят та додаткових вихідних днів. Для частини бізнесів немає сенсу рекламуватися у такі дні. Особливо це стосується тих, хто надає термінові послуги: аварійне відкриття замків, послуги евакуатора, ветклініки. Також це актуально для компаній із великою часткою звернень телефоном.
Можна вручну зупиняти рекламу перед вихідними днями та вручну вмикати в робочий день. Можна постійно налаштовувати велику кількість автоправил. Але навіщо, якщо можна оптимізувати та довірити всю роботу скрипту.
Як користуватися скриптом:
- Кампанії, до яких повинен застосовуватися скрипт, потрібно присвоїти ярлик (за замовчуванням це ярлик “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("Кампании запущены");
}

