Google Workspace 부가기능에서 연결된 작업이 있는 위젯을 만들 수 있습니다. 작업을 사용하여 새 이메일 초안을 작성하고 원하는 경우 부가기능 UI에 입력된 정보 또는 열려 있는 메시지의 정보를 사용하여 초안을 작성할 수 있습니다. 예를 들어 부가기능의 메시지 UI에 현재 열려 있는 메시지에 대한 답장을 생성하고 부가기능의 정보로 미리 채우는 버튼을 배치할 수 있습니다.
메일을 빌드하는 작업이 트리거되면 Gmail은 콜백 함수를 실행하여 초안을 빌드하고 반환합니다. 그러면 Gmail에서 표준 이메일 작성 창의 UI에 초안을 표시하며, 사용자는 필요에 따라 초안을 수정하고 보낼 수 있습니다.
임시보관 메일을 빌드하는 작업 구성
선택 시 답안 작성 작업을 시작하도록 위젯을 구성하려면 다음을 실행해야 합니다.
매니페스트에
action.compose
범위가 포함되어 있는지 확인합니다.https://www.googleapis.com/auth/gmail.addons.current.action.compose
대신 더 관대한 범위를 사용할 수 있지만, 이 범위가 절대적으로 필요한 경우에만 사용해야 합니다.
위젯의
setComposeAction()
위젯 핸들러 함수를 호출하여Action
객체를 제공하고ComposeEmailType
를 지정합니다.답안 작성 작업을 실행하는 콜백 함수를 구현합니다. 이 함수에는 이벤트 객체가 인수로 제공됩니다. 콜백 함수는 다음을 실행해야 합니다.
GmailDraft
객체를 만듭니다.ComposeActionResponseBuilder
클래스와GmailDraft
객체를 사용하여ComposeActionResponse
객체를 빌드합니다.- 빌드된
ComposeActionResponse
를 반환합니다.
콜백 함수에서 만드는 GmailDraft
을 수신자, 제목, 메시지 본문, 첨부파일로 미리 채울 수 있습니다. 답안 초안을 작성하기 위해 데이터는 어떤 소스에서든 가져올 수 있지만 일반적으로 부가기능 자체에 제공된 정보, 열려 있는 메시지의 정보 또는 서드 파티 서비스에서 수집한 정보에서 가져옵니다. 콜백 함수에 전달된 이벤트 객체에는 답장 메시지 ID와 초안을 미리 채우는 데 사용할 수 있는 기타 부가기능 정보가 포함됩니다.
초안을 새 독립형 메시지로 만들거나 기존 메시지에 대한 답장으로 만들 수 있습니다. 이는 setComposeAction()
에 제공된 ComposeEmailType
enum으로 제어됩니다.
답장 초안을 단일 답장 또는 '전체에 답장' 메시지로 만들 수 있습니다.
독립형 답안
독립형 초안은 새 대화목록을 시작하며 기존 메시지에 대한 답장이 아닙니다. 다음 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();
}