Open10

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

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

このスクラップについて

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

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

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);
  }
}
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

デプロイ

Web アプリとしてデプロイすると、下記のような URL が発行された。

発行された URL の例
https://script.google.com/macros/s/xxxx/exec

アクセスできるユーザーを全員とした。

そうすると誰でもアクセスできるようになるので API キーをヘッダーやリクエストボディに設けると良いかも知れない。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

動作確認

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


失敗してしまった

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

レスポンスが気になる

<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&amp;lib=MmCEgPqfaKNc6iR16APm0SyohFHFWEbZd">here</A>.
</BODY>
</HTML>