公開日:2/23/2022  更新日:3/26/2022

  • twitter
  • facebook
  • line

【GAS】Googleフォームの回答をSlack通知するやり方

はじめに

Googleフォーム記入内容をスプレッドシートから抽出してSlackに連携する面倒な作業があり、 GAS (Google Apps Script) を使って自動化できると知ったので本記事のプログラムを作りました。

手順

1.Slack にて Incoming Webhook を設定する

まずは 下記URLからSlackにログインしてincoming-webhookを登録する。
https://my.slack.com/services/new/incoming-webhook/
チャンネルへの投稿欄に通知を投げたいチャンネルを選択後、追加ボタンを押下する。
incoming_webhook
Webhook のURL はGASのコーディングで必要なのでメモっておく。
WebhookURL

2.Google Apps Script の準備

Googleフォームの下記赤枠のスクリプトエディタからGASのページを開いてコーディングをしていく。
Googleフォーム

3.コーディング作業

gas のスクリプトは以下のようになりました。
完成したコード

function myFunction() {
  
  var form = FormApp.getActiveForm();
  var formResponses = form.getResponses();
  var lnum = formResponses.length;
  var itemResponses = formResponses[lnum-1].getItemResponses();

  var name = itemResponses[0].getResponse() + " " 
  var schedule = itemResponses[1].getResponse() + " " + itemResponses[2].getResponse();
  const slackMsg = name + " さんが " +schedule + " に予約しました!";
  sendSlack(slackMsg);
}

function sendSlack(slackMsg){
  // slackにて追加したWebhook URLを設定
  var webHookUrl = "https://hooks.slack.com/services/xxxxxxxxxxxxxxxxxxxxxxxxxx";

  var jsonData =
      {
        "channel": "#test_1",
        'icon_url': "https://www.g-workspace.jp/wp-content/uploads/Forms_Product_Icon_512dp.png",
        "text": slackMsg,
        "link_names": 1,
        "username": "説明会予約通知bot"
      };

  var payload = JSON.stringify(jsonData);

  var options =
      {
        "method": "post",
        "contentType": "application/json",
        "payload": payload
      };

  // リクエスト
  UrlFetchApp.fetch(webHookUrl, options);
}

幾つか補足でコードについて説明を加えます。

  var form = FormApp.getActiveForm();
  var formResponses = form.getResponses();
  var lnum = formResponses.length;
  var itemResponses = formResponses[lnum-1].getItemResponses();

今回は、対象のフォームに紐づく形でスクリプトを作成したのでgetActiveFormで欲しいフォームの情報が取得できます。
FormApp.openBy(フォームID)FormApp.openByUrl(フォームURL) を使用すればフォームを別途指定して情報取得することも可能です。
formResponses.length ではGoogleフォームの総回答数が取得できます。なので、formResponses[lnum-1].getItemResponses()で最新のフォーム回答の情報を取得することが出来ます。 逆にformResponses[0].getItemResponses()だと一番古い回答情報が取得可能です。

  var name = itemResponses[0].getResponse() + " " 
  var schedule = itemResponses[1].getResponse() + " " + itemResponses[2].getResponse();

itemResponses[N].getResponse() で回答があった質問から、N-1番目の回答を取得することが出来ます。
今回は、1番目と2番目と3番目の質問の回答を組み立ててメッセージの文字列を作りました。
※ 注意点
任意の質問が途中に存在した場合、回答の有無により itemResponses[X].getResponse() の結果がずれる可能性あり。

4.トリガー設定

イベントの選択をフォーム送信時に設定する。
トリガー設定

5.動作確認

実際にフォームに必要事項を記入して送信した際にトリガーが正常終了することを確認する。
成功すると、以下のようにSlackに無事通知される。
Slack通知

以上、【GAS】Googleフォームの回答をSlack通知するやり方 でした。
本記事が参考になると幸いです。

戻る