Проверка остатка баланса в аккаунте (для MCC) — различия между версиями

Материал из Raskrutka
Перейти к: навигация, поиск
(Для добавления нового контакта для рассылки от бота:)
(Для добавления нового контакта для рассылки от бота:)
Строка 11: Строка 11:
 
* открываем нашего бота, отправляем ему любое сообщение;
 
* открываем нашего бота, отправляем ему любое сообщение;
 
* после этого переходим по ссылке в браузере <pre> https://api.telegram.org/bot<ТОКЕН>/getUpdates </pre>  
 
* после этого переходим по ссылке в браузере <pre> https://api.telegram.org/bot<ТОКЕН>/getUpdates </pre>  
[[Файл:Token.webp|1000px|центр]]
+
 
 
Здесь вместо <ТОКЕН> вставьте значение из ответа бота (без скобок <>);
 
Здесь вместо <ТОКЕН> вставьте значение из ответа бота (без скобок <>);
 +
[[Файл:Token.webp|500px|центр]]
 
* видим ответ. Копируем цифры: "chat:{"id":ХХХХХХХХХ
 
* видим ответ. Копируем цифры: "chat:{"id":ХХХХХХХХХ
 
[[Файл:Chat id.webp|1000px|центр]]
 
[[Файл:Chat id.webp|1000px|центр]]

Версия 16:06, 25 октября 2019

Скрипт уже добавлен на наш МСС. Код скрипта приведен ниже.
Название MCC Account Budget Control FINISH.
Ежедневно около 12:00 он выполняет сканирование подключенных аккаунтов и присылает с помощью телеграмм-бота остаток бюджета всем указанным контактам.

Для добавление нового аккаунта в список

  • заходим в МСС
  • переходим на кладку аккаунты и находим нужный аккаунт
  • добавить ярлык High spend accounts

Для добавления нового контакта для рассылки от бота:

  • открываем нашего бота, отправляем ему любое сообщение;
  • после этого переходим по ссылке в браузере
     https://api.telegram.org/bot<ТОКЕН>/getUpdates 

Здесь вместо <ТОКЕН> вставьте значение из ответа бота (без скобок <>);

Token.webp
  • видим ответ. Копируем цифры: "chat:{"id":ХХХХХХХХХ
Chat id.webp
  • вставляем полученные значения в переменные в скрипте
var CONFIG = {
   // Указать минимальное количество дней до окончания средств на аккаунте для отправки уведомления.
days : 7,
// Указать почты для отправки уведомлений, через запятую, если больше одной
//email : ['mcc@raskrutka.com.ua'],
// Указать ники/имена кому отправляется письмо, через запятую, если больше одного
//names : ['Nick'],
// Помечаем необходимые для отслеживания аккаунты ярлыком, пример - ActiveP
labelName : ['High spend accounts']
}
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: '931079256:AAH4P9rIuCFwxDg_2tPG_KfUh4-2SAaz5BU',
       CHAT_IDS: ['286887532',
                  '367561610',
                  '377258489']
       }
   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);
   });