😽

GoogleFormの回答を、LINEに送信

2023/12/13に公開

追記

nippologというサービスがあり、これだとGoogleAppsScriptでのコーディング不要でできた。
https://www.nippolog.com/

GASを書くよりたぶんこっちの方が楽。
下記の記事でまとめ直している。
※Slackでの通知を前提に書いているが、通知先の設定でLINENotifyのトークンをいれれば、LINEでも通知を受け取れるはず。
https://zenn.dev/ritton/articles/9281ca20f37d0a


GoogleFormを作成

GoogleFormをつくる。

回答が記入されるスプレッドシートのシート名を変えておく。

LINE notifyで通知用のトークンを取得

LINE notifyにアクセス

https://notify-bot.line.me/ja/
にアクセスし、「ログイン」をクリックし、自分のLINEアカウントでログイン。

トークンを取得

マイページにアクセスする。

「トークンを発行する」をクリックする。

トークン名を入力し、通知を送りたいグループを選択後、「発行する」をクリック。
※トークン名は、LINEに送付される文章に表示されます。

「コピー」を押して、取得したら発行完了。

GoogleAppsScriptでコードを記載

GoogleFormの回答が記載されるスプレッドシートのシートを開き、
「拡張機能」>「Apps Script」

下記のようにコードを記載。
処理の概要としては、
①特定のスプレッドシートのシートを取得。
②そのシートの一番下の行を取得し、取得したい回答が入ったセルの中身を取得。
③その項目を使って、文面を作成。
④先ほどLINENotifyで取得したトークンを使って、作成した文面を送る。
という内容。

function report() {
  /*
    スプレッドシートIDでスプレッドシートを取得
    スプレッドシートIDは、スプレッドシートのURL内の下記の~~~~~~~の部分
    https://docs.google.com/spreadsheets/d/~~~~~~~~~~~~~~~/edit
  */
  let ss = SpreadsheetApp.openById("XXXXXXXXXXXXXXXXXXXXXXXXX");

  //回答の記録されるシート名(デフォルトは、「フォームの回答 1」のようになっているが、事前に変えておいた方がよい。)
  let sh = ss.getSheetByName("report");
  
  //一番下の行(最新の回答)を取得
  let last_row = sh.getLastRow();

  //スプレッドシートから最新の行を取得
  //最終行の左からX番目のセルの値を取得、という意味
  let name = sh.getRange(last_row,2).getValue();//担当者
  let weather = sh.getRange(last_row,3).getValue();//天気
  let content = sh.getRange(last_row,4).getValue();//報告

  //先ほどLINE Notifyで取得したtokenを貼り付ける。
  const token = "XXXXXXXXXXXXXXXX";
 
  //送信する文章を作成
  let message = 
          "【業務報告】"+"\n"
          +"担当:"+name+"\n"
          +"天気:"+weather+"\n"
          +"報告:"+content+"\n"
          +"-------------\n";

  linesend(message,token); //下記のLINEに送信するコードを呼び出し
}

//LINEに送信するコード
function linesend(message,token){
    var options =
    {
      "method"  : "post",
      "payload" : "message=" + message,
      "headers" : {"Authorization" : "Bearer "+ token}
    };
  
    UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

試しに送信する

reportという関数を選んで、「実行」を押す。

アクセス許可を求められるので、許可する。

指定したシートの一番下の行をみて、通知がされる。
※この時点では回答がないので、1行目の設問名がそのまま記載されるはず。

トリガーを設定

上記までだと、フォームが回答されたときに、処理が行われない。
フォーム回答時に、上記のreport関数を動かすために、トリガーを設定する。

「トリガーを追加」を押して、下記のように設定。
先ほどと同様に、アクセス許可を求められるので、許可する。
今回は、フォームが回答されたときに、即report関数が動くようにしているが、
毎日10時~11時の間に実行、のようにタイマーにすることも可能。
※ピンポイントで10時00分に設定することはできない。

これで完了!

通知をやめる場合

通知をやめる場合、トークンを削除しておきましょう。
前述のLINENotifyのマイページにて、トークンを削除できます。

Discussion