39
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2020-02-01

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

1.LINENotifyにアクセスして、右上の「ログイン」からLINEにログイン
https://notify-bot.line.me/ja/
image.png

2.右上の名前のところをクリックして、マイページを選択
image.png

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

4.通知の際に表示されるトークン名とトークルーム(グループ)を選択
image.png

5.発行されたトークンをコピーしておく(後で使う)
※アクセストークンを発行すると、マイページの連携中サービスに表示される
image.png

6.グループに「LINE Notify」を追加する
iOS の画像 (2).png

Googleフォームの作成

説明は面倒なので割愛。今回はこのフォームを使用する
image.png

回答のところからスプレッドシートを作成しておく
image.png

GAS

1.メニューバーのツール→スプリクトエディタをクリック
image.png

2.GASが開くので左上の「無題のプロジェクト」をクリックしてファイル名を適当に入力
image.png

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

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
}

4.左上のファイル→プロジェクトのプロパティ→スプリクトのプロパティを選択
image.png

5.行を追加をクリックして、プロパティにはLINE_TOKEN、値にはLINENotifyで取得したトークンを入力して保存
image.png

6.メニューバーの編集→現在のプロジェクトのトリガーをクリック
image.png

7.「トリガーを追加する」をクリックし、以下のように設定する

  • 実行する関数を選択:GoogleFormToline
  • 実行するデプロイを選択:Head
  • イベントのソースを選択:スプレッドシートから
  • イベントの種類を選択:フォーム送信時
  • エラー通知設定:お好きにどうぞ
    image.png

8.Googleへのログイン画面が出た場合は、ログインして「安全なページに戻る」ではなく、左の詳細をクリックし、「安全でないページに移動」をクリック
image.png

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

動作確認

ためしに以下の内容でフォームを送ってみる
image.png

ちゃんと動きますね
lineimage.jpg

改良版

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

改善点

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

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

39
30
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?