問い合わせフォームの自動返信は、Google フォームなら回答先のスプレッドシートに Google Apps Script(GAS)を書き、「フォーム送信時」のトリガーでメールを送ると付けられます。ホームページの自前のフォームなら、送信先を GAS のウェブアプリにして、受け取った同じ処理の中で返信を送ります。
なぜ自動返信が要るのですか
・送った直後に何も届かないと、送った方は届いたのかが分からず、同じ内容をもう一度送ったり、電話をかけ直したりします
・担当者の返事が翌日になる日でも、受け付けたことだけは先にお伝えできます
・受付番号と送られた内容を返しておくと、あとで問い合わせを受けたときに、どの件の話かを突き合わせられます
Google フォームに付けるには
まず、フォームの「設定」→「回答」で、メールアドレスを集める設定と、回答のコピーを送る設定で足りるかを確かめます。送られるのは回答の写しだけなので、お礼の文や会社名を入れたいときは GAS を使います。
1. フォームの「回答」タブからスプレッドシートにつなぎ、そのスプレッドシートで「拡張機能」→「Apps Script」を開きます
2. MailApp でメールを送る関数を書き、メールアドレスとお名前の取り出し先を、自分のフォームの質問の題に合わせます
3. 左の時計の印(トリガー)から「トリガーを追加」を押し、イベントのソースに「スプレッドシートから」、イベントの種類に「フォーム送信時」を選びます
4. 保存すると Google の承認画面が出るので、自分のアカウントで許可します。最後に、自分のメールアドレスで 1 件送って、返信が届くかを確かめます
メールを送る道具には MailApp と GmailApp があります。MailApp は送ることしかできないぶん、承認画面で求める権限が狭くて済みます。GmailApp は受信箱を読んだり下書きを作ったりもできるので、広い権限を求めます。自動返信だけなら MailApp で足ります。どちらも 1 日に送れる数には上限があり、無料の Google アカウントでは 100 通ほどです。関数の途中で残りの数を確かめ、残りがなければ送らないようにしておくと安心です。
自前のフォームでは
Google フォームと違い、送信を受け取る先を自分で用意します。GAS をウェブアプリとして公開すると受け取り口が 1 つでき、フォームの送信先をそこにすると、送信のたびに doPost という関数が呼ばれます。doPost の中でスプレッドシートに 1 行書き、同じように MailApp で返信を送ります。
つまずきやすい点が 1 つあります。フォームから JSON を送るときに Content-Type を application/json にすると、ブラウザが送信の前に許可を問い合わせます。GAS のウェブアプリはこれに答えられないため、内容が届きません。text/plain にすれば、中身は同じ JSON のまま届きます。
迷惑投稿と二重送信の防ぎ方
自動返信を付けると、迷惑投稿や送信ボタンの連打にもメールを返してしまい、1 日の上限を早く使い切ります。次の 4 つで防げます。
・人には見えない欄を 1 つ置き、そこに字が入った送信は記録も返信もしません。弾かれたと分かると bot は形を変えて送り直してくるので、フォームには受け付けたときと同じ形の返事を返します
・同じ中身の送信が 10 分以内に届いたら、シートに書かず、前回の受付番号を返します。鍵は CacheService に 10 分だけ置きます
・同時に 2 件届いても、LockService で 1 件ずつ処理して、受付番号が重ならないようにします
・1 項目は 2,000 字まで、1 回の送信は 30 項目までにして、超える送信は断ります
自分で組むか、頼むか
Google フォームに返信を付けるだけなら、上の手順で足ります。費用もかかりません。ホームページのフォームの受け口づくりや、受付シートへの記録、Slack などのチャットへの通知、迷惑投稿の防止まで入れるなら、一度きちんと組んでおくと後が楽です。
ココナラの出品「問い合わせフォームに台帳・通知・自動返信をつけます」と「Googleフォームの不具合を直します」もご覧ください。