Googleフォームで申し込みフォーム【自動返信、自動リマインダ送信、申し込み上限、付き】
Googleフォームで申し込みフォームを作成する機会があったので備忘のため書いておきます。下記機能に対応しています。
自動返信
申し込みがあった時点で、申し込み者に「受け付けた」を通知する。
申し込み上限
申し込みの上限を決めておき、それを超えた場合は自動返信で「すでに満席だからキャンセル待ち」を通知する
申し込み上限を超えた分はスプレッドシートを赤くする
リマインダ
申し込み者のうち、スプレッドシート上に手動で追加した「リマインド通知」の値が「通知」となっている人物に、指定時刻にリマインダを送信
//************* //申し込み上限 //************* var maxMoushikomi=3; //************* //ユーザに通知する文言(申し込み受付時の自動返信) //************* var MailTitleOK="XXXX講座にお申込み頂きありがとうございます"; //MailBodyOK1の前には申し込み者の氏名が入ります var MailBodyOK1 = "様\n"; MailBodyOK1 += "この度はXXXX講座にお申込み頂きありがとうございます\n"; MailBodyOK1 += "下記のとおり受け付けました。\n"; MailBodyOK1 += "------------------------------------------------------------\n"; //MailBodyOK1とMailBodyOK2の間は申し込み者の情報(名前、アドレス)が記載されます var MailBodyOK2 = "------------------------------------------------------------\n\n"; MailBodyOK2 += "クレジットカードか銀行振り込みでの決済を MM/DD までにお願いします。\n"; MailBodyOK2 += "◆クレジットカードでお支払いの場合\n"; MailBodyOK2 += " 下記サイトでお支払い願います。(外部サイト)\n"; MailBodyOK2 += " http://aaa.bbb.ccc \n"; MailBodyOK2 += "◆銀行振り込みでお支払いの場合\n"; MailBodyOK2 += " 〇〇銀行\n"; MailBodyOK2 += " 口座番号 AAAAAAA\n"; MailBodyOK2 += " 上記口座にお支払い願います。\n"; MailBodyOK2 += " \n"; MailBodyOK2 += " MM/DDまでにお支払い頂けますよう、ご協力よろしくお願い致します。\n"; MailBodyOK2 += " \n"; //************* //ユーザに通知する文言(満席時のキャンセル通知) //************* var MailTitleNG="※申し込み未完了※XXXX講座は満席でした。"; //MailBodyNGの前には申し込み者の氏名が入ります var MailBodyNG = "様\n"; MailBodyNG +="この度はXXXX講座にお申込み頂きありがとうございます\n"; MailBodyNG +="大変申し訳ございませんが現在講座が満席のため、キャンセルがで次第ご案内いたします。"; MailBodyNG +="MM/DDまでにキャンセルの有無に関わらず連絡致します。" //************* //ユーザに通知する文言(リマインド) //************* var MailTitleReminde="申し込みいただいた講座開催日が近づいています"; //MailBodyRemindeの前には申し込み者の氏名が入ります var MailBodyReminde = "様\n"; MailBodyReminde += "こんにちは。\n"; MailBodyReminde += "お申込みいただいたXXXX講座の開催が近づいております。\n"; MailBodyReminde += "◆講座詳細\n"; MailBodyReminde += " 日時 MM/DD 12:00~15:00\n"; MailBodyReminde += " 場所 ビッグサイト\n"; MailBodyReminde += " 持ち物 筆記用具\n"; MailBodyReminde += "\n"; MailBodyReminde += "当日お会いできることをスタッフ一同楽しみにしております\n"; //************* //管理者への通知で使用する文言,アドレス //************* var kanriAdress = "admin_XXXX@gmail.com"; var kanriTitle = "講座申し込み通知"; var kanriReminderTitle="リマインダを通知しました"; //kanriReminderBodyの前にはリマインドリストが入ります var kanriReminderBody="以上のお客様にリマインドを通知しました。\n"; //************* //フォーム項目名 //************* var name = 'お名前'; var mail = 'ご連絡先メールアドレス'; //************* //リマインダ //************* //スプレッドシートの項目名(手動で入力) var remind = 'リマインド通知'; //各行に記載する文字(手動で入力) var sendJudge='通知'; //======================================================================================= //↑変更する箇所はここまで↑これより下はプログラム内容を理解したうえで編集すること //======================================================================================= //自動返信用関数 function autoreply() { var title = MailTitleOK; var body=MailBodyOK1; var address = ""; var userName; var sheet = SpreadsheetApp.getActiveSheet(); var rows = sheet.getLastRow(); var cols = sheet.getLastColumn(); var rg = sheet.getDataRange(); Logger.log("rows="+rows+" cols="+cols); var userObj = rg.getCell(rows, 1); for (var i = 1; i <= cols; i++ ) { var col_name = rg.getCell(1, i).getValue(); var col_value = rg.getCell(rows, i).getValue(); body += "■"+col_name+"\n"; body += col_value + "\n\n"; if ( col_name === name ) { //body = col_value+" 様\n\n"+body; userName=col_value; } else if ( col_name === mail ) { address = col_value; } } body += MailBodyOK2; if(rows <= (maxMoushikomi+1)){ var kanriBody = userName+"様の申し込みがありました"; Logger.log("address="+address); GmailApp.sendEmail(kanriAdress,kanriTitle,kanriBody); GmailApp.sendEmail(address,title,userName+body); }else{ var body2 = userName+MailBodyNG; var kanriBody = userName+"様の申し込みがあり、キャンセル待ちを通知しました"; GmailApp.sendEmail(address,MailTitleNG,body2); GmailApp.sendEmail(kanriAdress,kanriTitle,kanriBody); userObj.setBackgroundRGB(255, 0, 0); } } //リマインド用関数 function reminder() { var sheet = SpreadsheetApp.getActiveSheet(); var rows = sheet.getLastRow(); var cols = sheet.getLastColumn(); var rg = sheet.getDataRange(); var addIndex; var nameIndex; var kanriBody=""; Logger.log("rows2="+rows+" cols2="+cols); for (var i = 1; i <= cols; i++ ) { var col_name = rg.getCell(1, i).getValue(); var col_value = rg.getCell(rows, i).getValue(); if ( col_name === mail ) { addIndex = i; } if ( col_name === name ) { nameIndex = i; } if ( col_name === remind ) { for(var k =1;k<=rows;k++){ var col_remind = rg.getCell(k, i).getValue(); var col_add = rg.getCell(k, addIndex).getValue(); var col_name= rg.getCell(k, nameIndex).getValue(); if(col_remind === sendJudge){ Logger.log("send k="+k+" col_remind="+col_remind+" col_add="+col_add); kanriBody+=col_name; kanriBody+=","; kanriBody+=col_add; kanriBody+=",\n"; GmailApp.sendEmail(col_add,MailTitleReminde,col_name+MailBodyReminde); }else{ Logger.log("not send k="+k+" col_remind="+col_remind+" col_add="+col_add); } } } } GmailApp.sendEmail(kanriAdress,kanriReminderTitle,kanriBody+kanriReminderBody); }
このプログラムのうち、動作をいじるのは下記2か所。好きに設定してください。
//************* //申し込み上限 //************* var maxMoushikomi=3; //************* //管理者への通知で使用する文言,アドレス //************* var kanriAdress = "admin_XXXX@gmail.com";
返信のメッセージは適宜変更が必要です。
フォームは↓のように、「お名前」と「ご連絡先メールアドレス」が必須です。
リマインドの通知のためのスプレッドシートの設定は↓のように「リマインド通知」列を追加します。
リマインダの時刻、プログラム設定は↓です。
使用は自己責任でお願いしますm(_ _)m