임시보관 메일 작성하기

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