Googleフォームで作成したアンケートを毎週日曜日に、GAS(Google Apps Script)を使用して、指定したグループLINEに送信する仕組みを考えてみましたので、覚書として記事にしておこうと思います。
やり方を少し変えると業務で利用することができるかもしれません。
この仕組みをつくろうと思ったきっかけ
プライベートで毎週日曜日にバスケットをやっているんですが、2020年に発生した新型コロナウイルスの影響で、運動前に検温をすることが必要になり、参加メンバーの検温結果を記録しておかないといけなくなりました。
現在は新型コロナウイルスの感染拡大を受けて緊急事態宣言等が発令されており、本記事投稿以前から数か月活動は停止しております。
で、検温結果を記録する方法については特に指定はないので、紙のノートに記録しようが、データで管理しようが自由です。
なので今回はGoogleフォームを使用して検温結果を回答するフォームを作成して運用することにしました。
で、毎回毎回GoogleフォームをコピーしてそれをLINEで送って、、、、、ってやるのは面倒臭いのでこの一連の作業を自動化できないかと思い立ったのが今回の記事のきっかけです。
GASでLINEにGoogleフォームを送るスクリプト
今回やりたいことをGASで実行するために下記のようなスクリプトを作成しました。
function myFunction() {
// ■バスケットの検温アンケートフォームを自動でコピーして作成日の日付をファイル名に付記する。
// ■その後、コピーしたアンケートをグループLINEに自動で投稿する。
//■作業1 変数の宣言とアンケートフォームのコピーとURLの取得
//現在日時のDateオブジェクトを作る
let today = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyyMMdd');
// テンプレートファイル(コピーする雛形ファイルがある場所をIDで取得)
let templateFile = DriveApp.getFileById('ここにコピーする雛形ファイルのIDを入力する');
// 出力フォルダ(コピーしたファイルを保存するフォルダの場所をIDで取得)
let OutputFolder = DriveApp.getFolderById('ここにコピーしたファイルを保存するフォルダのIDを入力する');
// 出力ファイル名(コピーしたファイルの名前を定義する【yyyymmddファイル名】となる)
let newFileName = today+templateFile.getName().replace('のひな形', '');
// 雛形ファイルをコピーする。
let newfile=templateFile.makeCopy(newFileName, OutputFolder);
// コピーしたファイルのURLを取得する。
let copyfile_id=newfile.getUrl();
//■作業2 ここから下にグループLINEに投稿する文章を記載する
let mytext = (`
${today}練習時の新型コロナの検温アンケートを行います。
各自、検温の結果と体調をアンケートに回答してください~。
外部から参加した人については誘った人がアンケートを回答してください~。
※このメッセージは自動送信しているので、練習が休みの時は回答不要です!!※
${copyfile_id}`);
sendPostContent(mytext);
}
function sendPostContent(mytext) {
//↓下記、【var token】にLINE Notifyから取得したトークンを記載する。
let token = ['ここにLINEのトークンを入力する。'];
let options = {
"method": "post",
"payload" : {"message": mytext },
"headers": {"Authorization": "Bearer " + token}
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}
自分で作っておきながらなんか見にくいし、わかりにくい感じがしますね。。。
センスが無いというかなんというか。。。。
GASでLINEにGoogleフォームを送る仕組みのざっくりとした流れ
この仕組みを作るには大きく分けて2つの処理が必要で、LINE側で処理することと、Google側で処理することが必要になります。
ざっくりとこんな感じになります。
- LINE NotifyにてグループLINEのトークンを取得して、メモしておく。
- グループLINEにLINE Notifyを招待する。
- GASでGoogleフォームをコピーするスクリプトを作成
- GASでグループLINEに投稿するメッセージを作成する(上記のスクリプト)
- GASにトリガー機能を追加して、毎週日曜など処理が実行されるタイミングを設定する
LINE側でトークンの取得とグループLINEへLINE notifyの招待を。
Google側でGoogleフォームのコピーとコピーしたフォームをLINEグループへ送信するGASを作成します。
GASでLINEにGoogleフォームを送る仕組み(LINE側の処理)
LINE Notifyにてトークンを取得する
LINE Notifyにてトークンをどうやって取得するかについてはネットにたくさん記事がアップされているのでそちらを参考にするほうが良いと思いますので本記事では省略します。
- LINE Notify 設定
- LINE Notify 使い方
こんな感じでGoogleで検索してもらえたら見つかるかと思います。
自動でメッセージを投稿したいグループLINEにLINE Notifyを招待する
で、LINEのトークンを取得したら次に自動でGoogleフォームのアンケートを送付したいグループラインに「LINE Notify」をメンバーとして招待します。
通常のメンバー招待の方法でできます。名前の検索欄で「line notify」と入力するとヒットしますので招待しましょう。
これでLINE側の準備は完了です。
GASでLINEにGoogleフォームを送る仕組み(Google側の処理)
Googleフォームの作成
Googleフォームのひな形を作成します。この雛形フォームを毎回、GASを使ってコピーしていきます。
こんな感じで作ります。(作り方は自由です。)
なお、このGoogleフォームのファイル名は今回は
という名前に設定しています。
GASの作成(Googleフォームのひな形をコピーしてファイル名を変更する部分)
上記で作成したGoogleフォームをコピーする部分までのGASが下記の箇所になります。
変数「today」には今日の日付をyyyymmdd形式で格納しています。
変数「templateFile」の箇所は青文字で記載された部分は削除して、上で作成したGoogleフォームのひな形のファイルIDを記載します。
なお、ファイルIDとはGoogleフォームのURL欄の「https://docs.google.com/forms/」から始まって「/edit」で終わるまでの部分が該当します。
具体例
例えばこんなURLのGoogleフォームの場合だと
https://docs.google.com/forms/abcde12345/edit
太字の部分の「abcde12345」がファイルIDになるようです。
同じような感じで変数「OutputFolder」の青文字部分についても削除して、上で作成したGoogleフォームのひな形のコピーを保存するフォルダのIDを記載します。
自分はGoogleドライブ上で下記のようなフォルダを作成していて、その中にGoogleフォームのひな形などを保存しているのでこの作業が必要になります。
このフォルダの中にこんな感じで各フォームを保存しています↓
なのでフォルダを作成せずに管理する場合にはこの部分の処理はする必要はないと思いますので
スクリプトを削除するかコメントアウトしておくといいと思います。
この辺はお好みでどうぞ。
次に、変数「newFileName」の部分で「今日の日付」+「Googleフォームのファイル名」というファイル名を作成しています。
この部分です。
次に変数「newFile」の部分でGoogleフォームのひな形をコピーして、ファイル名を上の「newFileName」の部分で作成したファイル名にします。
この部分です。
最後に変数「copyfile_id」で新しく作成したGoogleフォームのURLを取得しています。
この部分です。
GASの作成(グループLINEに投稿するメッセージを作成する部分)
次に実際にLINEに送信するメッセージをGASで作成します。
この部分です。
メッセージの内容はお好みで変更してもらえばいいです。最後にさきほど作成したGoogleフォームのURLも貼り付けています(変数「copyfile_id」で取得したURL)。
LINEのトークンを入力する
最後にLINEにメッセージを送る部分のGASを作成します。
この部分です。
変数「token」の箇所の青文字部分「ここにLINEのトークンを入力する。」を削除して、最初に取得しておいたLINEのトークンを入力します。
毎週自動でメッセージが送信されるようにGASにトリガー機能を設定する
後は定期的に自動でメッセージが送信されるように「トリガー」を設定すると完了です。
トリガーの設定画面へは下記の箇所から移動することができます。
クリックすると画面が切り替わりますので下記の箇所をクリックしてトリガーの詳細な設定を行います。トリガーの設定自体は直感的にできると思いますので説明は省略します。
以上ですべての作業が完了です。
トリガーで設定した定期的な日時・時間に自動でLINEにメッセージが届いたら成功です。
うまくいくとこんな感じに指定したグループLINEにメッセージが投稿されるかと思います。
まとめ
GASでLINEにメッセージを送る記事はGoogle先生に聞くと割とたくさん記事がでてくるのですが、今回のようなGoogleフォームのひな形を毎週コピーして指定したグループLINEに自動送信するような記事は見つけれなかったので記事にしてみました。需要が少ないんでしょうね。
プライベートで使用していますが、Googleフォームの内容を変更したり、メッセージを変更することで業務での使用も可能になると思います。(業務でLINEを使用することがいいかどうかという議論は置いといて。)
あと記事にはしてみたものの、正直、スクリプトの意味自体は正直半分くらいしか理解できていません。
特に、グループLINEへメッセージを投稿する部分についてネットにアップされた優良な記事を探していきてそっくりそのままコピーして(パクって)使用しているため、なぜ、それでうまくいくのか全くわかっていません。
わかっていませんが、とりあえず、動いているのでまぁ、よしとしている次第です。
とりあえずできた。で終わってしまうのはよくないかもしれませんが、とりあえず上手く?いったという体験をして、そこから、なんでこれで上手くいったのか「理解」していくことも大事なことではないでしょうか。(言い訳。)
【本日の近況報告】
自分の経理データのチェック作業を数か月分完了しました。
間違ってないと思っていてもいざチェックしてみると金額の入力間違いなどがちらほらと。。。
その他、クレジットカードで支払った経費の領収書、請求書を印刷していなかったり作業洩れがみつかりました。
チェック作業は大事だなと認識はしていますが改めて思った次第です。
【本日の1曲】
Public Enemy / Harder Than You Think (Featurecast Remix)
Public Enemyの曲をfeaturecastがリミックスした1曲
パブリックエネミーの名前くらいは知っていましたが正直今まで一度も聞いたことがなく
YouTube で流れてきたのでなんとなく聞いていたら
「ナニコレ、普通にかっこいい。。」
となりました。
この曲のオリジナルも聞きましたがリミックスのこちらの方が断然かっこよくなっています。
ジャンル的にはヒップホップになるとは思いますが個人的にはこれロックだと思います。
プロディジーと一緒にやってる shut me down という曲もめちゃくちゃロックな感じがしてかっこいいですね。