Проверка остатка баланса в аккаунте (для MCC)
Версия от 14:30, 28 октября 2019; Ilonamaksimova (обсуждение | вклад) (→Для добавления нового контакта для рассылки от бота:)
Скрипт уже добавлен на наш МСС. Код скрипта приведен ниже.
Название MCC Account Budget Control FINISH.
Ежедневно около 12:00 он выполняет сканирование подключенных аккаунтов и присылает с помощью телеграмм-бота остаток бюджета всем указанным контактам.
Для добавление нового аккаунта в список
- заходим в МСС
- переходим на кладку аккаунты и находим нужный аккаунт
- добавить ярлык High spend accounts
Для добавления нового контакта для рассылки от бота:
- открываем нашего бота t.me/raskrutka_budget_bot , отправляем ему любое сообщение;
- после этого переходим по ссылке в браузере
https://api.telegram.org/bot<ТОКЕН>/getUpdates
Здесь вместо <ТОКЕН> вставьте значение из ответа бота (без скобок <>);
НАШ ТОКЕН 1026481627:AAHqneSZt8AZ_wExB54obb4Fzp-Jxw_MF5M
ССЫЛКА ВЫГЛЯДИТ ТАК: https://api.telegram.org/bot1026481627:AAHqneSZt8AZ_wExB54obb4Fzp-Jxw_MF5M/getUpdates
- видим ответ. Копируем цифры: "chat:{"id":ХХХХХХХХХ
- вставляем полученные значения в переменные в скрипте
Код скрипта
var CONFIG = {
// Указать минимальное количество дней до окончания средств на аккаунте для отправки уведомления.
days : 7,
// Указать почты для отправки уведомлений, через запятую, если больше одной
//email : ['введите email '],
// Указать ники/имена кому отправляется письмо, через запятую, если больше одного
//names : ['Nick'],
// Помечаем необходимые для отслеживания аккаунты ярлыком, пример - ActiveP
labelName : ['введите имя ярлыка']
}
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 CONFIG = {
TOKEN: 'введите токен (без скобок)',
CHAT_IDS: ['введите идентификаторы контактов']
}
var options = {
method: 'POST',
contentType: 'application/json'
};
CONFIG.CHAT_IDS.forEach(function(item) {
UrlFetchApp.fetch('https://api.telegram.org/bot' + CONFIG.TOKEN + '/sendMessage?chat_id=' + item + '&text=' + encodeURIComponent(text), options);
});