[GAS] Google フォームに回答が送信された時Slackに送信する


## [Googleformからのslack通知設定方法 - Qiita](https://qiita.com/pchan52/items/574e930a3cc42cf7f8b9)
https://qiita.com/pchan52/items/574e930a3cc42cf7f8b9
Google フォームに回答があったときSlackに回答内容を送信したいなぁと思って色々探していたら上記の記事を見つけました。
こちらの記事は丁寧でとてもわかりやすかったです。
業務でGoogle フォームをよく使うので、こちらの記事を参考に自分でも作ってみました。

```js
function onFormSubmit(e){
  var itemResponse = e.response.getItemResponses();
  var message = '';
  for(var i = 0; i < itemResponse.length;i++){
    var title = itemResponse[i].getItem().getTitle();
    var response = itemResponse[i].getResponse()
    if(response != ''){
      message = message + title + '\n' + response + '\n';
    }
  }
  
  message = message + '----\n回答URL(スプレッドシート)\n';
  try{
    var destinationId = FormApp.getActiveForm().getDestinationId();
    message = message + '<https://docs.google.com/spreadsheets/d/' + destinationId + '>';
  }catch(e) {  
    message = message + 'なし';
  }
  
  sendToSlack(message); 
}

function sendToSlack(message) {
  var url = "https://hooks.slack.com/services/xxxxx";//incoming webhooksのURL
  var payload = {
    //"channel" :"{ChannelID or Channel Name}", //Channel指定したければ
    "blocks" : [
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text" : ":clipboard: 回答がきたよ〜♪ :clipboard:"
        }
      }
    ],
    "attachments" : [
      {
        //"color" : "#FDA9E9", //色を指定したければ
        "blocks" : [
          {
            "type": "section",
            "text": {
              "type": "mrkdwn",
              "text": "```" 
              + message
              + "```"
            }
          }
        ]
      }
    ]
  }
  
  var options = {
    "method" : "POST",
    "contentType" : "application/json",
    "payload" : JSON.stringify(payload)
  };
  var response = UrlFetchApp.fetch(url, options);
}

```
上記のコードでは、未回答以外の回答について、フォームに設定した質問と回答がSlackに送信されます。
また、フォームに回答を書き出すスプレッドシートが紐付いていた場合、そのスプレッドシートのURLをSlackに送信するようにしました（12 ~ 15行目）。

勉強会の参加アンケートなどにもとりあえず設定すると便利そうですね。  

## 実行結果
![e72732222589a41ff6c89644d0c9935b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259668/4b663f46-977f-fed7-0629-a74e4ac652d5.png)
※`■ ~ ください`までがフォームの質問。その次の行が回答になっています。

## (余談) 普段何に使っている？
普段わたしは主にテストをやっています。
テストに入る前、開発者にテスト対象の説明をしてもらうのですが、その説明のときにGoogle フォームを使って事前にテスト対象やプロジェクトの背景を回答してもらっています。
これについては別途ブログを書いたので、興味がある方はぜひ読んでください。
http://yoshitake-1201.hatenablog.com/entry/2019/08/26/103000

普段使うほうでは、フォームの設問文がそのままSlackに流れるとつらいので以下のように、Slackに表示する設問文をカスタマイズしています。
① 以下の関数を追加

```js
function getCustomTitle(title){
  switch (title) {
    case "■ プロジェクト名(システム名)を教えてください":
      return  '■ 案件名:\n';
    case "■ Staging環境(テスト環境)の情報を教えてください (改行入力可)":
      return  '■ Staging環境:\n';
    case "■ チケット登録をするプロジェクトのURLを教えてください(Github, Backlogなど)":
      return  '■ チケット:\n';
      //////////~~中略~~/////////////
    case "■ 何か知らせておきたいこと/伝えたいこと/気になることなどあれば教えてください(改行入力可)":
      return  '■ その他:\n';
    default:
      return 'おかしい\n';
  }
}
```

② 7 ~ 9行目を以下に変更

```js
    if(response != ''){
      var customTitle = getCustomTitle(title);
      message = message + customTitle + response + '\n';
    }
```

## 参考
- [Class FormResponse](https://developers.google.com/apps-script/reference/forms/form-response)
- [Class ItemResponse ](https://developers.google.com/apps-script/reference/forms/item-response)
- [Class FormApp - getActiveForm() ](https://developers.google.com/apps-script/reference/forms/form-app#getActiveForm())