![見出し画像](https://assets.st-note.com/production/uploads/images/71967863/rectangle_large_type_2_e89a765d256e93ae979ab0da3f0c7a7b.png?width=1200)
#06 Google フォームの回答に応じて、メールを自動返信
またしても、「工業教育に関する情報を発信│工業教育.net」の Tatsuya さんが公開されていた記事に補足する形になります。
上記の記事で紹介されているスクリプトを利用すると、「Google フォーム」での回答に応じて、メールを自動返信・送信できるようになります。
以降では、この動作について少し補足します。
GAS のスクリプトの大まかな流れについては、上記の元記事である「【GAS】Google Forms から送信された情報から自動返信メールを作成・送信する│工業教育.net」にお任せするとして、このスクリプトをカスタマイズしていくときに注意・参考にする内容をまとめておきます。
もとになるリファレンス
そもそも、この動作は以下の URL で説明されているものです。フォーム送信時にトリガーを追加しておくことで、任意のスクリプトを実行させて、処理できるようになります。
ここでは、スクリプトに渡される引数にどのような情報が渡されるのかを確認できます。
回答が配列で渡される、と思った方がいい
前項にも関連しますが、スクリプトに渡される情報は、次の4種類のデータとなります。
authMode
ScriptApp.AuthMode列挙型からの値。response
FormResponseオブジェクト、全体としてフォームにユーザの応答を表します。source
FormスクリプトがバインドされているGoogleフォームファイルを表すオブジェクト。triggerUid
このイベントを生成したトリガーのID。
基本的には response の配列に格納されている回答を利用して、目的の処理を行うことになります。
注意すべきなのは、response は「Google フォーム」の回答を出力した「Google スプレッドシート」の回答となった 1行分だけを教えてくれるものです。
// Open a form by ID and log the responses to each question.
var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz');
var formResponses = form.getResponses();
for (var i = 0; i < formResponses.length; i++) {
var formResponse = formResponses[i];
var itemResponses = formResponse.getItemResponses();
for (var j = 0; j < itemResponses.length; j++) {
var itemResponse = itemResponses[j];
Logger.log('Response #%s to the question "%s" was "%s"',
(i + 1).toString(),
itemResponse.getItem().getTitle(),
itemResponse.getResponse());
}
}
上記 URL をたどると、response の中を扱うサンプルスクリプトが紹介されていました。itemResponse.getItem().getTitle() の部分が問題の設問を、itemResponse.getResponse() の部分が問題の回答を示しています。
「送信後に編集」に注意
このトリガーは、回答者が行える操作として「送信後に編集」が ON になっていると、再編集時にも実行されます。しかし、再編集時には response には変更された項目以外は空欄でスクリプトが呼び出されます。
メールアドレスの欄も空欄になってしまうので、自動返信を行うことができません。
このトリガーを使ってメールを自動返信・送信しようとするのであれば、送信後に編集」は OFF にしておいた方がよさそうです。
まとめ
このトリガーを利用すると、以下のような処理が簡単に行えます。うまく利用すると、「Googleフォーム」がより活用できそうです!
自動返信:
フォームで申し込んだ人にだけ、定型文のメールを送りたい。自動送信:
フォームで申し込まれたら、指定されたメールアドレスにメールを送信する。