Re: Iterator has reached the end или Почему Гугл не может заставить работать уведомления о балансе?

66 views
Skip to first unread message
Message has been deleted

Thea Vega (AdWords Scripts Team)

unread,
Jan 30, 2018, 2:51:33 AM1/30/18
to AdWords Scripts Forum
Hi Valeriy,

Allow me to re-post your inquiry with your private information masked (i.e. your email address). In the future, please refrain from posting personal information on this forum.
Это риторический вопрос, так как я прекрасно понимаю, что на него ответ мне все равно не дадут.

Мой реальный вопрос связан со скриптом, который мне посоветовала установить менеджер Adwords (а потом они отказались мне помочь решить проблемы с этим скриптом). Говорят, пишите на форум. На мои возражения, что вроде как за те бабки, которые мы им платим, мы вроде как имеем право получить уведомление о низком балансе во время, чтобы снова закинуть им бабок, они ответили - "Да, мы знаем, что есть проблема с уведомлениями".

Итак, сначала я попытался установить скрипт, который они мне дали - отсюда ссылка. Но он не работал. По описанию ошибки в журнале и чудо-справке от Гугл я выяснил, что нужен управляющий аккаунт. Тогда пришлось завести злосчастный управляющий аккаунт. 

Там я снова завел этот скрипт, дал все разрешения, но снова ошибка.
Да, если почитать 100500 страниц мануалов, можно выяснить в чем дело, и как с этим бороться. Но, честно говоря, я уверен, что в клиентоориентированном мире я и писать это сообщение не должен был бы.. Остается только мечтать. И ждать, что кто-то поможет.

Ошибка: Cannot retrieve the next object: iterator has reached the end. (line 10)

Код ниже:

function main() {
  
  //Настройки скрипта 
  var days = 7; // Минимальное число дней для отправки уведомления
  var alertLimit = 2500; // Минимальный остаток для отправки уведомления
  var email = ['INSERT_EMAIL_HERE']; //Добавляются адреса всех, кому должно прийти письмо с уведомлением
  var alertType = true; // true - уведомление при малом остатке, при значении false - при количестве дней
  var includeVAT = true;
 
  var budgetOrder = AdWordsApp.budgetOrders().get().next();
  var SpendingLimit = budgetOrder.getSpendingLimit(); // Общий лимит аккаунта
  var adjustments = budgetOrder.getTotalAdjustments(); // Возвращенные средства на аккаунт
  
  var Spent = AdWordsApp.currentAccount().getStatsFor('ALL_TIME').getCost(); // Расход за все время
  var lastWeekSpent = AdWordsApp.currentAccount().getStatsFor('LAST_7_DAYS').getCost(); // Расход за последние 7 дней
  var thisMonthSpent = AdWordsApp.currentAccount().getStatsFor('THIS_MONTH').getCost();
  var vat = thisMonthSpent * 0.2;
  
  if (includeVAT) {
    SpendingLimit -= vat;
  }
  Logger.log(vat);
  
  if (adjustments == null) {
    var remainingBudget = SpendingLimit - Spent;
  } else {
    var remainingBudget = SpendingLimit - (Spent + adjustments);
  }
  Logger.log("Остаток аккаунта - " + Math.round(remainingBudget));
  if (alertType) {
    if (remainingBudget < alertLimit) {
      sendSimpleTextEmail(email);
    }
  } else {
    
    var limitsDays = remainingBudget / lastWeekSpent;
    if (limitsDays < days) {
      sendSimpleTextEmail(email);
    }
  }

  function sendSimpleTextEmail(mail) {
    MailApp.sendEmail( mail,
                      'Минимальный остаток бюджета! ' + AdWordsApp.currentAccount().getName(),
                      'В аккаунте заканчиваются средства. Внесите оплату!');    
  }
}

Thanks,
Thea
AdWords Scripts Team

Thea Vega (AdWords Scripts Team)

unread,
Jan 30, 2018, 2:53:08 AM1/30/18
to AdWords Scripts Forum
Hi Valeriy,

Apologies as I can only provide support in English.

Based on my understanding, you are having an "Cannot retrieve the next object: iterator has reached the end. (line 10)" error on your script. If so, could you confirm if you are implementing this third-party script on an MCC-level account? If yes, then one possible reason for your error is because the script is being implemented on an incorrect account level. The said third-party script is supposed to be implemented on a client account-level as per their documentation. 

If you can confirm that the script is implemented on a client account-level, then another possible reason for the error encountered is because the script is selecting a budget order that is non-existent on your account. 

I would suggest for you to check where you are implementing your script and if there is a budgetOrder in the account you are fetching data.

If this is not your use-case, please provide me your CID and script name via Reply privately to author for further investigation.
Reply all
Reply to author
Forward
0 new messages