Gmail を拡張する Google Workspace アドオンは、ユーザーがメールを読むときにユーザー インターフェースを提供できます。これにより、Google Workspace アドオンは、メッセージに関連する追加情報の表示、取得、送信など、メッセージ コンテンツに応答するタスクを自動化できます。
アドオン メッセージ UI へのアクセス
アドオンのメッセージ UI を表示するには、2 つの方法があります。1 つ目は、アドオンがすでに開いているときにメールを開くことです(Gmail の受信トレイ ウィンドウでアドオン ホームページを表示する場合など)。2 つ目の方法は、メッセージの表示中にアドオンを開始する方法です。
いずれの場合も、アドオンはアドオンのマニフェストで定義されている、対応するコンテキスト トリガー関数を実行します。また、アドオンが開いているときにユーザーが別のメッセージに切り替えた場合にもトリガーが実行されます。コンテキスト トリガー関数によってそのメッセージのメッセージ UI がビルドされ、Gmail がユーザーに表示されます。
メッセージ アドオンの作成
アドオンにメッセージ機能を追加するには、次の一般的な手順を行います。
- メッセージ機能に必要なスコープなど、適切なフィールドをアドオン スクリプト プロジェクトのマニフェストに追加します。
unconditional
値を{}
にして、条件付きトリガー フィールドをマニフェストに追加します。 - ユーザーがメッセージでアドオンを選択したときにメッセージ UI を構築するコンテキスト トリガー関数を実装します。
- ユーザーの UI インタラクションに応答するために必要な関連関数を実装します。
コンテキスト トリガー
ユーザーがメッセージを読む際に役立つように、Google Workspace アドオンではマニフェストでコンテキスト トリガーを定義できます。トリガーの条件に一致する Gmail メッセージをアドオンで開くと、トリガーが発動します。配信されたトリガーは、アドオンのユーザー インターフェースを構築し、Gmail で表示するコンテキスト トリガー関数を実行します。ユーザーはこの時点で操作を開始できます。
コンテキスト トリガーは、アドオンのマニフェストで定義されます。トリガーの定義は、どの条件下でどのトリガー関数を呼び出すかを Gmail に指示します。たとえば、次のマニフェスト スニペットは、メッセージを開いたときにトリガー関数 onGmailMessageOpen()
を呼び出す無条件トリガーを設定します。
{ ... "addOns": { "common": { ... }, "gmail": { "contextualTriggers": [ { "unconditional": {}, "onTriggerFunction": "onGmailMessageOpen" } ], ... }, ... } ... }
コンテキスト トリガー関数
すべてのコンテキスト トリガーには、アドオンのユーザー インターフェースを構築するトリガー関数が必要です。マニフェストの onTriggerFunction
フィールドに指定します。この関数は、アクション イベント オブジェクト引数を受け入れて、単一の Card
オブジェクトまたは Card
オブジェクトの配列を返します。
特定の Gmail メッセージでコンテキスト トリガーが発生すると、この関数が呼び出され、アクション イベント オブジェクトが渡されます。多くの場合、トリガー関数は、このイベント オブジェクトによって提供されるメッセージ ID を使用して、Apps Script の Gmail サービスによってメッセージ テキストやその他の詳細を取得します。たとえば、トリガー関数を使用して次の関数でメッセージ コンテンツを抽出できます。
// Activate temporary Gmail scopes, in this case to allow
// the add-on to read message metadata and content.
var accessToken = e.gmail.accessToken;
GmailApp.setCurrentMessageAccessToken(accessToken);
// Read message metadata and content. This requires the Gmail scope
// https://www.googleapis.com/auth/gmail.addons.current.message.readonly.
var messageId = e.gmail.messageId;
var message = GmailApp.getMessageById(messageId);
var subject = message.getSubject();
var sender = message.getFrom();
var body = message.getPlainBody();
var messageDate = message.getDate();
// Setting the access token with a gmail.addons.current.message.readonly
// scope also allows read access to the other messages in the thread.
var thread = message.getThread();
var threadMessages = thread.getMessages();
// Using this link can avoid the need to copy message or thread content
var threadLink = thread.getPermalink();
トリガー関数は、このデータを使用して、インターフェースに必要な情報を抽出します。たとえば、販売番号を要約するアドオンは、メッセージ本文から販売数を収集し、カードに表示するために整理できます。
トリガー関数は、ビルドされた Card
オブジェクトの配列をビルドして返す必要があります。たとえば、次の例では、メッセージの件名と送信者をリストアップした単一のカードを使用してアドオンを構築しています。
function onGmailMessageOpen(e) {
// Activate temporary Gmail scopes, in this case to allow
// message metadata to be read.
var accessToken = e.gmail.accessToken;
GmailApp.setCurrentMessageAccessToken(accessToken);
var messageId = e.gmail.messageId;
var message = GmailApp.getMessageById(messageId);
var subject = message.getSubject();
var sender = message.getFrom();
// Create a card with a single card section and two widgets.
// Be sure to execute build() to finalize the card construction.
var exampleCard = CardService.newCardBuilder()
.setHeader(CardService.newCardHeader()
.setTitle('Example card'))
.addSection(CardService.newCardSection()
.addWidget(CardService.newKeyValue()
.setTopLabel('Subject')
.setContent(subject))
.addWidget(CardService.newKeyValue()
.setTopLabel('From')
.setContent(sender)))
.build(); // Don't forget to build the Card!
return [exampleCard];
}