【GAS】自動受付&仕分け&台帳作成システム(3)~フォームにGASを設定する~
いつ来るか分からない、誰が送ってくるか分からないものについて、投稿先を掲示して何らかの提出物を受け付けるシステムのご紹介で、以下の記事の続きになります。
まず、入り口として投稿フォームを作成し、ここにGASを設定します。GASを書くためにスクリプトエディタを開くところまでは、以下の記事をご覧ください。
フォームから申し込みされたら、受け付け番号付きで自動返信するGASを書く
フォームにGASを実装して、実現したい機能は以下です。
・申込者に、受け付けられた事を知らせるメールを送る
・受け付け番号を自動発行し、これをメールの件名にする
では早速、フォームにGASを追加して上記の機能を実装してみましょう。
GASは、フォームの上にある「・・・」ボタンをクリックして、スクリプトエディタを起動して作成するのでした。
「スクリプトエディタ」メニューをクリックすると、以下の様にエディタが起動します。
Gメール送信用のスクリプトは非常に簡単
GASを使うと、Gメールからメールを送信する事ができます。
フォームに追加するGASにこうしたスクリプトを記述しておくことで、フォーム申し込みを受けてメールを出すことができます。
Gメールから送信するスクリプトは非常に簡単で、以下の様なコードで実装できます。
GmailApp.sendEmail(宛先アドレス, 件名, 本文) ;
上記のたった一行だけで、相手にメールが送られます。(送信元アドレスはGoogleドライブにログインした際のGoogleIDとなります)
ここで上記コードにおける各パラメータを、以下の様にできると、申し込みの自動受け付けが完了する事になります。
・【宛先アドレス】・・・フォームに記入された申し込み者のアドレス
・【件名】・・・受け付け番号付きのテキスト
・【本文】・・・相手に受け付けた事を知らせる定型文
各パラメータの取得方法を次にご紹介します。
宛先アドレス~フォームの回答内容から抽出する~
宛先アドレスは、フォームの回答内容から抽出します。回答内容はスクリプトに記述するメインの関数を以下の様に記述する事で得られます。
function 関数名(e) {
// フォーム入力内容
var 回答情報 = e.response.getItemResponses();
var 情報1 = 回答情報[0].getResponse(); // 回答 01 名前
var 情報2 = 回答情報[1].getResponse(); // 回答 02 メールアドレス
・・・・
}
上記の様に、関数の引数に適当な変数を入れ("イベント(event)"の意味で "e" としています)、ここから、以下の様にgetItemResponses() 関数を使う事によって回答内容を抽出できます。
回答情報 = e. getItemResponses() ;
回答情報は配列になっており、更に要素番号を指定して、getResponse()関数を使うと、各項目の回答を具体的な文字列として得られます。
情報1 = 回答情報[i番目] . getResponse() ;
なお、この関数が正しく機能するには、後で設定する様に、フォームからの申し込みをトリガーとして実行される様にしておく必要がありますので、ご注意ください。
さて、以下の様なフォームから申し込み者のアドレスを抽出するには・・・
2番目の項目(回答情報の要素番号は「1」となります)の回答を抽出すれば良いので、以下の様にコードを書きます。
なお関数名は何でも良いのですが、ここで onSubmit()にしておきました。
function onSubmit(e) {
// フォーム入力内容
var itemResponses = e.response.getItemResponses();
var userName = itemResponses[0].getResponse(); // 回答 01 名前
var userEmail = itemResponses[1].getResponse(); // 回答 02 メールアドレス
var userGroup = itemResponses[2].getResponse(); // 回答 03 参加部門
var userComment = itemResponses[3].getResponse(); // 回答 04 コメント
}
関数名は適当で結構です。また、後で使うので、申し込み者の名前などの情報もこの時取得しておきます。
以上で、返信メールのパラメータの1つ目、相手先アドレスを抽出できました。
件名~受け付け番号付きテキストの自動生成~
次に返信メールの件名に含ませる、受け付け番号を自動生成します。
受け付け番号は固有のものであれば何でも良いのですが、ここではフォームの回答内容がスプレッドシートに自動保存された際の、シートの行番号を使う事にします。
フォームから回答があると、回答内容は自動的に以下の様なシートに保存されていきますが、その行番号を利用するという訳です。
この行番号は、新しい回答が常に最下行に追加される事を利用して、getLastRow() 関数を使えば取得できます。
最下行= シート.getLastRow();
コードにすると、以下の様な感じです。
//スプレッドシートのID(★スプレッドシートのID★)
var MyApp = SpreadsheetApp.openById('★スプレッドシートのID★');
var MySheet = MyApp.getSheetByName('フォームの回答 1');
var regNum = MySheet.getLastRow(); // この入力が記入された行=受付番号
格納する変数名は、登録(regist)番号という事で、regNum としました。
このまま利用しても良いのですが、桁を揃えたテキストにする為、これを更に加工して、頭が”C”(コンテンツ)で始まる C00001 などの文字に変換しています。
//受付番号の生成
var newCont = ("C"+(100000+regNum)).replace("C1", "C");
以上で、受付番号が自動生成されました。
最後にこれを用いて件名のテキストを作成し、同時にこの番号をスプレッドシートにも備忘として記入しておきます。
件名のテキストは、こんなコードで作ります。
//メールの件名
subjectReply = "作品投稿用メール:"; // 整理番号を付加
subjectReply += "受付番号【" + newCont + "】"; // 整理番号を付加
スプレッドシートへの備忘記入は、こんなコードになります。
//受付番号記入
シート.getRange(regNum,記入列).setValue(newCont);
正常にスクリプトが実行されると、以下の様にスプレッドシートに自動記入されます。(右端の赤い部分です)
本文~回答者名や受付番号を含めた定型文を自動生成する~
最後にメール本文の自動生成です。前述で取得された回答情報を利用して、以下の様に作成します。
申込者名(userName)、受付番号( newCont)、作品の登録情報(regCont)を使って、テキストを「+」演算子でひたすらつなげて本文を作っています。
// 作品の登録情報
var regCont = '';
regCont += "お名前 :" + userName + "\n";
regCont += "連絡先アドレス:" + userEmail + "\n";
regCont += "参加部門 :" + userGroup + "\n";
regCont += "\n";
regCont += "コメント:" + "\n";
regCont += " " + userComment + "\n";
regCont += "\n";
//メールの本文
var msgBody =
userName + " 様\n\n" +
"下記内容にて受付けました。\n" +
"\n" +
"受付番号:【" + newCont + "】\n" +
"----------------------------------\n" +
"応募いただいた内容\n" +
regCont +
"----------------------------------\n" +
"\n" +
"このメールは自動応答メールです。\n" +
"投稿作品はこのメールへの返信に添付して送信してください。\n" +
"(件名は編集しないで下さい。)\n" +
"";
ポイントは改行です。
GASでは、改行は「\n」で表します。バック・スラッシュ「\」は円「¥」キーを打鍵すると入力できます。
投稿作品はこのメールの返信で添付して投稿して欲しいこと
この時件名は(後で利用するので)編集しないで欲しいこと
以上を同時にコメントしておきます。
以上で、メール送信に必要なパラメータを全て準備できました!
メールの送信
最後に申込者にメール送信します。
送信そのものは前述した様に一行で済むのですが、メールがきちんと送信できたかどうか、備忘を残して置きたいので、以下の様に記述します。
//Gメールの送信
try {
GmailApp.sendEmail(userEmail, subjectReply, msgBody) ;
シート.getRange(regNum,列番号).setValue("自動返信成功");
} catch(e) { // 自動返信失敗時
シート.getRange(regNum,列番号).setValue("自動返信失敗");
}
try{・・・}catch(e) {・・・}でエラー時の処理を記述できる
メール送信時に、GmailApp.sendEmail()を記述するのではなく、以下の様にtry構文で記述しておくと、失敗した時の対応を「エラー時」部分に記載しておく事ができます。
try{
GmailApp.sendEmail()
・・・そのまま問題なく行った時・・・
}catch(e) {
・・・エラー時・・・
}
特に問題なく実行された場合は、「そのまま問題なく行った時」のコードが続いて実行され、送信エラーとなった場合は、「エラー時」部分が実行されます。
ここでは、スプレッドシートの該当行に、それぞれ「自動返信成功」、
「自動返信失敗」と記載する事としました。
申込者が、誤ったアドレスを記入する可能性がなくはないので、うまく返信できなかった場合は個別に対応できる様、こうしたエラートラップを仕込んでおく様にします。
最後に関数の実行トリガーを設定
スクリプトが完成したら、最後に自動実行される様にトリガーを設定します。
トリガーを設定するには、スクリプトエディタで時計の様なアイコンをクリックします。
続いて、以下の様にトリガーを登録します。
(関数の onSubmit( ) は、上記の一連のコードを記載した関数名です)
トリガーには「フォーム送信時」を選びます。
ここまでで、自動受付が完了です!
フォームから回答をテスト実行してみる
試しにご自分の端末から実行してみましょう。無事に返信が返ってくるでしょうか!
フォームの編集画面に戻って、目玉のマークをクリックすると実際の入力画面になるので投稿してみましょう!
こんな画面になりますので、入力します。
送信ボタンを押すと・・・
無事メールが届きました!
スプレッドシートにも記録されています!
さて、・・・・
続いて、投稿作品が返信されてきた時の準備として、投稿作品を保存するサブフォルダを自動作成しておきます。
これについては、次の記事でご説明します。
この記事が気に入ったらサポートをしてみませんか?