Gemini SparkとGASを用いたWebページ自動生成・公開・通知システムの構築

Gemini SparkとGoogle Apps Script(GAS)をMCP(Model Context Protocol)経由で連携させ、チャットからの指示で「記事生成・Web公開・Google Chat通知」を行うシステムの仕組みと実装手順を解説します。

1. 概要と処理フロー

処理の流れは以下の通りです。

[ ユーザー ] 
  │ 指示(例: 「米国株式相場のニュースをまとめて公開して」)
  ▼
[ Gemini Spark ] 
  │ 1. 情報収集および記事本文(HTML)の生成
  │ 2. GAS(MCPサーバー)のツール呼び出し
  ▼
[ GAS (MCPサーバー) ]
  ├── ① Google DriveへHTML保存およびアクセス用URLの発行
  └── ② Google Chat Webhookへの通知送信 ➔ チャットにURLが送信される

システムの主な機能

  • Webページ自動生成・公開: チャット指示からHTMLページを生成し共有URLを発行。
  • Google Chat通知: ページ公開完了時に指定のチャットスペースへURLを通知。
  • 保存期間の制御: 指定期間(標準は7日間)が過ぎたページの自動非表示化および保存期間の変更。
  • WordPress連携: 必要に応じてWordPressのREST APIを介した投稿処理への変更。

2. GASの実装コード

GAS側でGemini Sparkからのリクエストを受け取り、ページの保存とGoogle Chatへの通知を行うプログラムです。

// --- 設定項目 ---
const SECRET_TOKEN = "your-custom-secret-token"; // 接続用トークン
const FOLDER_NAME = "Gemini_Generated_Pages";    // ページ保存用フォルダ名
const CHAT_WEBHOOK_URL = "https://chat.googleapis.com/v1/spaces/..."; // Webhook URL

function doPost(e) {
  try {
    const data = JSON.parse(e.postData.contents);
    if (data.token !== SECRET_TOKEN) {
      return responseJSON({ status: "error", message: "Unauthorized" });
    }
    const action = data.action;
    const params = data.params || {};

    if (action === "create_and_notify") {
      return responseJSON(createPageAndNotify(params.title, params.htmlContent, params.summary));
    }
    return responseJSON({ status: "error", message: "Unknown action" });
  } catch (err) {
    return responseJSON({ status: "error", message: err.toString() });
  }
}

function doGet(e) {
  const fileId = e.parameter.id;
  if (!fileId) return HtmlService.createHtmlOutput("Page not found");
  try {
    const file = DriveApp.getFileById(fileId);
    const htmlContent = file.getBlob().getDataAsString();
    return HtmlService.createHtmlOutput(htmlContent);
  } catch (err) {
    return HtmlService.createHtmlOutput("Error: " + err.toString());
  }
}

function createPageAndNotify(title, htmlContent, summary) {
  const folders = DriveApp.getFoldersByName(FOLDER_NAME);
  const folder = folders.hasNext() ? folders.next() : DriveApp.createFolder(FOLDER_NAME);
  
  const file = folder.createFile(title + ".html", htmlContent, MimeType.HTML);
  const pageUrl = ScriptApp.getService().getUrl() + "?id=" + file.getId();

  if (CHAT_WEBHOOK_URL) {
    const payload = { text: `📄 *記事公開通知*\n*タイトル:* ${title}\n*URL:* ${pageUrl}` };
    UrlFetchApp.fetch(CHAT_WEBHOOK_URL, {
      method: "post",
      contentType: "application/json",
      payload: JSON.stringify(payload)
    });
  }

  return { status: "success", pageUrl: pageUrl };
}

function responseJSON(data) {
  return ContentService.createTextOutput(JSON.stringify(data))
    .setMimeType(ContentService.MimeType.JSON);
}

3. デプロイおよび設定手順

  1. GASのスクリプトエディタに上記コードを配置します。
  2. SECRET_TOKENCHAT_WEBHOOK_URL を設定します。
  3. 「デプロイ」>「新しいデプロイ」を開き、Webアプリ(実行: 自分 / アクセス: 全員)としてデプロイします。
  4. 発行されたWebアプリURLをGemini Spark側に登録します。

4. セキュリティに関する注意点

  • トークン管理: アクセス権限が「全員」となるため、認証用トークンを正しく設定してください。
  • 公開範囲: 生成されたURLは公開状態となるため、機密情報や個人情報の取り扱いには注意してください。

コメント

タイトルとURLをコピーしました