В дополнении 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() . Вы можете создавать черновики ответов как отдельные ответы или сообщения типа «ответить всем».
Отдельные проекты
Отдельный черновик начинает новую цепочку и не является ответом на какое-либо существующее сообщение. Вы можете создать отдельный черновик, используя одну из следующих функций сервиса 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();
  }