SlackにGoogleフォームの結果を通知したい! – 2019年版

最近はどんどんSlackやチャットツールが出てきて情報飽和がさらに加速しているなーと実感しています。
そういう時代だからこそ情報の一元管理って大切だなって感じます。

今回はアンケートでよく使うGoogleFormを使って、送信後にSlackに自動送信されるコードを紹介します。と、言っても4流以下のスキルですから大したコードをかけてないのが正直なところですが。。笑
なので紹介しているのはこれからGASを覚えようとか、GASってなーに？って人向けの記事ばかりです！

##サイト紹介
以下様々なGASやその他記事を紹介してます！
https://bzbot.work/

紹介記事
今回紹介している記事は以下です！
https://bzbot.work/2019/04/08/googleform-slack/


##送信結果
まず、GoogleFormが送信された時に、以下通知がSlackに届くように設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/363116/699753a2-591a-bb72-2c92-7750fc1fc8ca.png)

以下URLを開くとSlackで送信したいchannelを指定することができます。
channelを指定すると「Add Incoming WebHooks integration」が緑ボタンに変わるのでクリックして進みます。
https://slack.com/services/new/incoming-webhook
![image.png](https://qiita-image-store.s3.amazonaws.com/0/363116/bae7f4d8-7192-e246-f844-f27b43db2d3c.png)

進むと、「Webhook URL」の項目があるのでURLをコピーします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/363116/569a433e-dabd-ff4d-ad70-bc94cdfdda2c.png)


コピーしたらGASに記載されている//slackのwebhookURL〜にセットします。
セットが完了したら一番下に表示されている「Save Setting」をクリックして保存します。

##GASコード紹介
###GASでGoogleフォームからのデータを加工する
※Logger.logは不要であれば削除してください

簡単に説明しますが、大きく分けて『GASでGoogleフォームからのデータを加工する』『GASでメールに送る』『GASでSlackに送る』という処理に別れていて、それぞれをメールとSlackの送信を好きなように使い分けることができます。

```JavaScript:GAS
function submitForm(e){
  var itemResponses = e.response.getItemResponses();
  var message = '';
  
  //itemResponsesに入っている分だけ繰り返す
  for (var i = 0; i < itemResponses.length; i++) {
    var itemResponse = itemResponses[i];
    //formの質問内容を取得
    var question = itemResponse.getItem().getTitle();
    //formの選択内容を取得
    var answer = itemResponse.getResponse();
    Logger.log(i + '回目question:' + question);
    Logger.log(i + '回目answer:' + answer);
    
    //ループごとに増えていく情報を改行してくっつけていく（/nは改行）
    message += (i + 1).toString() + '. ' + question + ': ' + answer + '\n'; 
  }
  Logger.log('message:' + message);
  var content = '評価シート入力結果--------------------\n\n' + message;
  //メールを送りたい場合
  sendMail(content);
  //Slackに送りたい場合
  sendToSlack(content);
}


function sendMail(body){
  Logger.log(body);
  var address = 'bzbot@bzbot.work';
  var title = '[評価シートの入力結果です]';

  GmailApp.sendEmail(address, title, body);
}


function sendToSlack(body) {
  Logger.log(body);
  //Slackのチャンネル名を指定
  var ch = "#bzbot";
  //SlackのwebhookURLを指定
  var url = "https://hooks.slack.com/**********************************************";
  //渡すデータを指定する
  var data = { "channel" : ch, "username" : "GoogleフォームBot", "text" : body, "icon_emoji" : ":sneezing_face: " };
  var payload = JSON.stringify(data);
  var options = {
    "method" : "POST",
    "contentType" : "application/json",
    "payload" : payload
  };
  var response = UrlFetchApp.fetch(url, options);
}

```


```text:Logger.log()
[19-03-26 00:28:23:644 JST] 0回目question:評価者を選択してください
[19-03-26 00:28:23:644 JST] 0回目answer:担当A
[19-03-26 00:28:23:721 JST] 1回目question:評価者の◯◯を選択してください
[19-03-26 00:28:23:722 JST] 1回目answer:7,6,5
[19-03-26 00:28:23:799 JST] 2回目question:コメントを入力してください
[19-03-26 00:28:23:800 JST] 2回目answer:GoogleフォームとGASを連携してSlackに通知を送る！
[19-03-26 00:28:23:801 JST] message:1. 評価者を選択してください: 担当A
2. 評価者の◯◯を選択してください: 7,6,5
3. コメントを入力してください: GoogleフォームとGASを連携してSlackに通知を送る！

[19-03-26 00:28:23:801 JST] 評価シート入力結果--------------------

1. 評価者を選択してください: 担当A
2. 評価者の◯◯を選択してください: 7,6,5
3. コメントを入力してください: GoogleフォームとGASを連携してSlackに通知を送る！

[19-03-26 00:28:24:036 JST] 評価シート入力結果--------------------

1. 評価者を選択してください: 担当A
2. 評価者の◯◯を選択してください: 7,6,5
3. コメントを入力してください: GoogleフォームとGASを連携してSlackに通知を送る！
```


こんな感じ。
色々呼び出している関数は他の処理でも応用して使えるので覚えておくと便利です！