-
Notifications
You must be signed in to change notification settings - Fork 0
/
check impresions vs yesterday.txt
103 lines (89 loc) · 6.03 KB
/
check impresions vs yesterday.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
////////П Р О В Е Р К А П А Д Е Н И Я П О К А З О В
////////-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
////////Если в кампании кол-во показов по состоянию на сегодня в период с 00:00 до предыдущего часа снизилось на определенный в переменной percent процент,
////////на почту придет уведомление c перечнем кампаний и количеством показов вчера и сегодня
////////Если и вчера и сегодня кол-во показов = 0, то по такой кампании уведомление не придет
////////-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
////////Настройте ежедневное выполнение на то время, к которому точно можно понять, что в кампаниях что-то сломалось, например 11:00.
////////-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
////////По всем вопросам пишите https://t.me/boris_dziundziuk
function main() {
var run = MccApp.accounts().withIds(['XXX-XXX-XXXX']).executeInParallel('doit'); //вместо XXX-XXX-XXXX используйте ID аккаунта, в котором нужно проверять кампании; можно указать больше аккаунтов в таком виде ['XXX-XXX-XXXX', 'YYY-YYY-YYYY', 'ZZZ-ZZZ-ZZZZ']
//можете превратить этот скрипт из МСС версии в версию для использования в одном аккаунте. Нужно удалить текст выше и фигурную скобку ниже, а doit переименовать в main
}
function doit() {
///////O P T I O N S///////
var percent = 50; //если сегодня в кампании на percent показов меньше, чем вчера - придет уведомление на почту
var emailAddresses = ['[email protected]']; //впишите свой имейл; можно указать дополнительные имейлы в таком виде ['[email protected]', '[email protected]']
///////////////////////////
var timezone = AdsApp.currentAccount().getTimeZone();
var today = new Date();
var currentHour = Utilities.formatDate(today, timezone, 'HH');
var yesterday = new Date();
yesterday.setDate(today.getDate() - 1);
var yesterdayReport = Utilities.formatDate(yesterday, timezone, 'yyyyMMdd');
var todayReport = Utilities.formatDate(today, timezone, 'yyyyMMdd');
var yesterdayRow = Utilities.formatDate(yesterday, timezone, 'yyyy-MM-dd');
var todayRow = Utilities.formatDate(today, timezone, 'yyyy-MM-dd');
var campaigns = {yesterdayReport : {}, todayReport: {}};
var campaignsCheck = [];
var report = AdsApp.report('SELECT CampaignName, Date, HourOfDay, Impressions FROM CAMPAIGN_PERFORMANCE_REPORT WHERE CampaignStatus = ENABLED AND ServingStatus != ENDED AND CampaignTrialType = BASE DURING '+yesterdayReport+','+todayReport+'').rows();
while (report.hasNext()) {
var row = report.next();
var campaign = row['CampaignName'];
var date = row['Date'];
var impressions = parseInt(row['Impressions']);
if (row['HourOfDay'] < currentHour && date == todayRow) {
if (!campaigns['todayReport'][campaign]) {
campaigns['todayReport'][campaign] = impressions;
} else {
campaigns['todayReport'][campaign] += impressions;
}
} else if (row['HourOfDay'] < currentHour && date == yesterdayRow) {
if (!campaigns['yesterdayReport'][campaign]) {
campaigns['yesterdayReport'][campaign] = impressions;
} else {
campaigns['yesterdayReport'][campaign] += impressions;
}
}
}
for (var campaign in campaigns['yesterdayReport']){
try {
var impressionsYesterday = campaigns['yesterdayReport'][campaign];
var impressionsToday = campaigns['todayReport'][campaign];
var difference = ((impressionsToday - impressionsYesterday) / impressionsYesterday * 100) * -1;
if ((impressionsToday == 0 && impressionsYesterday != 0) || difference >= percent){
campaignsCheck.push(campaign);
}
} catch (e) {}
}
if (campaignsCheck.length > 0){
var recipients = emailAddresses.join();
var accountName = AdsApp.currentAccount().getName();
var accountId = AdsApp.currentAccount().getCustomerId();
var subject = 'Показы в аккаунте ' + accountName + '(' + accountId + ') снизились на ' + percent + '%+';
var body = '';
var thStart = '<th style="border: 1px solid black;padding:3px">';
var thEnd = '</th>';
var tdStart = '<td style="border: 1px solid black;padding:3px">';
var tdEnd = '</td>';
body += '<table style="border: 1px solid black;border-collapse: collapse;">';
body += '<tr style="border: 1px solid black">';
body += thStart + 'Кампания' + thEnd;
body += thStart + 'Показы вчера' + thEnd;
body += thStart + 'Показы сегодня' + thEnd;
for (var i in campaignsCheck){
body += '<tr style="border: 1px solid black">';
body += tdStart + campaignsCheck[i] + tdEnd;
body += tdStart + campaigns['yesterdayReport'][campaignsCheck[i]] + tdEnd;
body += tdStart + campaigns['todayReport'][campaignsCheck[i]] + tdEnd;
body += '</tr>';
}
body += '</table>';
MailApp.sendEmail({
to: recipients,
subject: subject,
htmlBody: body,
});
}
}