見出し画像

Googleフォーム自動返信(※プログラミング不要、コピペでOK)

はじめに

今回はGoogle Formの回答に対して、自動でメールを返信したいと思います。
申し込みフォームとして機能させたい場合など、最終確認の日程やZoomのURLなどをリマインドとしてメールで送りたい場面も多々あると思います。
逐一スプレッドシートやフォームに新たな回答があるか見に行って、あればメールを返信するというのは結構手間が掛かりますし、人数が増えればそれは現実的ではなくなります。

そこでGASを使って自動化していきます。

※GASとは・・・
Google Apps Scriptという、Googleのサービスをカスタムできるプログラミングのサービスです。(Microsoft officeでいうVBAみたいな)

しかしプログラミングがわからない人はそれだけで抵抗を感じてしまうと思います。
なので今回はGoogleドキュメントやスプレッドシートで設定を済ませ、プログラミングはフルコピペで機能するように設計しています。
手順も細かく説明していますので、参考にしてみてください。

仕組み

仕組みに興味ない方は飛ばしていただいて大丈夫です。下の手順1から進めてください。

こんなかんじです。仕組みとしてはシンプルです。
①フォームに回答
②スプレッドシートの最終行に自動追加
③追加を検知して回答内容を取得
④メールアドレスに自動返信

それでは実際に始めていきます。

Google Formを用意する

①設定>デフォルト>フォームのデフォルト設定

「回答者からの入力」に設定する。

このようにメールアドレスの項目が最上段に追加されればOKです。

続いて、回答を収集するスプレッドシートを作成します。

②回答>スプレッドシートにリンク
「新しいスプレッドシートを作成」をクリック

スプレッドシートの画面に正常に飛べばOKです

スプレッドシートの設定

①オプションシートの作成

【オプションの項目】
A1:送信アドレス
A2:表示名
A3:メールの件名
A4:CC
A5:BCC
A6:返信先
A7:メールアドレス列
A8:氏名列
A9:返信本文ファイルのID

↑を入力しておきます。

オプションの設定

オプションシートのB列を記入します

①送信元アドレス
デフォルトではこのフォームを作成しているGメールのアドレスになります。
もし、返信元として別のメールを使いたい場合は、そのアドレスをGoogleアカウントに追加する必要があります。
こちらの記事が参考になります。

上記設定において、追加したいアドレスのメールサーバーの情報が必要になります。

outlookの方はこちら↓

設定ができればそのアドレスをそのままB2セルに記入すればOKです。

②表示名
これはメール受信画面に表示される送信元の名称です。

③メールの件名

④CC
カンマで区切ります。上限はありません。

⑤BCC
同じくカンマで区切ります。上限はありません。

⑥返信先
送信したメールの返信先を指定できます。

⑦メールアドレス列
回答収集シートのうち、回答者のメールアドレスが格納される列

⑧氏名列
回答収集シートのうち、回答者のメールアドレスが格納される列

⑨返信用本文ファイルのID
返信用本文のGoogleドキュメントのIDです。
アドレスバーのこの部分をこのセルに格納します。

返信用本文の作成

メール冒頭の「〇〇様」の部分はスクリプトからそのまま書き出すので、それ以降の本文を作成します。

そしてアドレスバーの赤い部分がこのドキュメントのIDになりますので、これをオプションシートのB9セルにコピペしてください。

コード

回答フォームの拡張機能から「Google Apps  Script」を開きます。

開くとfunction my function()…と書いてあるので一旦全部消します
そこに以下のコードを貼り付けます。

// フォームが送信された瞬間に起動する自動返信プログラム
function sendReply() {
  // スプレッドシートを取得
  const ss = SpreadsheetApp.getActive()

  // オプションブックからシートを取得する
  const opSh = ss.getSheetByName("オプション")

  // 送信元のメールアドレス
  const fromAdress = opSh.getRange(1,2).getValue();
  
  // 表示名
  const fromName = opSh.getRange(2,2).getValue();
  
  // メールの件名
  const subject = opSh.getRange(3,2).getValue();
  
  // CC
  const cc = opSh.getRange(4,2).getValue();
  
  // BCC
  const bcc = opSh.getRange(5,2).getValue();
  
  // 返信先のメールアドレス
  const replyTo = opSh.getRange(6,2).getValue();

  // メールアドレス格納列
  const toAdressCol = opSh.getRange(7,2).getValue();

  // 氏名列
  const nameCol = opSh.getRange(8,2).getValue();

  // 返信用本文ファイルID
  const docId = opSh.getRange(9,2).getValue();
  
  // 回答ブックを取得からシートを取得
  const sh = ss.getSheetByName("フォームの回答 1");

    // メールの本文を取得する
  const text = DocumentApp.openById(docId).getBody().getText();


  // 排他制御
  const lock = LockService.getDocumentLock();

  if(lock.tryLock(1000*10)){
    
    // 最終行の取得
    const lastRow = sh.getLastRow()
    
    // メールアドレスを取得(メールアドレスがある列をgetRangeの2つ目の引数に入れる)
    const toAdress = sh.getRange(lastRow,toAdressCol).getValue()
    
    // 担当者名の取得(担当者名がある列をgetRangeの2つ目の引数に入れる)
    const name = sh.getRange(lastRow,nameCol).getValue()

    // オプションを設定する
    const option = {
      from:fromAdress,
      name:fromName,
      cc:cc,
      bcc:bcc,
      replyTo:replyTo
    }

    // メール本文を作成する
    const body =`${name}様\n${text}\n`

    // メールを送信する
    GmailApp.sendEmail(toAdress,subject,body,option)
  }
}

貼り付けたらCtrl+Sもしくは実行の左にあるボタンで保存します。

トリガーの設定

トリガーというプログラムを起動させる条件を設定します。

①サイドバーのトリガーを押下

②右下のトリガーを追加→イベント種類をフォーム送信時に変更して保存

③アカウントを選択
(押すと警告のような画面が出ますが、焦らず次の手順に進んでください)

④Advancedを押下

⑤Goto「プロジェクト名」unsafeを押下

⑥スクロールして「Allow」を押下

これでトリガーの設定は完了です。
このような画面になっていれば正常に登録がされています。

これで全ての手順が完了したので、自動的にメールが返信されるはずです。
試しに回答してみてもし来なければ手順を1から見直してみてください。

おまけ

返信本文の中で回答された内容を反映したい場合があります。
その際の手順を紹介します。

①オプションシートのA10にデータ名称
今回はセミナーの申し込み日付を反映させたいので「受講日」とします。

②オプションシートのB10セルにデータが格納される列番号を記載
今回は4列目に収集されるので「4」

③メール本文に置換文字を挿入
置換する目印として${ }$で囲います。今回は受講日なので「${time}$」とします。

④プログラムの「//メール本文を作成する」の直前に以下の文章を追加

// 受講日が格納される列番号を取得
    const timeCol = opSh.getRange(10,2).getValue()

// 受講日を取得
    const time = sh.getRange(lastRow,timeCol).getValue()

// 受講日を置換
    const replacedText = text.replace("${time}$",time) 

⑤「//メール本文を作成する」プログラムを編集

//編集前

// メール本文を作成する
    const body =`${name}様\n${text}\n`

//編集後

// メール本文を作成する
    const body =`${name}様\n${replacedText}\n`

こうすることで、回答内容に応じて本文を変更することもできます。

ぜひ試してみてください。
もし、正常に動作しないなどあればコメント欄にその状態を記載してくれれば回答します。

この記事が気に入ったらサポートをしてみませんか?