メッセージの下書きを作成する

アドオンでは、リンクされた アクションを持つ ウィジェットを作成できます。アクションを使用して、新しいメールの下書きを作成できます。必要に応じて、アドオン UI に入力された情報や、開いているメッセージの情報を使用して下書きを入力することもできます。たとえば、アドオンのメッセージ UI にボタンを配置して、現在開いているメッセージへの返信を作成し、アドオンからの情報を事前に入力することができます。

メッセージを作成するアクションがトリガーされると、Gmail はコールバック関数を実行して下書きを作成し、返します。Gmail は、標準のメール作成ウィンドウの UI にその下書きを表示します。ユーザーは必要に応じて下書きを編集して送信できます。

下書きメッセージを作成するアクションを構成する

選択時に下書き作成アクションを開始するようにウィジェットを構成するには、次の操作を行う必要があります。

  1. マニフェストに manifest includes the action.compose スコープが含まれていることを確認します。

    https://www.googleapis.com/auth/gmail.addons.current.action.compose

    より緩いスコープを使用することもできますが、そのスコープが絶対に必要でない限り使用しないでください。

  2. Action オブジェクトを作成し、定義した コールバック関数に関連付けます。

  3. ウィジェットの setComposeAction ウィジェット ハンドラ関数を呼び出しAction オブジェクトを指定して ComposeEmailTypeを指定します。

  4. 下書き作成アクションを実行するコールバック関数を実装します。この 関数には、 イベント オブジェクト が引数として渡されます。コールバック関数は次の処理を行う必要があります。

    1. GmailDraft オブジェクトを作成します。
    2. ComposeActionResponseBuilder クラスと GmailDraft オブジェクトを使用して、ComposeActionResponse オブジェクトを作成します。
    3. 作成した ComposeActionResponse を返します。

コールバック関数で作成するGmailDraft に、 受信者、件名、メッセージ本文、添付ファイルを事前に入力できます。下書きに入力するデータは任意のソースから取得できますが、通常はアドオン自体に提供された情報、開いているメッセージの情報、サードパーティ サービスから収集した情報から取得します。コールバック関数に渡される イベント オブジェクトには、開いているメッセージ ID と、下書きの事前入力に使用できるその他のアドオン 情報が含まれています。

下書きは、新しいスタンドアロン メッセージとして作成することも、既存のメッセージへの返信として作成することもできます。これは、 setComposeActionに指定された ComposeEmailType 列挙型によって制御されます。 返信の下書きは、単一の返信または「全員に返信」メッセージとして作成できます。

スタンドアロンの下書き

スタンドアロンの下書きは新しいスレッドを開始し、既存のメッセージへの返信ではありません。スタンドアロンの下書きは、次のいずれかの Gmail サービス関数を使用して作成できます。

返信の下書き

返信の下書きは、既存のメッセージ スレッドの一部です。返信の下書きは、メッセージの送信者にのみ送信される単一の返信か、そのメッセージを受信した全員に送信される「全員に返信」の下書きです。返信の下書きは、次のいずれかの Gmail サービス関数を使用して作成できます。

次のコード スニペットは、返信の下書きを作成するアクションをボタンに割り当てる方法を示しています。

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 previously
  // specified.
  return CardService.newComposeActionResponseBuilder()
      .setGmailDraft(draft).build();
}