在 Google Workspace 外掛程式中,您可以建立已連結動作的小工具。您可以使用動作撰寫新的電子郵件草稿,並視需要使用在外掛程式 UI 中輸入的資訊,或開啟訊息中的資訊填入草稿。舉例來說,您可以在外掛程式的訊息 UI 中加入按鈕,為目前開啟的訊息建立回覆,並預先填入外掛程式中的資訊。
當觸發建立郵件的動作時,Gmail 會執行回呼函式來建立並傳回草稿。接著,Gmail 會在標準電子郵件撰寫視窗的 UI 中顯示該草稿,使用者可視需要編輯及傳送。
設定建立草稿訊息的動作
如要設定小工具,讓使用者選取後即可開始草稿建立動作,請執行下列操作:
請確認資訊清單包含
action.compose
範圍:https://www.googleapis.com/auth/gmail.addons.current.action.compose
您可以改用較寬鬆的範圍,但只有在絕對必要時才使用。
呼叫小工具的
setComposeAction()
widget 處理常式函式,為其提供Action
物件,並指定ComposeEmailType
。實作執行草稿建立動作的回呼函式。這個函式會以事件物件做為引數。回呼函式必須執行下列操作:
- 建立
GmailDraft
物件。 - 使用
ComposeActionResponseBuilder
類別和GmailDraft
物件建構ComposeActionResponse
物件。 - 傳回已建構的
ComposeActionResponse
。
- 建立
您可以在回呼函式中,使用收件者、主旨、訊息主體和附件,預先填入您建立的 GmailDraft
。如要填入草稿,資料可以來自任何來源,但通常會來自提供給外掛程式本身的資訊、開啟訊息中的資訊,或是從第三方服務收集的資訊。傳遞至回呼函式的事件物件包含已開啟的訊息 ID 和其他外掛程式資訊,可用於預先填入草稿。
您可以建立草稿做為新的獨立訊息,或是回覆現有訊息。這項功能由 setComposeAction()
所指定的 ComposeEmailType
列舉控制。你可以建立回覆草稿,做為單一回覆或「回覆所有人」訊息。
獨立草稿
獨立草稿會啟動新的會話串,且不會回覆任何現有訊息。您可以使用下列任一 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();
}