Исключение: служба вызывается слишком много раз за один день: gmail. - PullRequest
1 голос
/ 05 мая 2020

У нас есть очень простой скрипт Google, который удаляет все электронные письма старше 90 дней для учетной записи электронной почты GSuite. Он настроен на запуск каждый час из-за недокументированного ограничения на 500 результатов для gmailApp.Search и необходимости удаления тысяч писем (примерно 7500 в день):

function deleteOldEmail() {
    var threads = GmailApp.search('in:inbox older_than:90d'); 

    Logger.log('Found: ' + threads.length + ' Emails');

    var batchSize = 100
    for (j = 0; j < threads.length; j+=batchSize) {
        GmailApp.moveThreadsToTrash(threads.slice(j, j+batchSize));
    }

    Logger.log('Deleted: ' + j + ' Emails');
}

в разделе «Мои Выполнения »показывает, что это постоянно дает сбой с сообщением:

Исключение: Служба вызывается слишком много раз в течение одного дня: gmail. в deleteOldEmail (Код: 4: 26)

Переход на панель управления Google Cloud Platform (GCP), выбрав Ресурсы-> Проект облачной платформы и щелкнув имя проекта, вы увидите ошибку в отчетах об ошибках. card, а на карте API есть запросы API. При нажатии кнопки «Go to APIs Overview» на результирующей странице вообще не отображается никакой информации:

enter image description here

Мне нужно определить, какая квота была достигнута. , и как. При нажатии на API скрипта приложений на указанной выше странице не отображается трафик c и данные по квотам. При нажатии на API Gmail на странице выше не отображается трафик c и данные по квотам. В разделе IAM & Admin-> Quotas для всех перечисленных API используется 0.

Как определить, какая квота достигнута?

РЕДАКТИРОВАТЬ: Я включил уведомления по электронной почте о сбоях триггера. В нем говорилось, что это строка №12, которая представляет собой метод GmailApp.moveThreadsToTra sh (). Проблема была не в поиске, как в некоторых других сообщениях (без ответа).

Сценарий снова запускается в полдень сегодня, поэтому я смогу подсчитать количество его запусков, умноженное на 500, и получить приблизительное представление. Я опубликую обновление, когда это произойдет, поскольку есть много сообщений, которые я нашел по этому поводу, но без решения.

РЕДАКТИРОВАТЬ 2: Что ж, к сожалению, я еще не достиг предела. Сценарий удалил почти 11 КБ за 24 часа на пике.

1 Ответ

0 голосов
/ 05 мая 2020

У Google есть два типа квот:

  1. Специфицированные API c квоты, которые вы можете увидеть в своем GCP
  2. Кроме того, существуют квоты скриптов приложений, которые также применяются если вы не используете какие-либо API-интерфейсы.

Service invoked too many times for one day - это сообщение об исключении, которое вы получаете, если нажимаете квоты скрипта приложений, с которыми вы можете ознакомиться здесь .

Как видите, для использования методов скрипта приложений существуют максимальные дневные квоты, которые вы можете использовать независимо от использования API и которые зависят от типа вашей учетной записи.

В вашем случае это GmailApp (не Gmail API!), который заставляет вас попасть в квоты.

Нет никаких c упоминаний GmailApp.search и GmailApp.moveThreadsToTrash запросов, но предполагая, что они учитываются в Email read/write запросах, они должно быть ограничено до 20 000 в день для пользовательской (бесплатной) учетной записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...