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