2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GASを使ってGoogleフォームの回答をLINEに通知する手順

Posted at

説明

GAS(Google App Script)を使い、Googleフォームの回答をLINEに通知する手順について解説します。

事前準備として、以下の2つを終わらせておいてください。

  • 通知する為の LINE グループを作成している事。
  • 又、その際に LINE Notify をお友だち追加してグループへ招待しておく事。

1.jpg
2.png

■ 手順

1. LINE Notify の設定

1.1 LINE Notify ページへアクセスし、ログイン。
3.png

1.2 メールアドレス・パスワードを入力。
4.png

1.3 ログイン出来た事を確認。右上の自分の名前をクリックし、マイページへログイン。
5.png

1.4 下にスクロールすると「トークンを発行する」というボタンがあるため押下。
6.png

1.5 トークン名と通知をする対象のチャンネルを決めて、「発行する」を押下。
7.png

1.6 トークンが発行されるため必ずメモをする。(1回しか表示されない)
8.png

2. GAS (Google App Script) の設定

2.1 Google フォームを作ったら、「スプレッドシートにリンク」を押下。
9.png

2.2 今回は新しいスプレッドシートを作成する。
10.png

2.3 タイムスタンプという言葉だと少し分かりにくいので「回答送信日時」に変更する。
(項番2.5のソースコード、13行目でも ”回答送信日時” という言葉で統一してる)

  • 変更前

11.png

  • 変更後

12.png

2.4 拡張機能 → App Script を押下。
13.png

2.5 command + s で保存後、下記のコードを貼り付ける。(Windows なら ctl + s)

//spreadsheetからデータを取得
function GoogleFormToLine(){
  const sheet = SpreadsheetApp.getActiveSheet(); //sheetの指定
  const row = sheet.getLastRow(); //行数
  const column = sheet.getLastColumn(); //列数
  const range = sheet.getDataRange(); //sheetから範囲指定するための準備
  let message = "";
  
  for(let i=1;i<=column;i++){ // 変数 i を宣言するために let を追加
    const item = range.getCell(1, i).getValue(); //1行目
    let value = range.getCell(row, i).getValue(); //最終行
    
    if(item == "回答送信日時" || item == "お子様の生年月日"){ // タイムスタンプを見やすくする
      if (Object.prototype.toString.call(value) === '[object Date]' && !isNaN(value)) {
        // 取得した値が Date オブジェクトの場合
        value = Utilities.formatDate(value, "Asia/Tokyo", "yyyy年MM月dd日 HH時mm分");
      } else {
        // 取得した値が Date オブジェクトでない場合
        let dateValue = new Date(value);
        if (!isNaN(dateValue.getTime())) {
          value = Utilities.formatDate(dateValue, "Asia/Tokyo", "yyyy年MM月dd日 HH時mm分");
        } else {
          value = "無効な日付";
        }
      }
    }
    message += "\n" + item + "\n" + value;
  }
  
  SendToLine(message);
}

//LINEに通知
function SendToLine(message){
  const token = PropertiesService.getScriptProperties().getProperty('LINE_TOKEN');
  const op = {
    "method": "post",
    "Content-Type": "application/x-www-form-urlencoded",
    "payload": "message=" + message,
    "headers": { "Authorization": "Bearer " + token }
  };
  const res = UrlFetchApp.fetch("https://notify-api.line.me/api/notify", op);
  Logger.log(JSON.parse(res.getContentText())); //Response
}

//Tokenを登録する
//1回実行したら、以下のコードを削除する
function RegisterToken(){
  const LINE_TOKEN = "{LINE_TOKEN_xxxxxxxx}" //ここにLINE_TOKENを入力する
  PropertiesService.getScriptProperties().setProperty('LINE_TOKEN',LINE_TOKEN);
}

2.6 GoogleFormToLine を押下し、RegisterToken を選択し、実行を押下。
14.png
15.png

2.7 「権限を確認」押下し、Google アカウント認証する。
16.png
17.png

2.8 「詳細を表示」→「無題のプロジェクト(安全ではないページ)に移動」を押下。
18.png

2.9 「許可」を押下。
19.png

2.1.0 画像の様な、実行ログが出ていればOK。
20.png

2.1.1 Token を登録する為のコードはもう不要なため削除する。(45行目から49行目)

//Tokenを登録する(初回のみ必要)
function RegisterToken(){
  const LINE_TOKEN = "{LINE_TOKEN_xxxxxxxx}" //INE_TOKEN
PropertiesService.getScriptProperties().setProperty('LINE_TOKEN',LINE_TOKEN);
}

3. トリガーの作成

3.1 サイドバーからトリガーを選択し、右下にある「トリガーを追加」を押下。
21.png

3.2 画像の様に選択したら「保存」を押下。
22.png

3.3 Google 認証をしたら、項番 2.7 と同じ様に「詳細を表示」→「無題のプロジェクト(安全ではないページ)に移動」を押下。
23.png
24.png
25.png

4. 動作確認

4.1 テストフォームに適当に文字を入れて送信をする。
26.png

4.2 LINE に通知が来ている事を確認!
27.jpg

以上。

■ 参考文献

2
1
0

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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?