Составление черновиков сообщений

В дополнении Google Workspace можно создавать виджеты со связанными действиями . С помощью действия можно создавать новые черновики электронных писем, при желании заполняя их информацией, введенной в интерфейс дополнения, или информацией из открытого сообщения. Например, в интерфейсе сообщений вашего дополнения может быть кнопка, которая создает ответ на текущее открытое сообщение, предварительно заполненный информацией из дополнения.

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

Настройка действия для создания черновика сообщения

Чтобы настроить виджет таким образом, чтобы при его выборе запускалось действие по созданию черновика, необходимо выполнить следующие действия:

  1. Убедитесь, что ваш манифест включает область action.compose :

    https://www.googleapis.com/auth/gmail.addons.current.action.compose

    Вместо этого можно использовать более разрешительную область видимости, но делать это следует только в том случае, если такая область видимости абсолютно необходима.

  2. Создайте объект Action и свяжите его с определенной вами функцией обратного вызова .

  3. Вызовите функцию обработчика setComposeAction() виджета, передав ей объект Action и указав ComposeEmailType .

  4. Реализуйте функцию обратного вызова, которая выполняет действие по созданию черновика. В качестве аргумента этой функции передается объект события . Функция обратного вызова должна выполнять следующие действия:

    1. Создайте объект GmailDraft .
    2. Создайте объект ComposeActionResponse , используя класс ComposeActionResponseBuilder и объект GmailDraft .
    3. Возвращает созданный ComposeActionResponse .

Вы можете предварительно заполнить создаваемый в функции обратного вызова GmailDraft получателями, темой, текстом сообщения и вложениями. Для заполнения черновика данные могут поступать из любого источника, но обычно это информация, предоставленная самому дополнению, информация из открытого сообщения или информация, полученная от стороннего сервиса. Объект события, передаваемый в функцию обратного вызова, содержит идентификатор открытого сообщения и другую информацию о дополнении, которую вы можете использовать для предварительного заполнения черновика.

Вы можете создать черновик как новое отдельное сообщение или как ответ на существующее сообщение. Это управляется перечислением ComposeEmailType передаваемым в метод setComposeAction() . Вы можете создавать черновики ответов как отдельные ответы или сообщения типа «ответить всем».

Отдельные черновики

Автономный черновик начинает новую ветку обсуждения и не является ответом на существующее сообщение. Создать автономный черновик можно с помощью одной из следующих функций сервиса Gmail :

Черновики ответов

Черновик ответа — это часть существующей цепочки сообщений. Черновики ответов бывают либо отдельными ответами, которые отправляются только отправителю сообщения, либо черновиками «ответить всем», которые отправляются всем, кто получил это сообщение. Вы можете создать черновик ответа с помощью одной из следующих функций сервиса Gmail :

Пример

Приведенный ниже фрагмент кода показывает, как назначить кнопке действие, которое создает черновик ответа.

  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();
  }