Отслеживание остатка бюджета в Google Ads: пошаговая настройка отправки уведомлений в Telegram и на почту

StalkerOK

Администратор
Команда форума
Регистрация
5 Фев 2019
Сообщения
481
В этой статье мы расскажем и покажем, как подключить скрипт, который отправляет данные об остатке денежных средств на аккаунтах, привязанных к My Client Center (MCC) с оплатой по предоплате, на почту и в Telegram-бот. Итак, начнем.


Подключаем скрипт к MCC

1. В аккаунте MCC в правом верхнем углу находим “Инструменты и настройки”. Далее идем во вкладку “Массовые действия” → “Скрипты”

geVGCVsYIROtGrU3assjQ7hlBs5vjoGU54mFFZY7EbP8i9rIIFnnjpTT5bvdILIQmcaI_rE1LoJKj7-SCMnzVkqXzucRww8NGMsMTFwRnct3L93roLiPp4Sq5CDDRcbu90UaBlxd


2. Нажимаем на “+”, чтобы добавить новый скрипт

1-e1562740870261.png




3. Вставляем скрипт:


var CONFIG = {
// Указать минимальное количество дней до окончания средств на аккаунте для отправки уведомления.
days : 7,
// Указать почты для отправки уведомлений, через запятую, если больше одной
email : ['email@gmail.com', 'email2@gmail.com'],
// Указать ники/имена кому отправляется письмо, через запятую, если больше одного
names : ['name', 'name2'],
// Помечаем необходимые для отслеживания аккаунты ярлыком, пример - BudgetControl
labelName : ['BudgetControl']
}
function main () {
var accounts = MccApp.accounts()
.withCondition('LabelNames CONTAINS "' + CONFIG.labelName + '"')
.executeInParallel("budgetControl")
}
function budgetControl() {
var accountName = AdWordsApp.currentAccount().getName();
var budgets = AdWordsApp.budgetOrders().withCondition('Status = ACTIVE').get();
while (budgets.hasNext()) {
try {
var budget = budgets.next();
if (budget.getSpendingLimit() !== null ) {
var startDate = timeFormat(budget.getStartDateTime());
var cost = AdWordsApp.currentAccount().getStatsFor(startDate,today()).getCost();
var last7DaysCostByDay = (AdWordsApp.currentAccount().getStatsFor("LAST_7_DAYS").getCost() / 7).toFixed();
var limit = budget.getSpendingLimit();
var remainingDays = rDays(limit, cost, last7DaysCostByDay);
var budgetNow = (limit - cost).toFixed();
if (budgetNow < 0) {
var budgetNow = 0;
}
else {
var budgetNow = budgetNow;
}
Logger.log([accountName, budgetNow, last7DaysCostByDay, remainingDays]);
if (remainingDays < CONFIG.days) {
sendTelegramMessage('Аккаунт ' + accountName + ' . Текущий остаток = ' + budgetNow + '. Расход в день = ' + last7DaysCostByDay +
' . Денег хватит на ' + remainingDays + ' дня/дней.');
MailApp.sendEmail(CONFIG.email,
CONFIG.names +' / Заканчивается бюджет на аккаунте: ' + accountName,
'Аккаунт ' + accountName + ' . Текущий остаток = ' + budgetNow +
'. Расход в день = ' + last7DaysCostByDay + ' в валюте аккаунта. ' +
'Денег хватит на ' + remainingDays + ' дня/дней. В аккаунте заканчиваются средства. Необходимо предупредить PM.');
}
}
}
catch (e) {
Logger.log(e);
sendTelegramMessage('Ошибка выполнения скрипта контроль Бюджетов ' + accountName);
MailApp.sendEmail(CONFIG.email,
'Ошибка выполнения скрипта Контроль бюджетов',
'Необходимо проверить работу скрипта Контроль бюджетов ' + accountName + ' ' + e);
}
}
}
function timeFormat (date) {
var year = date.year.toString();
var month = date.month.toString();
var day = date.day.toString();
if (month.length == 1) {
month = "0" + month;
}
if (day.length == 1) {
day = "0" + day;
}
return [year, month, day].join("");
}
function today () {
var date = new Date();
var timeZone = AdWordsApp.currentAccount().getTimeZone();
var format = 'yyyyMMdd';
return Utilities.formatDate(date, timeZone, format);
}
function rDays(limit, cost, last7DaysCostByDay) {
var remainingDays = ((limit - cost) / last7DaysCostByDay).toFixed();
if (remainingDays < 1 || remainingDays == "Infinity" || remainingDays == "-Infinity" || remainingDays == -0 ) {
remainingDays = 0;
}
return remainingDays;
}
function sendTelegramMessage(text) {
var CONFIG2 = {
TOKEN: 'ХХХХХХХХХХХХХХХХХХХХХХ',
CHAT_ID: 'ХХХХХХХХХ'
};
var telegramUrl = 'https://api.telegram.org/bot' + CONFIG2.TOKEN + '/sendMessage?chat_id=' + CONFIG2.CHAT_ID + '&text=';
var message = encodeURIComponent(text);
var sendMessageUrl = telegramUrl + message;
var options = {
method: 'POST',
contentType: 'application/json'
};
UrlFetchApp.fetch(sendMessageUrl, options);
}



4. Меняем данные в первой части скрипта на свои.

→ DAYS – количество дней, на которое должно хватить остатка. В случае, если остатка хватит менее, чем на 7 дней, вам придет уведомление

