Skip to the content.

API仕様

概要

AppSheet AI Processorは2つのエンドポイントを提供します。

処理フロー

sequenceDiagram participant AS as AppSheet participant CR as Cloud Run participant VA as Vertex AI participant GS as Google Sheets AS->>CR: POST /process Note over CR: X-AppSheet-Secret検証 alt 認証失敗 CR-->>AS: 403 Forbidden end CR->>CR: JSONパース alt パースエラー CR-->>AS: 400 Bad Request end CR->>VA: Gemini処理リクエスト alt AI処理エラー CR-->>AS: 500 Internal Server Error end VA-->>CR: 処理結果 CR->>GS: 結果書き込み alt 書き込みエラー CR-->>AS: 500 Internal Server Error end GS-->>CR: 完了 CR-->>AS: 200 OK + 結果JSON

POST /process

AppSheet Webhookからのリクエストを受け付け、AI処理を実行します。

リクエスト

ヘッダー

ヘッダー 必須 説明
Content-Type はい application/json
X-AppSheet-Secret はい Webhook認証用シークレット

ボディ

AppSheetの <<_ROW_TO_JSON>> 形式のJSONデータ。

{
  "RowID": "abc-123",
  "TargetText": "処理対象のテキストデータ",
  "Category": "カテゴリA",
  "Status": "未処理"
}
フィールド 説明
{PK_COLUMN} string 主キー(環境変数で指定)
{TARGET_COLUMN} string AI処理対象テキスト(環境変数で指定)
その他 any AppSheetの行データ

レスポンス

成功時 (200 OK)

{
  "status": "success",
  "row_id": "abc-123",
  "ai_result": "AIによる処理結果テキスト...",
  "processed_at": "2025-12-12T10:00:05Z"
}
フィールド 説明
status string "success"
row_id string 処理した行の主キー
ai_result string Geminiによる処理結果
processed_at string 処理日時(ISO 8601形式)

エラー時

ステータス 説明 レスポンス例
400 Bad Request リクエスト形式エラー {"error": "必須フィールドがありません: RowID"}
403 Forbidden 認証エラー {"error": "認証に失敗しました"}
500 Internal Server Error サーバーエラー {"error": "AI処理中にエラーが発生しました"}

cURLサンプル

curl -X POST https://appsheet-ai-processor-xxx.run.app/process \
  -H "Content-Type: application/json" \
  -H "X-AppSheet-Secret: your-webhook-secret" \
  -d '{
    "RowID": "abc-123",
    "TargetText": "処理対象のテキスト"
  }'

GET /health

ヘルスチェック用エンドポイント。Cloud Runのヘルスチェックやモニタリングに使用します。

リクエスト

認証不要。

レスポンス

{
  "status": "healthy",
  "version": "1.0.0"
}
フィールド 説明
status string "healthy"
version string アプリケーションバージョン

cURLサンプル

curl https://appsheet-ai-processor-xxx.run.app/health

環境変数

APIの動作に必要な環境変数です。

必須

変数名 説明
PROJECT_ID GCPプロジェクトID sanwa-appsheet-vertex
SPREADSHEET_ID スプレッドシートID 1ABC...xyz
SHEET_NAME シート名 介護記録
PK_COLUMN 主キーカラム名 RowID
TARGET_COLUMN 処理対象カラム名 TargetText
RESULT_COLUMN 結果書き込みカラム名 AIResult
WEBHOOK_SECRET 認証シークレット 32文字以上のランダム文字列

オプション

変数名 デフォルト 説明
VERTEX_AI_LOCATION asia-northeast1 Vertex AIリージョン
VERTEX_AI_MODEL gemini-1.5-flash 使用モデル
LOG_LEVEL INFO ログレベル

エラーハンドリング

認証エラー (403)

X-AppSheet-Secretヘッダーが存在しない、または値が不正な場合。

{
  "error": "認証ヘッダーがありません"
}
{
  "error": "認証に失敗しました"
}

リクエストエラー (400)

JSONフォーマットエラーまたは必須フィールドの欠落。

{
  "error": "無効なJSONフォーマットです"
}
{
  "error": "必須フィールドがありません: RowID, TargetText"
}

サーバーエラー (500)

Vertex AIまたはSheets APIでのエラー。

{
  "error": "AI処理中にエラーが発生しました"
}
{
  "error": "スプレッドシートへの書き込み中にエラーが発生しました"
}