Open10
Google スプレッドシートの Webhook 機能を試してみる

このスクラップについて
このスクラップでは Google スプレッドシートのエンドポイントに HTTP リクエストを送信し、スプレッドシートに内容を保存するということを試してみる。

ChatGPT に聞いてみる
プロンプト
Google スプレッドシートに JSON 形式の POST リクエストを送信すると、
内容がスプレッドシートに保存するようにしたいです。
方法を教えてください。

スプレッドシートの作成
まずはスプレッドシートを作成する。
name, email, message 列を作成した。

timestamp 列も最初に必要だった。

GAS を書く
コード.gs
function doPost(e) {
try {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const data = JSON.parse(e.postData.contents);
// 書き込むデータの順番を指定
const row = [
new Date(), // タイムスタンプ
data.name,
data.email,
data.message
];
sheet.appendRow(row);
return ContentService
.createTextOutput(JSON.stringify({ result: 'success' }))
.setMimeType(ContentService.MimeType.JSON);
} catch (error) {
return ContentService
.createTextOutput(JSON.stringify({ result: 'error', error: error.message }))
.setMimeType(ContentService.MimeType.JSON);
}
}

デプロイ
Web アプリとしてデプロイすると、下記のような URL が発行された。
発行された URL の例
https://script.google.com/macros/s/xxxx/exec
アクセスできるユーザーを全員とした。
そうすると誰でもアクセスできるようになるので API キーをヘッダーやリクエストボディに設けると良いかも知れない。

動作確認
コマンド(例)
curl -X POST "https://script.google.com/macros/s/xxxx/exec" \
-H "Content-Type: application/json" \
-d '{"name": "山田太郎", "email": "taro@example.com", "message": "こんにちは!"}'
失敗してしまった

一晩経ったらできた
もしかしたら承認でキャンセルをしてしまったのかも知れない。

レスポンスが気になる
<HTML>
<HEAD>
<TITLE>Moved Temporarily</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<!-- GSE Default Error -->
<H1>Moved Temporarily</H1>
The document has moved <A HREF="https://script.googleusercontent.com/macros/echo?user_content_key=AehSKLj9MP3pcHl4MQ5g5R6-hd5N9jPM0lzEIFZw-4njnyijssWMi6rtpJD0K55pDcy8Hjwh-VFVx0N0jimG6Y_sSjT6QY4NoJWC-QihWjo93LtN-RxNsxU3pUHRFn9tUxhwBmWalFRagjPp_tRV5V0e3bZDLz1Nm064regp3d4oZF-nIOgFlq4Tyo0zuBHqVVOIoylAEzTd2M7T0KYOfQWwzY2vfPzIt5oVa53ypvyW7zFbTWG_OTeECOmYE-Qq9tL3w1uw7pQanvYM-FP9SSZMCoizxxi-e7Kth3-7udrp&lib=MmCEgPqfaKNc6iR16APm0SyohFHFWEbZd">here</A>.
</BODY>
</HTML>

実行可能 API が面白そう
こちらの方が用途には合ってそうだ。