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

Google Workspace アドオンでは、リンクされたアクションを持つウィジェットを作成できます。アクションを使用して新しいメールの下書きを作成できます。必要に応じて、アドオンの 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 specified
    // above.
    return CardService.newComposeActionResponseBuilder()
        .setGmailDraft(draft).build();
  }