この記事は GAS道場 Advent Calendar 2019 の23日目の記事です。 Google Apps Script(GAS)をこれから使おうという方向けのアドベントカレンダーになります。
今回は、アンケートなどで使われるGoogleフォームに関する記事になります。Googleフォームに回答があったら、その入力内容をメールで送信しようというものをやってみました。 こちらが、完成イメージになります。
前提
この記事ではあえて遠回りなやり方を行っています。 アンケートフォーム側のスクリプトを書くことで、実現できますが、今回はこのようなやり方でもできますよという遠回りな紹介をしたいと思います。 シンプルなやり方は以下のような方法をお試しください。
アンケートフォーム
今回の例で作成したアンケートフォームは以下になります。 ついでに、こういう入力を想定しています。
実装
ということで、スクリプトの用意をしましょう。
まずは、アンケートフォームの回答をスプレッドシートにまとめるようにしましょう。 アンケートの作成画面から、回答のタブを選び、スプレッドシートのアイコンをクリックします。 そして、シートを作成します。
作成できたスプレッドシートから、スクリプトエディタを開きます。
そして、以下のスクリプトを入力します。
function onChange() { var url = '[ウェブアプリケーションとして公開したときのURL]' var options = { "method" : "POST", } UrlFetchApp.fetch(url, options); } function doPost() { var data = SpreadsheetApp.getActiveSheet().getDataRange().getValues() var result = ''; for (var i = 0; i < data[0].length; i++) { result = result + data[0][i] + ':' + data[data.length - 1][i] + '\n'; } console.log(result); sendMain(result) } function sendMain(result) { GmailApp.sendEmail('[送信先のメールアドレス]', 'Googleフォームの入力がありました', result) }
ウェブアプリケーションとして公開
そして、このスクリプトをウェブアプリケーションとして公開します。
ここで気をつけないといけないのが、実行者を自分に設定しないといけません。
公開されたURLを上のスクリプトの[ウェブアプリケーションとして公開したときのURL]に入力します。
トリガーの設定
次に、トリガーの設定を行います。フォームの入力があったら実行されるものになります。 このように、フォーム送信時にonChange()を実行するようにします。
処理の流れ
これで一通りの設定が完了しました。ちょっと特殊なことをしていますね。
フォーム送信 → onChange()実行でPOST送信する → onPost()が実行されgmailが送信
このような流れになります。
さて、どうしてこのようにしているかというと、フォーム送信時をトリガーとして実行している場合、そのスクリプトの実行者が匿名ユーザになってしまい、GmailApp.sendEmail()を実行しようとしても、匿名ユーザからメールの送信ができない仕様となっています。そのため、doPost()の実行者を自分(作成者)にすることで、gmailを自分から送ることができるようになります。 そのため、ちょっと複雑なフローで処理を行っています。
アンケート入力
さて、実際に入力をしてみましょう。 最初にも紹介しましたが、このように入力して送信してみましょう!
無事、入力した内容がメールで送られてきました!
さいごに
Googleフォームとの連携ができました!このように、ちょっと工夫をすると意外といろんなことができるようになります。