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
列挙型によって制御されます。返信の下書きは、1 件の返信または「全員に返信」するメッセージとして作成できます。
スタンドアロンの下書き
スタンドアロンの下書きは新しいスレッドを開始するもので、既存のメッセージに対する返信ではありません。次のいずれかの Gmail サービス関数を使用して、スタンドアロンの下書きを作成できます。
GmailApp.createDraft(recipient, subject, body)
GmailApp.createDraft(recipient, subject, body, options)
返信の下書き
返信の下書きは既存のメッセージ スレッドに含まれています。返信の下書きは、メッセージの送信者にのみ送信される 1 つの返信か、そのメッセージを受信したすべてのユーザーに送信される「全員に返信」の下書きです。返信の下書きは、次のいずれかの 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();
}