組込み系プログラマの終末

プログラミング、デバイスドライバ、資格、試験、等などなど

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";

返信のメッセージは適宜変更が必要です。


フォームは↓のように、「お名前」と「ご連絡先メールアドレス」が必須です。
f:id:public2015:20180624003449p:plain


リマインドの通知のためのスプレッドシートの設定は↓のように「リマインド通知」列を追加します。
f:id:public2015:20180624003527p:plain


リマインダの時刻、プログラム設定は↓です。
f:id:public2015:20180624003849p:plain


使用は自己責任でお願いしますm(_ _)m