【GAS】Googleフォームで回答が来た時Slackに通知を送るようにしてみた


はじめに

GAS初心者の方はチュートリアル記事を作りましたので、良かったら読んでみてください。
GASで「Hello,World!」を出力するまでをまとめてみた。

目的

  • スプレッドシートが更新されるたびにSlackに通知がくるようにしていたが、新規入力時に項目セルごとに直書きしていたため、通知がうるさくなってしまった。
    そこで、新規入力用のフォームを作成し、回答をスプレッドシートにまとめて、フォーム側で通知処理をするようにしたかった。
  • Qiitaになんか投稿してみたかった。

実装

通知を送りたいチャンネルのWebHook URLを取得します。
手順は下記記事を参照にしました。
SlackのWebhook URL取得手順

対象のGoogleフォームを開き、その他→スクリプトエディタからGASを書いていきます。

FormApp.getActiveForm();

function myFunction(e) {
var webhook = "Webhook URL";

  var body = "Googleフォームの「" + e.source.getTitle() + "」に回答が送信されました。\n\n";
  var itemResponses = e.response.getItemResponses();
  body += "```";
  itemResponses.forEach(function(itemResponse){
    body += '' + itemResponse.getItem().getTitle() + '\n'
    body += itemResponse.getResponse() + '\n'
  });
  body += "```";

  var message = body;

  var jsonData =
 {
    "username" : "insertAlert", // ボットの名前
    "text" : message       //実際に送る内容
 };
 var payload = JSON.stringify(jsonData);
 var options =
 {
   "method" : "post",
   "contentType" : "application/json",
   "payload" : payload
 };

 // リクエストを飛ばすメソッド
 UrlFetchApp.fetch(webhook, options);
}

次に、スクリプトエディタの編集→現在のプロジェクトのトリガーから、下記のトリガーを作成します。

以上です。

結果

フォームから回答を送信すると、

以下の形式でSlackの該当チャンネルに通知が来るようになりました。

終わりに

実装に関しては特に詰まることもなく、先駆者もたくさんいて容易にできました。
Qiitaは初投稿でしたが、インターン先でRedmineを使っていたこともありマークダウン記法に慣れていたため書きやすかったです。
今後もアウトプットを続けていけるよう頑張ります。