В дополнении Google Workspace вы можете создавать виджеты , которые имеют связанные действия . Вы можете использовать действие для составления новых черновиков электронной почты, опционально заполняя их информацией, введенной в пользовательский интерфейс дополнения, или информацией из открытого сообщения. Например, вы можете иметь кнопку в пользовательском интерфейсе сообщений вашего дополнения , которая создает ответ на текущее открытое сообщение, предварительно заполненное информацией из дополнения.
Когда запускается действие, которое создает сообщения, Gmail выполняет функцию обратного вызова для создания и возврата черновика. Затем Gmail отображает этот черновик в своем пользовательском интерфейсе в стандартном окне написания электронного письма, которое пользователь может затем редактировать и отправлять по мере необходимости.
Настройка действия по созданию черновика сообщения
Чтобы настроить виджет на запуск действия по созданию черновика при его выборе, необходимо выполнить следующие действия:
Убедитесь, что ваш манифест включает область
action.compose
:https://www.googleapis.com/auth/gmail.addons.current.action.compose
Вместо этого вы можете использовать более разрешительную область действия, но делать это следует только в том случае, если такая область действия абсолютно необходима.
Создайте объект
Action
и свяжите его с определенной вами функцией обратного вызова .Вызовите функцию обработчика виджета
setComposeAction()
виджета, предоставив ей объектAction
и указавComposeEmailType
.Реализуйте функцию обратного вызова, которая выполняет действие по созданию черновика. Эта функция получает объект события в качестве аргумента. Функция обратного вызова должна выполнять следующие действия:
- Создайте объект
GmailDraft
. - Создайте объект
ComposeActionResponse
, используя классComposeActionResponseBuilder
и объектGmailDraft
. - Верните построенный
ComposeActionResponse
.
- Создайте объект
Вы можете предварительно заполнить GmailDraft
, созданный в функции обратного вызова, получателями, темой, текстом сообщения и вложениями. Для заполнения черновика данные могут поступать из любого источника, но обычно они берутся из информации, предоставленной самому дополнению, информации в открытом сообщении или информации, собранной из сторонней службы. Объект события, переданный в функцию обратного вызова, содержит идентификатор открытого сообщения и другую информацию о дополнении, которую вы можете использовать для предварительного заполнения черновика.
Вы можете создать черновик как новое отдельное сообщение или ответ на существующее сообщение. Это контролируется перечислением ComposeEmailType
, заданным для setComposeAction()
. Вы можете создавать черновики ответов как отдельные ответы или сообщения 'reply-all'.
Отдельные проекты
Автономный черновик начинает новую ветку и не является ответом на какое-либо существующее сообщение. Вы можете создать автономный черновик с помощью одной из следующих функций сервиса Gmail :
-
GmailApp.createDraft(recipient, subject, body)
-
GmailApp.createDraft(recipient, subject, body, options)
Ответить на черновики
Черновики ответов являются частью существующей цепочки сообщений. Черновики ответов — это либо отдельные ответы, которые отправляются только отправителю сообщения, либо черновики «ответить всем», которые отправляются всем, кто получил это сообщение. Вы можете создать черновик ответа с помощью одной из этих функций службы Gmail :
-
GmailMessage.createDraftReply(body)
-
GmailMessage.createDraftReply(body, options)
-
GmailMessage.createDraftReplyAll(body)
-
GmailMessage.createDraftReplyAll(body, options)
-
GmailThread.createDraftReply(body)
-
GmailThread.createDraftReply(body, options)
-
GmailThread.createDraftReplyAll(body)
-
GmailThread.createDraftReplyAll(body, options)
Пример
В следующем фрагменте кода показано, как назначить кнопке действие, создающее черновик ответа.
var composeAction = CardService.newAction()
.setFunctionName('createReplyDraft');
var composeButton = CardService.newTextButton()
.setText('Compose Reply')
.setComposeAction(
composeAction,
CardService.ComposedEmailType.REPLY_AS_DRAFT);
// ...
/**
* Creates a draft email (with an attachment and inline image)
* as a reply to an existing message.
* @param {Object} e An event object passed by the action.
* @return {ComposeActionResponse}
*/
function createReplyDraft(e) {
// Activate temporary Gmail scopes, in this case to allow
// a reply to be drafted.
var accessToken = e.gmail.accessToken;
GmailApp.setCurrentMessageAccessToken(accessToken);
// Creates a draft reply.
var messageId = e.gmail.messageId;
var message = GmailApp.getMessageById(messageId);
var draft = message.createDraftReply('',
{
htmlBody: "Kitten! <img src='cid:kitten'/>",
attachments: [
UrlFetchApp.fetch('https://example.com/images/myDog.jpg')
.getBlob()
],
inlineImages: {
"kitten": UrlFetchApp.fetch('https://example.com/images/myKitten.jpg')
.getBlob()
}
}
);
// 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();
}