Я запускаю надстройку gmail со следующими областями действия:
https://mail.google.com/
https://www.googleapis.com/auth/gmail.addons.execute
https://www.googleapis.com/auth/gmail.addons.current.action.compose
https://www.googleapis.com/auth/gmail.addons.current.message.metadata
https://www.googleapis.com/auth/script.external_request
У меня есть кнопка и соответствующее событие compose action, которое должно считывать информацию о получателе, теме и теле изнекоторые поля ввода и вставьте эту информацию в пользовательский интерфейс compose.
Обратный вызов compose action выглядит следующим образом:
function autofillEmailDraft(e) {
var recipient = e.formInput.recipient;
var subject = e.formInput.subject;
var body = e.formInput.body;
GmailApp.setCurrentMessageAccessToken(e.messageMetadata.accessToken);
var draft = GmailApp.createDraft(recipient, subject, body);
// Return a built draft response. This causes Gmail to present a
// compose window to the user, pre-filled with the content specified
// above.
return CardService.newComposeActionResponseBuilder()
.setGmailDraft(draft).build();
}
При нажатии кнопки аддон вылетает со следующим сообщением об ошибке: TypeError: Cannot read property "accessToken" from undefined.
e.messageMetadata представляется неопределенным.Стоит ли искать токен доступа где-нибудь еще?
Простое удаление ошибочной строки
GmailApp.setCurrentMessageAccessToken(e.messageMetadata.accessToken);
не работает.Надстройка вылетает с другой ошибкой
Access denied: : Missing access token for authorization. Request: MailboxService.CreateDraft.
Обновление после комментариев:
Это код для виджета кнопки, который запускает действие создания:
var submitButton = CardService.newTextButton()
.setTextButtonStyle(CardService.TextButtonStyle.FILLED)
.setText('Yes')
.setComposeAction(
CardService.newAction().setFunctionName('autofillEmailDraft'),
CardService.ComposedEmailType.STANDALONE_DRAFT
);
Это зарегистрированный объект 'e':
{
formInput={body=Hello},
parameters={},
draftMetadata={
toRecipients=[abcd@example.com],
bccRecipients=[],
ccRecipients=[]
}
}