→ EMAIL – прописываем почту, куда будут приходить уведомления об остатке

→ NAME – указываем ники/имена, кому будет отправляться письмо

→ LABELNAME – задаем название ярлыка, которым потом отметите необходимые для отслеживания аккаунты

Screenshot_6.png

Обратите внимание, что email-адреса, имена и название ярлыка указываются в одинарных кавычках — ‘
Оставляем скрипт. К нему мы еще вернемся.


Создаем Telegram-бот


  1. Заходим в Telegram и находим бота: @BotFather
  2. Выбираем команду /newbot, чтобы создать своего бота
rrzZJqEPgUe3HfU6QPsE6jsFXSZY5n86Kc1RkPmT58i08ewXBeov4uBGi-EqkqDxQsaiJAeH9q4pc-5wlKTQfp-fgcFFno4xgv7sFG5GtbpdvyZ-0sQtZviBLm86Onn2i4s9bWKf


  1. Вводим имя и username в формате name_bot, где name — уникальное имя вашего бота
rvr3OcWzvoukxtoMqVoqMio8gOiVS4WMd3tJvrybncs1DbaPoualM-2bgb23fwObcYdoCE8GOd0g9tUlaSRQ7XUfJn91u52ixVzwgmYKT1Hp5hb9JZiRg8gbN5vrurmhh0tExEKQ


В ответ пришло сообщение: “Sorry, this username is already taken. Please try something different”? Придумываем новое уникальное имя
Если имя уникально, то вы получите такое сообщение:

QGNCQiQq-WC5Kfk4HyXiLrgJ_SGgH4qcTY9790kWUE9ZppS4Qfpv3xzNzdi_ma_CMrwfb2AyJ77VKzUsh_4RkLzhzQvrbmVMmvJKaDzhOxF0erzWALoHua3Zt9kKCwT0nMZFjtKr


  1. Копируем и вставляем в строку браузера ссылку: https://api.telegram.org/botТОКЕН/getUpdates, где TOKEH — значение из сообщения бота. По ссылке пока не переходим
IG_pKsmGVSOrIkllmO2v5gd7sMH0f8SXNZr9ZcoCE-Tp9QlSAk-vdq3HUZtwex2pIrhY8jjUblL5TAYlzlSU5IhHYVzQUObuxFlPJI-YnyeyxkVvc5H_2rVQnaKWos8Ri3Sp_uvI


5. Кликаем по ссылке t.me/ХХХХ_bot в сообщении с токеном от чат-бота и переходим в свой свежесозданный бот. Отправляем ему любое сообщение

vGbAILhMulGRO2msQrPlFYrv4jrr0TMLRv-pNRpQ9tojoTBEdqBRR0VXOS7f0Hiw0Lnvu2hNC3JS-jCl_ehPaX0th6g3iYsc905cAy48i1qV0EFgtqbjmvieIdP6N7zj8kYl9RFV


6. Теперь можно перейти по ссылке в браузере. Из полученного ответа копируем id чата

qCDTK7MWKFIHeKQY8ReiZ8i8tCCL80IC6wiIqmUxP_B_IJxAmpu2Q8dCYjzegaAQiyoggxg8bqqME8C49ftutp19YFQ6sxZ-ZkGNw0ySQZCuLfbE31b9493CdlrJ4AdZa5kwkmDn


Бот готов. Осталось внести несколько изменений в скрипт



Дорабатываем и запускаем скрипт


Возвращаемся к скрипту в Google Ads. В самом нижнем блоке скрипта вставляем следующие значения:

→ TOKEN – номер токена из ответа бота

→ CHAT_ID – номер чата из ответа в браузере

Screenshot_7.png


TOKEN и CHAT_ID так же заключены в одинарных кавычках — ‘
Авторизуем и сохраняем скрипт. Выставляем удобное для вас расписание, когда скрипт будет срабатывать. Рекомендуем ежедневное выполнение скрипта

FhWvdSpk7uZfKhv8rFcJ0CyAUuVur-sIH-hQr3_HQO4eCwWGMWiGeUmxxQxyOWuDiQ77gF0uPk1gu9Cq9259NdB4wGrDuwVKzMAIEEW8B5yWDx48a9BsS0tk6tAu1CQ7mKHMo0NY

Учтите, что скрипт может работать с задержкой до 1 часа. Т.е. если в расписании стоит ежедневное выполнение в 8:00, то данные в бот и на почту могут подтянуться не сразу, а в течение часа

Добавляем к аккаунтам ярлык, название которого прописывали в скрипте

Screenshot_8.png


После чего можно проверить работоспособность скрипта, выбрав команду “Выполнить”. Если скрипт будет выполнен без ошибок, в Telegram-бот и на почту придут уведомления об остатках

0e9HNyo13EYGEdASGbcs9uWOnUcZsfGLbTbuJHTzGC4gpJroPSHq3EYDiOtkILQnrW0_If6e5dSE1We7Kq8nwCBkJ_2U0sl8mVAzmUAJfvkm1V--b3jonN2N5qMFzU2W0UNyc0dU

Telegram


Lyf-CbG9Hjzvs2pOuLfrAqCVFtGhmSqjBv1S1ZOVu5GM7Mhm654_MZaQef3xGOb6BVg0rCdtpXDrWUGuz1BTxYo1jevE8XENXfwH86LV3OG0OXNa29KLWj2EztZwyJRaK0Odmayw

Почта


Источник
 
Сверху