2022年10月28日金曜日

【GAS】注文フォームの回答から自動的に返信メールを作成する

秋明菊

家のまわりで秋明菊が咲いていました。

朝晩だいぶ冷え込むようになってきましたね。本格的な紅葉まではもう少しですかね。


***

さて、久しぶりの GAS (Google Apps Script) です。

さわではホダ木の注文を Google フォームで受けています。フォームが送信されるとスプレッドシートに記録されます。以前はこのスプレッドシートの内容を目視で確認して返信メールを書いていたのですが、いつかミスしそう……という微弱なストレスを感じていました。

そこで、フォームが送信されると、新たに記録されたスプレッドシートの内容から自動的にメールの下書きを作成する GAS を作ってみました。

簡単なものですがけっこう便利で、これぞ GAS の本領といった気がします。

数か月ほど運用していますが今のところ問題なく稼働しており、とても快適です。時間の節約にもなりますね。バックオフィス業務は圧縮あるのみです。

ちなみに、備考等の内容に対して返事を書く場合もあるため一旦下書きにしていますが、そういうものがなければもちろん即送信もできます。万が一のエラーがちょっとこわいですけど。


以下、ホダ木の注文フォームを例とした作り方になります。

元となるフォームがこちらになります。



そして、作成されるメールの下書きのサンプルがこちら。


注文数と割引から合計金額の計算もしてしまいます。こういうのは人手でやっているとどうしてもミスがあり得ますからこわいです。


スクリプトは、ファームの回答先のスプレッドシートの拡張機能から作成します。

コードのサンプルは次の通りです。
function createDraft() {
  Utilities.sleep(3000);

  const sp = SpreadsheetApp.openById("スプレッドシート ID");
  const sh = sp.getSheetByName("フォームの回答 1");
  let lastRow = sh.getLastRow();

  let furu = sh.getRange(lastRow, 3).getValue(); //古ホダ本数
  let shin = sh.getRange(lastRow, 4).getValue(); //新ホダ本数
  let depo = sh.getRange(lastRow, 5).getValue(); //割引
  let deli = sh.getRange(lastRow, 6).getValue(); //受け渡し
  let paym = sh.getRange(lastRow, 8).getValue(); //支払い方法
  let flnm = sh.getRange(lastRow, 10).getValue(); //お名前
  let mail = sh.getRange(lastRow, 12).getValue(); //メール

  let recipient = mail; //宛先
  let subject = "ホダ木 ご注文ありがとうございます。"; //タイトル

  //本文
  let body = flnm + "様\n\nホダ木のご注文ありがとうございます。\n\n以下の通りご注文を承りました。\nご確認ください。\n\n";
  body = body + deli + "\n" + paym + "\n\n";
  if(furu != "") {
    body = body + "古ホダ木(コナラ) 550円 " + furu + "本 " + (550 * furu) + "円\n";
  }
  if(depo != "") {
    body = body + "割引 -50円 " + depo + "本 -" + (50 * depo) + "円\n";
  }
  if(shin != "") {
    body = body + "新ホダ木(コナラ) 2750円 " + shin + "本 " + (2750 * shin) + "円\n";
  }
  body = body + "--------------------\n合計 " + ((550 * furu) - (50 * depo) + (2750 * shin)) + "円(税込)";
  if(paym == "銀行振込") {
    body = body + "\n\nご確認の上、下記振込先までご入金をお願い致します。\n\n<振込先>\n〇〇銀行\n△△支店(203)\n普通 1234567\n名義";
  }
  body = body + "\n\n***文章***\n\nどうぞ宜しくお願い致します。\n\n署名";
  //オプション
  let options ={
    from: "送信元メールアドレス",
    name: "送信者名"
  };

  GmailApp.createDraft(recipient,subject,body,options);
}

4行目の「スプレッドシート ID」と38、39行目の「送信元メールアドレス」、「送信者名」は書き換えてください。本文は適宜変更を。

トリガーは、イベントのソースを「スプレッドシートから」、イベントの種類を「フォーム送信時」に設定します。

データのやりとりがもたついた時のために、Utilities.sleep(3000) を関数の最初に入れています。




農業を取り巻く環境もだいぶハードになっています。小さな改善の取り組みを積み重ねていきたいですね。


Twitter (@nkkmd) 日々更新中です。