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

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

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

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

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

  1. マニフェスト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();
}