GMail Addon: просроченный токен доступа - PullRequest
0 голосов
/ 10 мая 2019

Мой аддон gmail состоит из нескольких карт.Для навигации по карте я широко использую setOnClickAction, например,

CardService.newAction().setFunctionName('openUserCard').setParameters({userJSON: JSON.stringify(user)})

Ссылка на аддон Gmail говорит, что и ключи, и значения метода setParameters должны быть строками.Поэтому невозможно отправить сложный объект с одной карты на другую.

Глобальные переменные также не поддерживаются.Можно использовать PropertiesService для хранения некоторых данных, но это также ограничено строками.

У меня есть начальная и экспортная карты.На исходной карточке есть текущий импортер данных электронной почты, который выглядит так:

function buildAddon(e) {
  var accessToken = e.messageMetadata.accessToken;
  GmailApp.setCurrentMessageAccessToken(accessToken);
  var message = GmailApp.getMessageById(e.messageMetadata.messageId);
  var attachments = message.getAttachments();
  ... we can do anything with attachments here...

Проблема в том, что мне нужно использовать вложения не на исходной, а на другой карточке экспорта, чтобы POST их на некоторые внешниеапи.Но я не могу отправить массив attachments напрямую, используя setOnClickAction, потому что он состоит из сложных объектов с методами.

Вот почему я отправляю исходный объект e.messageMetadata на карту экспорта и повторяю все операции, описанные выше: setCurrentMessageAccessToken, getMessageById, getAttachments, а затем для каждого вложения получаем его содержимое с помощьюattachment.getBytes() и отправьте по внешнему API.

Если клиент сразу же отправляется на экспортную карту, это все работает.Но если он просматривает некоторые другие карты в течение нескольких минут, а затем отправляется на экспорт, вызов GmailApp.getMessageById(messageMetadata.messageId) возвращает ошибку Access Denied:: Expired access token.

Как этого избежать?

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