メインコンテンツにスキップ
すべてのコレクションフォーム
フォームデータを利用した外部 API 連携
フォームデータを利用した外部 API 連携

Spreadsheet と Google Apps Script を利用した外部 API の呼び出し

Morota avatar
対応者:Morota
2か月以上前に更新

どんなことができる?

Studio で作ったサイトのフォーム結果データを外部 API で受け取って簡単な処理をしたい場合、外部連携機能を使えば実現することができます!この記事ではサンプルとして、スプレッドシートを介した Slack との連携方法をご紹介します。

※ こちらのヘルプの内容は Googe Apps Script の知識がある方向けの応用的な内容となっており、Google Apps Script に関する不明点等を Studioで個別にサポートすることはできかねますのでご了承ください! Google Apps Script を使わずに GUI ベースで設定が可能な Zapier との連携方法もご紹介しているのでそちらも参考にしてください!

事前準備

Studio上でフォームの作成

こちらのヘルプを参考にフォームを作成してください。
このヘルプでは下記項目を持つフォームを対象に設定を行います。

Slack の Incoming Webhook の作成

Slackの公式ドキュメントを参考に Incoming Webhook URL を取得してください 。

Spreadsheet の設定

Studioのフォーム結果をスプレッドシートと連携します。

こちらの解説を参考に、目的のフォームの設定メニューより連携を行ってください。

Google Apps Script の設定

スクリプトの作成

連携した Spreadsheet を開き、「ツール」→「スクリプトエディター」からスクリプトの作成画面へ遷移してください。

スクリプト作成画面へ遷移したら、エディター部分に実際のコードを記述していきます。Google Apps Script から外部 API の呼び出しは、UrlFetchApp.fetch というメソッドを利用すると可能です。以下は、Slack の webhook API へ JSON をリクエストのペイロードとして送る場合のサンプルコードです。


function sendToSlackSample(e) {
   // 行の追加イベントのみを対象とする
   if (e.changeType != "INSERT_ROW") {
       return;
   }
 
    //有効なGooglesプレッドシートを開く
const sheet = SpreadsheetApp.getActiveSheet();

    // 新規追加された行番号を取得
const lastRow = sheet.getLastRow();
// メッセージ内容を作成
const text = "Name:: " + sheet.getRange(lastRow,1).getValue() + "\n"
+ "Email:: " + sheet.getRange(lastRow,2).getValue() + "\n"
+ "Message:: " + sheet.getRange(lastRow,3).getValue();

// Slack API へ送るパラメータの設定
const data = {
'channel': '<slack channel name>',
'icon_url': '<slack icon path>',
'text': text,
'link_names': 1,
'username': '<slack user name>'
};
const options = {
'method': 'post',
'contentType': 'application/json',
'payload': JSON.stringify(data)
};
   // Slack API の呼び出し
const response = UrlFetchApp.fetch('<slack webhook api endpoint>', options);
}

fetch の第2引数に渡す options に以下のフィールドをセットしています。

  • method: HTTP method

  • contentType: application/json を指定

  • payload: リクエストのペイロードをJSONにする

Slack の API パラメータの詳細に関しては、公式のドキュメントをご参照ください。

入力完了後はこのようになります。

トリガーの設定

作成したスクリプトは「編集」から「現在のプロジェクトのトリガー」を選択する事でトリガーの設定が可能です。

トリガー設定画面に遷移すると下記画像のような画面になるので、右下の「+トリガーを追加」を押してトリガーを作成します。

作成画面では、下記の内容を選択し「保存」を押します。

実行する関数: sendToSlackSmaple

実行するデプロイを選択: Head

イベントのソースを選択:スプレッドシートから

イベントの種類を選択:変更時

「保存」を押すと Google 認証画面に遷移するので、Studio 上で Spreadsheet 連携をしたアカウントと同じアカウントで認証を行います。この際に、下記画像のような警告が表示された場合は、「詳細」をクリックして「<作成したスクリプトプロジェクト名>に移動」をクリックしてください。

トリガーの設定は以上で完了です。

フォームを投稿すると、次のような通知が Slack に届きます。

実際にサイトやライブプレビューにフォームを投稿して動作をご確認ください。

この記事では Slack を例に API連携を行いましたが、呼び出す API の URL とリクエストのパラメータを変更することで任意の API の呼び出しが可能です。

サンプルコードを拡張してお好きな API と接続してみてください!

こちらの回答で解決しましたか?