Как настроить отправку уведомлений о состоянии бюджета аккаунтов Google Ads в Telegram и на почту
Делимся скриптом, который проверяет остаток денежных средств на отдельных аккаунтах Google Ads. Скрипт отправляет уведомление на почту и в Telegram — это поможет вовремя пополнить счёт.
Первая версия статьи вышла в 2019 году. Обновление информации и доработку кода выполнил Дмитрий Конарев, Upper-Junior PPC Specialist агентства Netpeak.
Важно: скрипт работает только с аккаунтами Google Ads по предоплате.
Пост и скрипт создан и доработан по материалам телеграм-канала Скрипты Google Ads, скриптов на GitHub (1, 2).
Как подключить скрипт
1. Копируем скрипт и вставляем его в аккаунт.
2. Добавляем скрипт.
3. Перед запуском обязательно изменяем значения в первом блоке.
- days — количество дней, на которое должно хватить остатка. То есть, если денег меньше, чем на семь дней, вы получите уведомление;
- email — указываем почту/почты, на которые должны приходить уведомления. Важно: почтовые адреса нужно указывать в кавычках;
- names — заменить ‘Nick’, ‘Name’ на свои значения (используется в теме письма при отправке);
- labelName: ActiveP — ярлык для аккаунтов, которые нужно контролировать.
4. Создаем бота для Telegram.
- открываем телеграмм, находим бота:
- придумываем имя и username. Рекомендую назвать одним значением, например Name_Bot. Вместо Name подставьте свое название;
- вводим своё название для бота;
- забиваем в строку username такое же название;
- если высветит ошибку «Sorry, this username is already taken. Please try something different», нужно выбрать другое название;
- если все верно, получаем ответ:
- открываем нашего бота, отправляем ему любое сообщение;
- после этого переходим по ссылке в браузере https://api.telegram.org/bot<ТОКЕН>/getUpdates. Здесь вместо <ТОКЕН> вставьте значение из ответа бота;
- видим ответ. Копируем цифры: "chat:{"id":ХХХХХХХХХ
Не всегда показывается ID Chat. Если ID Chat не появился в окне браузера, то необходимо в Bot_Father сделать функцию /revoke и отправить повторно любое сообщение боту. После этого необходимо снова перейти в браузере по ссылке, заменив <ТОКЕН> на новое значение, полученное после функции /revoke.
- вставляем полученные значения в переменные в скрипте (следующий пункт).
5. Измените значения во втором блоке скрипта (в самом низу):
- TOKEN— номер токена;
- CHAT_ID— номер чата.
6. Авторизуйте скрипт.
7. Поставьте запуск скрипта по удобному вам расписанию.
8. Итог — вот такие уведомления на почту:
Так выглядят сообщения в Telegram:
Код скрипта
var CONFIG = {
// Указать минимальное количество дней до окончания средств на аккаунте для отправки уведомления.
days: 7,
// Указать почты для отправки уведомлений, через запятую, если больше одной
email: ['email@gmail.com', 'email2@gmail.com'],
// Указать ники/имена кому отправляется письмо, через запятую, если больше одного
names: ['Nick', 'Nick2'],
}
function main() {
var accountName = AdWordsApp.currentAccount().getName();
var budgets = AdWordsApp.budgetOrders().withCondition('Status = ACTIVE').get();
try {
var budget = budgets.next();
if (budget.getSpendingLimit() !== null) {
var startDate = timeFormat(budget.getStartDateTime());
var cost = AdWordsApp.currentAccount().getStatsFor(startDate, today()).getCost();
var limit = budget.getSpendingLimit();
var last7DaysCostByDay = (AdWordsApp.currentAccount().getStatsFor("LAST_7_DAYS").getCost() / 7).toFixed();
var remainingDays = rDays(limit, cost, last7DaysCostByDay);
var adjustments = AdWordsApp.budgetOrders().get().next().getTotalAdjustments();
var budgetNow = (limit - cost).toFixed();
if (budgetNow < 0) {
var budgetNow = 0;
}
else {
var budgetNow = budgetNow;
}
Logger.log([accountName, budgetNow, last7DaysCostByDay, remainingDays, adjustments]);
var messageHeader = CONFIG.names + ' / Заканчивается бюджет на аккаунте: ' + accountName;
var messageBody = 'Аккаунт ' + accountName + ' . Текущий остаток = ' + budgetNow +
'. Расход в день = ' + last7DaysCostByDay + ' в валюте аккаунта. ' +
'Денег хватит на ' + remainingDays + ' дня/дней. В аккаунте заканчиваются средства. Необходимо предупредить PM.';
if (remainingDays < CONFIG.days) {
MailApp.sendEmail(CONFIG.email, messageHeader, messageBody);
sendTelegramMessage(messageHeader + '. ' + messageBody);
}
}
}
catch (e) {
Logger.log(e);
var messageHeader = 'Ошибка выполнения скрипта Контроль бюджетов';
var messageBody = 'Необходимо проверить работу скрипта Контроль бюджетов ' + accountName + ' ' + e;
MailApp.sendEmail(CONFIG.email, messageHeader, messageBody);
sendTelegramMessage(messageHeader + '. ' + messageBody);
}
}
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: 'TOKEN',
CHAT_ID: 'ID_CHAT_BOT'
};
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);
}
Свежее
Как оптимизировать конверсии для страниц приложения в App Store и Google Play
Какие поля и параметры имеют больше значения, и как выжать из них все
Как справляться с перегрузкой на работе — советы и действенные инструменты
В этой статье поделюсь лайфхаками, как наконец-то разобраться с входящим потоком задач и не выгореть от усталости
Как выйти на ROMI 5477,3% в первый месяц сотрудничества — кейс PUMA по email-маркетингу
И возобновить коммуникацию с клиентами после полугодовой паузы