Можно ли вообще использовать текущий токен доступа к сообщениям (или эквивалент) для надстроек Gmail с API Gmail?

Задний план:

Надстройки Google Workspace для Gmail позволяют получить доступ к открытой в данный момент электронной почте в API на contextualTrigger с областью действия:

      https://www.googleapis.com/auth/gmail.addons.current.message.readonly

Токен доступа должен быть передан с использованием чтобы предоставить доступ к этому открытому в данный момент электронному письму:

      var accessToken = e.gmail.accessToken;
var messageId = e.gmail.messageId;

// The following function enables short-lived access to the current
// message in Gmail. Access to other Gmail messages or data isn't
// permitted.
GmailApp.setCurrentMessageAccessToken(accessToken);
var mailMessage = GmailApp.getMessageById(messageId);

Из приведенной выше документации:

setCurrentMessageAccessToken(accessToken)

Устанавливает к токен доступатекущему сообщению, который позволяет скрипту получить доступ к текущему GmailMessage характеристики.

Этот метод требуется только проектов длянадстроек Gmail, использующих текущие области сообщений Gmail .

К сожалению, ссылка на страницы с токенами доступа и текущими областями сообщений в настоящее время не работает и приводит к 404 страницам, поэтому я не могу найти здесь дополнительную информацию.

Вопрос:

Как достичь той же функциональности, используя Gmail API напрямую вместо GmailApp?

В документации для Gmail:users.messages.get указано, что https://www.googleapis.com/auth/gmail.addons.current.message.readonly является допустимой областью для вызова этого метода, однако, похоже, нет эквивалента GmailApp.setCurrentMessageAccessToken(accessToken) для Gmail API.

Что не работает:

  • Использование - в соответствии с этой документацией: «Токен доступа, который включает области Gmail, не совпадает с токеном доступа, возвращаемымScriptApp.getOAuthToken(). Вы должны использовать токен, предоставленный в объекте события действия ".
  • Предоставление токена доступа из объекта события в качестве токена в Authorization: Bearer заголовок также вызывает ошибку 403.

Обнаруженная функциональность будет сродни:

      var accessToken = e.gmail.accessToken
var messageId = e.gmail.messageId

Gmail.setCurrentMessageAccessToken(accessToken) // made up method
var mailMessage = Gmail.Users.Messages.get("me", messageId)

2 ответа

Я думаю, что в этом случае, чтобы включить токен доступа, как насчет прямого запроса к конечной точке API Gmail с помощью UrlFetchApp? Когда ваш скрипт конвертируется, он становится следующим. В этом случае область действия может быть выбрана из области действия .

Пример сценария:

      var accessToken = "###";
var messageId = "###";
var userId = "me";
var url = `https://gmail.googleapis.com/gmail/v1/users/${userId}/messages/${messageId}`;
var res = UrlFetchApp.fetch(url, {headers: {authorization: `Bearer ${accessToken}`}});
console.log(res.getContentText())

Примечание:

  • В этом случае будьте осторожны с прицелами.

Рекомендации:

Добавлен:

Ваша цель следующая.

Вы хотите использовать метод "users.messages.get" Gmail API, используя область видимости.

Из наших обсуждений в комментарии я резюмировал текущую ситуацию следующим образом.

  • Когда я проверил включенные области из токена доступа, полученного ScriptApp.getOAuthToken() для проекта GAS, который установил файл манифеста, я мог подтвердить, что объем и script.external_request.

  • Когда я увидел авторизацииофициальный документСсылка , чтобы использовать метод "users.messages.get", он отображается как Requires one of the following OAuth scopes:.

  • Но когда объем gmail.addons.current.message.readonly используется для метода "users.messages.get", такая ошибка, как Missing access token for authorization. имеет место.

  • Когда объем gmail.readonly включен, ошибка может быть устранена.

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

Отвечать:

На данный момент это сделать невозможно.

Краткое изложение проблемы:

  • GmailApp не имеет метода или класса, позволяющего управлять метками отдельных сообщений, только потоки.
  • В accessToken предоставленный в контекстном триггере, кажется, отличается от токена OAuth и поэтому не может использоваться для аутентификации вызова для чтения текущего сообщения.
  • Невозможно передать токен через API Gmail, чтобы можно было использовать текущее сообщение.
  • Единственный способ получить сообщение - это если такая область видимости, как gmail.readonly используется.
  • Пока https://www.googleapis.com/auth/gmail.addons.current.message.readonly указан как допустимый объем для messages.get, похоже, нет никакого способа фактически использовать область при подключении к Gmail API.

Дальнейшие шаги:

  • Я отправил сюда запрос функции, чтобы добавить возможность управления ярлыками сообщений из класса GmailApp в скрипте приложений. Пометьте эту проблему, чтобы повысить ее приоритет.
    • В этой заметке уже был запрос функции для этой же функции на этой странице , но, поскольку ему больше двух лет, без ответа от Google я подал другой.
  • Я отправил отзыв о документации для messages.get с помощью кнопки Отправить отзыв, чтобы получить область действия gmail.addons.current.message.readonly уточнены или удалены со страницы.
Другие вопросы по тегам