Yuki's bnb blog

こんにちは!Yukiといいます。本業のかたわら大阪で2016年夏から民泊運営のお手伝いをしています。民泊業務に関する様々なことを自動化・効率化したいと思い日々活動しています。 お気軽にコメント・お問い合わせください :) TOEICスコア 985

【コピペでOK!】GASでGoogleフォームの回答を管理者に自動LINE通知する方法

Google Apps Script form line notify

こんにちは!
Yuki (@yukibnb) です。

今回はGoogle Apps Script (GAS) を使ってGoogleフォームの回答を管理者に自動LINE通知する方法を紹介します。

社内向けの営業報告フォーム、経費申請フォームなどさまざまな〇〇報告・申請フォームに活用できます。

コピペでそのまま使えるよう手順を細かく紹介します。

では見ていきましょう!

 

はじめに

実現したいこと

Google Apps Script form line notify

今回実現したいことは管理者向けに自動LINE通知することです。

LINE通知内には報告内容が含まれているため、管理者はGoogleフォームの管理画面を開くことなくLINE通知を読むだけで報告内容を確認できます。

 

回答者・管理者のメリット

Google Apps Script form line notify

社内の報告にGoogleフォームを使用することで、回答者は報告メールなどを手入力する必要がなくなり効率が上がります。

管理者にとってはGoogleフォームの管理画面を開くことなく報告内容を確認できるので便利です。

また回答者が誰であっても決まった形式で報告を受信できるため、確認後の業務も円滑に進みます。

 

今回使用するサンプルフォーム

Google Apps Script form line notify

今回使用するサンプルGoogleフォームはこちらです。

ホテルや民泊などの清掃スタッフ向けの「清掃報告」という社内報告フォームです。

名前、施設名、部屋番号、清掃完了箇所などをそれぞれ入力・選択し、回答すると管理者に自動LINE通知されるようにします。

ではいよいよ方法を見てみましょう!

 

コピペでOK!Googleフォームの回答を管理者に自動LINE通知する方法

LINE Notifyのトークンを取得する

まずはじめに宛先となる管理者のLINEグループのLINE Notifyのトークンを取得します。

トークンとはLINE版のメールアドレスのようなものです。

トークンを使用することで、管理者のLINEグループを宛先に指定することができます。

簡単に数分で取得できますので、当ブログの以下記事を参考にしてLINE Notifyのトークンをまず取得してください。

 

スクリプトエディタを開く

Google Apps Script form line notify

Googleフォーム管理画面を開き、次の手順でGoogle Apps Scriptのスクリプトエディタを開いてください。

  1. 管理画面右上にある[](点が縦に3つ並んだアイコン)をクリックする
  2. [スクリプトエディタ]をクリックする

 
Google Apps Script editor

するとスクリプトエディタが開きます。次の2点はお好きな名前に変更してください。

  • プロジェクト名 (「無題のプロジェクト」と書いている箇所)
  • スクリプト名 (「コード.gs」と書いている箇所)

 

スクリプトをコピペする

スクリプトエディタに以下のスクリプトをコピペしてください。

スクリプトエディタにもともと入力されていたfunction myFunction() { }は消してください。

memo

変数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);
}

 

スクリプトを保存する

Google Apps Script form line notify

スクリプトをコピペするとこのようになります。

画像内のアイコンをクリックし、コピペしたスクリプトを保存してください。

 

トリガーを設定する

Google Apps Script form line notify

次にコピペしたスクリプトの関数autoLineのトリガーを設定します。

トリガーを設定することで回答者が回答を送信した時に関数autoLineが自動実行され、管理者にLINE通知が送信されます。

以下のようにトリガーを設定し[保存]ボタンをクリックしてください。

  1. autoLine
  2. [Head]
  3. [フォームから]
  4. [フォーム送信時]
  5. [毎日通知を受け取る]

memo

トリガー設定方法の詳しい解説は以下記事をご覧ください。
【簡単!】Googleフォーム送信時にGASを自動実行する方法

 

GASを承認する

トリガー設定画面の[保存]ボタンをクリックすると、承認を求めるポップアップが表示されます。

GASを実行するGoogleアカウントをクリックし、承認しましょう。

memo

承認手順の詳しい解説は以下記事をご覧ください。画像やGIF動画付きで詳しく確認できます。
【もう迷わない!】GAS初回実行時の承認方法

 

回答者画面から回答を送信する

Google Apps Script form line notify

回答者画面を開き、それぞれ回答を入力し送信しましょう。

 

管理者に自動LINE通知される

Google Apps Script form line notify

管理者のLINEグループに無事LINE通知されました。

通知には報告内容が含まれていますね。

これでGoogleフォームの回答を管理者に自動LINE通知するGASの設定が完了しました!

では次にみなさん自身のGoogleフォームで自動LINE通知を活用するためのポイントを紹介します。

 

カスタマイズのポイントを紹介

2つの関数

Google Apps Script form line notify

今回使用した関数は2つあります。

autoLinesendLineです。

順にポイントを見てみましょう。

 

ステップ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"で連結し文字列を作成しました。

memo

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に変数tokenbodyを渡し、関数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通知する方法を紹介しました。

社内の〇〇報告・申請フォームで活用すると、回答者・管理者双方にとって便利になります。

次回記事もご期待ください!