こんにちは!
Yuki (@yukibnb) です。
今回はGoogle Apps Script (GAS) を使ってGoogleフォームの回答を管理者に自動LINE通知する方法を紹介します。
社内向けの営業報告フォーム、経費申請フォームなどさまざまな〇〇報告・申請フォームに活用できます。
コピペでそのまま使えるよう手順を細かく紹介します。
では見ていきましょう!
Googleフォームの回答をSlackに通知したい方は以下の記事をご覧ください
【コピペでOK!】GASでGoogleフォームの回答をSlackに自動通知する方法
はじめに
実現したいこと
今回実現したいことはGoogleフォームの回答を管理者向けに自動LINE通知することです。
LINE通知内には報告内容が含まれているため、管理者はGoogleフォームの管理画面を開くことなくLINE通知を読むだけで報告内容を確認できます。
回答者・管理者のメリット
社内の報告にGoogleフォームを使用することで、回答者は報告メールなどを手入力する必要がなくなり効率が上がります。
管理者にとってはGoogleフォームの管理画面を開くことなく報告内容を確認できるので便利です。
また回答者が誰であっても決まった形式で報告を受信できるため、確認後の業務も円滑に進みます。
今回使用するサンプルフォーム
今回使用するサンプルGoogleフォームはこちらです。
ホテルや民泊などの清掃スタッフ向けの「清掃報告」という社内報告フォームです。
名前、施設名、部屋番号、清掃完了箇所などをそれぞれ入力・選択し、回答すると管理者に自動LINE通知されるようにします。
ではいよいよ方法を見てみましょう!
コピペでOK!Googleフォームの回答を管理者に自動LINE通知する方法
LINE Notifyのトークンを取得する
まずはじめに宛先となる管理者のLINEグループのLINE Notifyのトークンを取得します。
トークンとはLINE版のメールアドレスのようなものです。
トークンを使用することで、管理者のLINEグループを宛先に指定することができます。
簡単に数分で取得できますので、当ブログの以下記事を参考にしてLINE Notifyのトークンをまず取得してください。
スクリプトエディタを開く
Googleフォーム管理画面を開き、次の手順でGoogle Apps Scriptのスクリプトエディタを開いてください。
- 管理画面右上にある[⋮](点が縦に3つ並んだアイコン)をクリックする
- [スクリプトエディタ]をクリックする
するとスクリプトエディタが開きます。次の2点はお好きな名前に変更してください。
- プロジェクト名 (「無題のプロジェクト」と書いている箇所)
- スクリプト名 (「コード.gs」と書いている箇所)
スクリプトをコピペする
スクリプトエディタに以下のスクリプトをコピペしてください。
スクリプトエディタにもともと入力されていたfunction myFunction() { }
は消してください。
変数token
に取得したLINE Notifyのトークンを入力してください。
function autoLine(e) { /* ステップ1: フォームのデータを取得する */ //すべての質問と回答を取得する let itemResponses = e.response.getItemResponses(); /* ステップ2: 必要なデータを抽出する */ //個々の質問と回答を格納するための空配列を宣言する let questionAndAnswers = []; //for文(ループ)で変数itemResponsesから個々の質問と回答を取得する for(let i = 0; i < itemResponses.length; i++) { //質問のタイトルを取得する let questionTitle = itemResponses[i].getItem().getTitle(); //回答を取得する let answer = itemResponses[i].getResponse(); //未回答の質問かどうかで送信文章を調整する if(!answer) { questionAndAnswers.push(questionTitle + ": 未回答"); } else { questionAndAnswers.push("≪" + questionTitle + "≫\n" + answer + "\n"); } } /* ステップ3: 宛先、本文を決める */ //LINEの宛先 //★★★LINE Notifyのトークンを入力してください★★★ let token = "LINE Notifyのトークン"; //LINEの本文 //★★★お好きな本文に変更ください★★★ let body = "\n清掃報告フォームの回答を受信しました。\n" + "\n" //一次元配列questionAndAnswersに対してjoinメソッドを使って文字列を作成する //区切り文字は改行"\n" + questionAndAnswers.join("\n"); /* ステップ4: 管理者にLINEを送信する */ //管理者にLINEを送信する sendLine(token, body); } function sendLine(token, body) { let options = { "method" : "post", "payload" : {"message": body, }, "headers" : {"Authorization" : "Bearer "+ token} }; UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options); }
スクリプトを保存する
スクリプトをコピペするとこのようになります。
画像内のアイコンをクリックし、コピペしたスクリプトを保存してください。
トリガーを設定する
次にコピペしたスクリプトの関数autoLine
のトリガーを設定します。
トリガーを設定することで回答者が回答を送信した時に関数autoLine
が自動実行され、管理者にLINE通知が送信されます。
以下のようにトリガーを設定し[保存]ボタンをクリックしてください。
autoLine
- [Head]
- [フォームから]
- [フォーム送信時]
- [毎日通知を受け取る]
トリガー設定方法の詳しい解説は以下記事をご覧ください。
【簡単!】Googleフォーム送信時にGASを自動実行する方法
GASを承認する
トリガー設定画面の[保存]ボタンをクリックすると、承認を求めるポップアップが表示されます。
GASを実行するGoogleアカウントをクリックし、承認しましょう。
承認手順の詳しい解説は以下記事をご覧ください。画像やGIF動画付きで詳しく確認できます。
【もう迷わない!】GAS初回実行時の承認方法
回答者画面から回答を送信する
Googleフォームの回答者画面を開き、それぞれ回答を入力し送信しましょう。
管理者に自動LINE通知される
管理者のLINEグループに無事LINE通知されました。
通知には報告内容が含まれていますね。
これでGoogleフォームの回答を管理者に自動LINE通知するGASの設定が完了しました!
では次にみなさん自身のGoogleフォームで自動LINE通知を活用するためのポイントを紹介します。
カスタマイズのポイントを紹介
2つの関数
今回使用した関数は2つあります。
autoLine
とsendLine
です。
順にポイントを見てみましょう。
ステップ1と2
ステップ1「フォームのデータを取得する」とステップ2「必要なデータを抽出する」は当ブログの以下記事とまったく同じです。
ステップ1と2の詳しい解説は以下記事をご覧ください。
ステップ3: 宛先、本文を決める
/* ステップ3: 宛先、本文を決める */ //LINEの宛先 //★★★LINE Notifyのトークンを入力してください★★★ let token = "LINE Notifyのトークン"; //LINEの本文 //★★★お好きな本文に変更ください★★★ let body = "\n清掃報告フォームの回答を受信しました。\n" + "\n" //一次元配列questionAndAnswersに対してjoinメソッドを使って文字列を作成する //区切り文字は改行"\n" + questionAndAnswers.join("\n");
ステップ3では宛先とLINEの本文を決定します。
宛先とは管理者のLINEグループのLINE Notifyのトークンのことです。変数token
に取得したLINE Notifyのトークンを入力してください。
変数body
はLINE通知の本文となります。文面をカスタマイズする際には以下の点に注意して本文を置き換えてください。
- 改行したい箇所に
"\n"
を入力してください。 - 質問の内容と回答を表示したい箇所に
questionAndAnswers.join("\n")
を入力してください。
変数questionAndAnswers
には一次元配列形式で質問の内容と回答が格納されています。
本文に使用するには一次元配列ではなく文字列にする必要があるため、questionAndAnswers
に対してjoin
メソッドを使用し、questionAndAnswers
の各要素を改行の区切り文字"\n"
で連結し文字列を作成しました。
join
メソッドの詳しい解説は以下記事をご覧ください。
【簡単!】GASで配列の各要素を連結して文字列を作成する方法
ステップ4: 管理者にLINEを送信する
function sendLine(token, body) { let options = { "method" : "post", "payload" : {"message": body, }, "headers" : {"Authorization" : "Bearer "+ token} }; UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options); }
まずはじめに関数sendLine
を見てみましょう。
これはLINE NotifyでLINE通知をするための定型文のような関数です。
宛先 (token
) と 本文 (body
) を引数に指定することで、関数sendLine
を実行すると好きな宛先に好きな本文をLINE通知することができます。
このようにLINEを送信するためだけの独立した関数を作成することで、メンテナンスが容易になるでけでなく、全く別の機会にLINE通知したいと思った場合に簡単に使いまわすことができます。
/* ステップ4: 管理者にLINEを送信する */ //管理者にLINEを送信する sendLine(token, body); }
そして関数autoLine
内でsendLine(token, body)
と記述することで、関数sendLine
に変数token
とbody
を渡し、関数sendLine
を実行しました。
関数sendLine
が実行されると、管理者 (token
) 宛てに報告内容 (body
) がLINE通知されます。
注意点
未回答の質問がある場合
/* ステップ1: フォームのデータを取得する */ //すべての質問と回答を取得する let itemResponses = e.response.getItemResponses();
回答者がGoogleフォームで回答を送信すると、フォームのデータはe
となり、関数autoLine
に渡されます。
そしてe
の中からすべての質問と回答を取得し、変数itemResponses
に格納します。
ただし、以下の質問タイプが「未回答」だった場合、それらの質問の内容と回答はe
に含まれません。
- ラジオボタン
- チェックボックス
- プルダウン
- 均等目盛
- 選択式 (グリッド)
- チェックボックス (グリッド)
e
に含まれないということは、for文で質問の内容と回答を取得することはできませんのでLINE通知にも含まれません。
そのためこれらの質問タイプを使用する場合、回答を必須にすることをおすすめします。
まとめ
今回はGoogle Apps Script (GAS) を使ってGoogleフォームの回答を管理者に自動LINE通知する方法を紹介しました。
社内の〇〇報告・申請フォームで活用すると、回答者・管理者双方にとって便利になります。
次回記事もご期待ください!