Googleフォームの回答内容をLINEで通知する

GASのUIなどが変更されているので、こちらの記事にまとめています。
https://tech.minagu.work/archives/21

# 目的
Goolgeフォームの内容をLINEへ通知する。
Slackへ通知する方法→https://qiita.com/guchimina/items/a19860298e270060a678

# 使用するもの
- GoogleAppsScript(GAS)
- LINENotify

# 実装

紹介する順番は、
1. 通知を送るLINEグループの作成
2. LINENotifyの設定
3. Googleフォームの作成
4. GASの設定

## LINEグループ

普通にLINEアプリからグループを作成

## LINENotify

１．LINENotifyにアクセスして、右上の「ログイン」からLINEにログイン
https://notify-bot.line.me/ja/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430946/118ec893-dae1-ec46-bd31-d55544f60cc0.png)


２．右上の名前のところをクリックして、マイページを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430946/80c3fa11-3db1-861a-9857-10b6a18241d6.png)


３．ページの下部にある「トークンを発行する」をクリック

４．通知の際に表示されるトークン名とトークルーム(グループ)を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430946/c1923f3e-b8f8-d841-ab66-9007e590a33b.png)

５．発行されたトークンをコピーしておく(後で使う)
※アクセストークンを発行すると、マイページの連携中サービスに表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430946/4f5f8991-6e12-2337-7b25-5bcfcb09a1ce.png)

６．グループに「LINE Notify」を追加する
![iOS の画像 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430946/f06499c6-c770-d420-d99a-217468a89068.png)


## Googleフォームの作成

説明は面倒なので割愛。今回はこのフォームを使用する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430946/9a4727e7-029e-0c2e-7177-aa47103a2872.png)

回答のところからスプレッドシートを作成しておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430946/ad609036-a286-9761-0865-7ebdfa816eb4.png)


## GAS

１．メニューバーのツール→スプリクトエディタをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430946/e15fe38a-f81c-ef88-fc74-912cbfa82c0c.png)

２．GASが開くので左上の「無題のプロジェクト」をクリックしてファイル名を適当に入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430946/2951ea26-3c78-4c9d-30a1-79927de80c6b.png)


３．デフォルトで記述されているコードを全消しして以下のコードをコピペして保存(自動保存されないので注意)

```googletoline1.js
//spreadsheetからデータを取得
function GoogleFormToLine(){
  var sheet = SpreadsheetApp.getActiveSheet(); //sheetの指定
  var row = sheet.getLastRow(); //行数
  var column = sheet.getLastColumn(); //列数
  var range = sheet.getDataRange(); //sheetから範囲指定するための準備
  var message = "";
  for(var i=1;i<=column;i++){
    var item = range.getCell(1, i).getValue(); //1行目
    var value = range.getCell(row, i).getValue(); //最終行
    message += "\n■"+item+"\n"+value; 
  }
  SendToLine(message);
}

//LINEに通知
function SendToLine(message){
  //ファイル→プロジェクトのプロパティ→スプリクトのプロパティからLINE_TOKENを設定しておく
  var token = PropertiesService.getScriptProperties().getProperty('LINE_TOKEN');
  var op =
    {
      "method" : "post",
      "Content-Type" : "application/x-www-form-urlencoded",
      "payload": "message=" + message,
      "headers":{"Authorization" : "Bearer " + token}
    };
  var res = UrlFetchApp.fetch("https://notify-api.line.me/api/notify",op);
  Logger.log(JSON.parse(res.getContentText())); //Response
}
```

４．左上のファイル→プロジェクトのプロパティ→スプリクトのプロパティを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430946/4107d4d1-9903-bb16-5133-ecb1e360df5e.png)

５．行を追加をクリックして、プロパティには`LINE_TOKEN`、値にはLINENotifyで取得したトークンを入力して保存
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430946/d0894d31-070b-8e0c-36e7-0c7a88ff92fb.png)

６．メニューバーの編集→現在のプロジェクトのトリガーをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430946/b99ed858-4f71-3226-94c1-e7e487e7384f.png)

７．「トリガーを追加する」をクリックし、以下のように設定する
- 実行する関数を選択：GoogleFormToline
- 実行するデプロイを選択：Head
- イベントのソースを選択：スプレッドシートから
- イベントの種類を選択：フォーム送信時
- エラー通知設定：お好きにどうぞ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430946/4f1ab6d3-a96e-7038-a57e-f7b7c8cd8923.png)

８．Googleへのログイン画面が出た場合は、ログインして「安全なページに戻る」ではなく、左の詳細をクリックし、「安全でないページに移動」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430946/cfa50e4c-383b-de40-1ebe-d6cdc5e18490.png)

９。Googleアカウントへのアクセスをリクエストされたら許可する


# 動作確認
ためしに以下の内容でフォームを送ってみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430946/4180e8eb-fe0c-9ef3-83cc-e6dc8fd92267.png)

ちゃんと動きますね
![lineimage.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430946/a377bfc6-d1aa-112e-79db-e3c51f77da6b.jpeg)

## 改良版
8行目から以下のように変更すると、タイムスタンプのところが見やすくなる
タイムスタンプについて詳しく→https://qiita.com/madebyjun/items/563ff0b387fcc58602be

```googletoline2.js
for(var i=1;i<=column;i++){
  var item = range.getCell(1, i).getValue(); //1行目
  var value = range.getCell(row, i).getValue(); //最終行
  if(item == "タイムスタンプ"){
    value = Utilities.formatDate(value,"JST","yy/MM/dd(E) HH:mm:ss");
  }
  message += "\n■"+item+"\n"+value; 
}
```

![iOS の画像 (4).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430946/7d55302e-f081-43be-4a56-b4c0d077ef7d.jpeg)

# 改善点

`item`や`value`の部分をうまく制御すれば、通知する内容はもっと見やすくなるかも。

さらに改良したい場合は公式のドキュメント読んでください。

- LINE Notify API Document：https://notify-bot.line.me/doc/ja/
- Google Apps Script：https://developers.google.com/apps-script