임시보관 메일 작성하기

Google Workspace 부가기능에서 연결된 작업이 있는 위젯을 만들 수 있습니다. 작업을 사용하여 새 이메일 초안을 작성하고 원하는 경우 부가기능 UI에 입력된 정보 또는 열려 있는 메시지의 정보를 사용하여 초안을 작성할 수 있습니다. 예를 들어 부가기능의 메시지 UI에 현재 열려 있는 메시지에 대한 답장을 생성하고 부가기능의 정보로 미리 채우는 버튼을 배치할 수 있습니다.

메일을 빌드하는 작업이 트리거되면 Gmail은 콜백 함수를 실행하여 초안을 빌드하고 반환합니다. 그러면 Gmail에서 표준 이메일 작성 창의 UI에 초안을 표시하며, 사용자는 필요에 따라 초안을 수정하고 보낼 수 있습니다.

임시보관 메일을 빌드하는 작업 구성

선택 시 답안 작성 작업을 시작하도록 위젯을 구성하려면 다음을 실행해야 합니다.

  1. 매니페스트action.compose 범위가 포함되어 있는지 확인합니다.

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

    대신 더 관대한 범위를 사용할 수 있지만, 이 범위가 절대적으로 필요한 경우에만 사용해야 합니다.

  2. Action 객체를 만들고 정의한 콜백 함수와 연결합니다.

  3. 위젯의 setComposeAction() 위젯 핸들러 함수를 호출하여 Action 객체를 제공하고 ComposeEmailType를 지정합니다.

  4. 답안 작성 작업을 실행하는 콜백 함수를 구현합니다. 이 함수에는 이벤트 객체가 인수로 제공됩니다. 콜백 함수는 다음을 실행해야 합니다.

    1. GmailDraft 객체를 만듭니다.
    2. ComposeActionResponseBuilder 클래스와 GmailDraft 객체를 사용하여 ComposeActionResponse 객체를 빌드합니다.
    3. 빌드된 ComposeActionResponse를 반환합니다.

콜백 함수에서 만드는 GmailDraft을 수신자, 제목, 메시지 본문, 첨부파일로 미리 채울 수 있습니다. 답안 초안을 작성하기 위해 데이터는 어떤 소스에서든 가져올 수 있지만 일반적으로 부가기능 자체에 제공된 정보, 열려 있는 메시지의 정보 또는 서드 파티 서비스에서 수집한 정보에서 가져옵니다. 콜백 함수에 전달된 이벤트 객체에는 답장 메시지 ID와 초안을 미리 채우는 데 사용할 수 있는 기타 부가기능 정보가 포함됩니다.

초안을 새 독립형 메시지로 만들거나 기존 메시지에 대한 답장으로 만들 수 있습니다. 이는 setComposeAction()에 제공된 ComposeEmailType enum으로 제어됩니다. 답장 초안을 단일 답장 또는 '전체에 답장' 메시지로 만들 수 있습니다.

독립형 답안

독립형 초안은 새 대화목록을 시작하며 기존 메시지에 대한 답장이 아닙니다. 다음 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();
  }