悩みから読む へ戻る

問い合わせフォームに自動返信をつける(GAS)Form Auto Reply

問い合わせフォームの自動返信は、Google フォームなら回答先のスプレッドシートに Google Apps Script(GAS)を書き、「フォーム送信時」のトリガーで MailApp からメールを送ると付けられます。ホームページの自前のフォームなら、送信先を GAS のウェブアプリにして、受け取った同じ処理の中で返信を送ります。

問い合わせを送った方へ受付のメールを自動で返す方法を、Google フォームの場合とホームページの自前のフォームの場合に分けて、Google Apps Script(GAS)で組む手順にまとめました。

公開日 / 書いた人: 墨縄(suminawa)

なぜ問い合わせフォームに自動返信が要るのですか

  • 送った直後に何も届かないと、送った方は届いたのかが分からず、同じ内容をもう一度送ったり、電話をかけ直したりする
  • 担当者が返事を書けるのが翌日になる日でも、受け付けたことだけは先にお伝えできる
  • 受付番号と送られた内容を返しておくと、あとで電話やメールで問い合わせを受けたときに、どの件の話かを突き合わせられる

Google フォームで自動返信を付けるには、どうしますか

まず、フォームの「設定」→「回答」で、メールアドレスを集める設定と、回答のコピーを送る設定で足りるかを確かめます。送られるのは回答の写しだけなので、お礼の文や会社名を入れたいときは GAS を使います。

  1. フォームの「回答」タブからスプレッドシートにつなぎ、そのスプレッドシートで「拡張機能」→「Apps Script」を開く
  2. 下のコードを貼り、「メールアドレス」「お名前」を自分のフォームの質問の題に合わせる
  3. 左の時計の印(トリガー)から「トリガーを追加」を押し、実行する関数に sendAutoReply、イベントのソースに「スプレッドシートから」、イベントの種類に「フォーム送信時」を選ぶ
  4. 保存すると Google の承認画面が出るので、自分のアカウントで許可する。最後に、自分のメールアドレスで 1 件送って、返信が届くかを確かめる
// 回答先のスプレッドシートの Apps Script に貼る。トリガー「フォーム送信時」で動く
function sendAutoReply(e) {
  const answers = e.namedValues; // 質問の題 → 回答(配列)
  const to = (answers['メールアドレス'] || [''])[0].trim();
  if (to === '') return;
  if (MailApp.getRemainingDailyQuota() <= 0) return; // 今日の上限に達した
  const name = (answers['お名前'] || [''])[0];
  MailApp.sendEmail({
    to: to,
    subject: 'お問い合わせを受け付けました',
    body: name + ' 様\n\nお問い合わせいただきありがとうございます。\n'
      + '内容を確認のうえ、あらためてご連絡します。\n\n'
      + '※ このメールは自動でお送りしています。',
    name: '(会社名)',
  });
}

メールを送る道具には MailApp と GmailApp があります。MailApp は送ることしかできないぶん、承認画面で求める権限が狭くて済みます。GmailApp は受信箱を読んだり下書きを作ったりもできるので、広い権限を求めます。自動返信だけなら MailApp で足ります。どちらを使っても 1 日に送れる数には上限があり、無料の Google アカウントでは 100 通ほどです。コードの途中で残りの数を確かめているのは、このためです。

自動返信が届かないときは、どこを確かめますか

Google フォームの自動返信が届かないときの原因は、ほぼ次の 6 つのどれかです。上から順に確かめると、たいてい 5 分で見つかります。

  1. トリガーの種類: 「イベントの種類」が「フォーム送信時」になっているかを見ます。「編集時」や「変更時」では、回答が入っても関数は動きません。「イベントのソース」は、スプレッドシートに貼ったコードなら「スプレッドシートから」です。
  2. 承認: トリガーを作ったあとに Google の承認画面を閉じてしまうと、トリガーは残っていても実行のたびに失敗します。Apps Script の左の「実行数」を開き、赤い「失敗」が並んでいたら、関数を一度手で実行して承認をやり直します。
  3. 質問の題とコードの食い違い: コードは、回答を質問の題で探します。フォームの質問が「ご連絡先(メール)」なら、コードの「メールアドレス」もそのとおりに書き換えます。フォームの設定で集めたアドレスは、スプレッドシートでは「メールアドレス」という列に入ります。
  4. 1 日の上限: 無料の Google アカウントは 1 日 100 通ほどで止まります。上のコードは残りが 0 なら送らずに終わるので、「実行数」では成功に見えます。テスト送信を繰り返した日は、翌日まで待つか、別のアカウントで試します。
  5. 迷惑メールの箱: 送信元は自分の Gmail なので、受け取る側の会社のメールが弾くことがあります。届かないと言われたら、まず相手の迷惑メールの箱を見てもらい、件名に会社名を入れて、本文に URL をいくつも並べないようにします。
  6. 二重のトリガー: フォーム側とスプレッドシート側の両方にトリガーを作ると、同じ返信が 2 通届きます。片方を消します。

どれにも当てはまらないときは、「実行数」の失敗の行を開くと、エラーの文が出ます。そこに「権限」とあれば承認、「undefined」とあれば質問の題の食い違いです。

ホームページの自前のフォームでは、どうしますか

Google フォームと違い、送信を受け取る先(受け口)を自分で用意します。GAS のスクリプトをウェブアプリとして公開すると URL が 1 つでき、フォームの送信先をその URL にすると、送信のたびに doPost という関数が呼ばれます。doPost の中でスプレッドシートに 1 行書き、上と同じように MailApp で返信を送ります。

つまずきやすい点が 1 つあります。フォームから JSON を送るときに Content-Type を application/json にすると、ブラウザが送信の前に許可を問い合わせます。GAS のウェブアプリはこれに答えられないため、内容が届きません。text/plain にすれば、中身は同じ JSON のまま届きます。公開のしかた、承認画面の進み方、そのまま使えるフォームの HTML は、キットの手順書に入れています。

フォーム受付 GAS キットの自動返信メール。件名に受付番号が入り、本文に送られた名前・メールアドレス・お問い合わせの内容が並ぶ
キットの自動返信には、受付番号と送られた内容が入ります ── フォーム受付の見本を開く

迷惑投稿と二重送信は、どう防ぎますか

自動返信を付けると、迷惑投稿や送信ボタンの連打にもメールを返してしまい、1 日の上限を早く使い切ります。キットでは次の 4 つで防いでいます。

  • 人には見えない欄を 1 つ置き、そこに字が入った送信は記録も返信もしない。弾かれたと分かると bot は形を変えて送り直してくるので、フォームには受け付けたときと同じ形の返事を返す
  • 同じ中身の送信が 10 分以内に届いたら、シートに書かず、前回の受付番号をそのまま返す。鍵は CacheService に 10 分だけ置く
  • 同時に 2 件届いても、LockService で 1 件ずつ処理して、受付番号が重ならないようにする
  • 1 項目は 2,000 字まで、1 回の送信は 30 項目までにして、それを超える送信は断る

Slack や LINE への通知も同時に付けるには、どうしますか

自動返信を送る関数の中で、UrlFetchApp から Slack の Incoming Webhook の URL へ送ると、社内への通知も 1 件ごとに届きます。LINE に送るなら、LINE 公式アカウントのチャネルアクセストークン(長期)を使います。

キットでは、通知先を設定シートで slack・discord・line から選びます。カンマで区切って並べると、同じ 1 件が両方に届きます。メールの上限に達した日は自動返信を送らず、通知の末尾に「自動返信は本日の上限に達したため送っていません」と足すので、返信が届いていない件を人が拾えます。設定の書き間違いで処理できなかったときも、通知先にエラーが 1 通届きます。

自分で組むか、キットを使うか、設定ごと頼むか

道は 3 つあります。

  • 自分で組む: Google フォームに返信を付けるだけなら、上のコードとトリガーで足ります。費用はかかりません
  • キットを使う: 「フォーム受付 GAS キット」(¥3,480 の買い切り)は、ホームページのフォームの受け口として、受付シートへの記録、受付番号、Slack や LINE への通知、自動返信、迷惑投稿と二重送信の防止までを行います。貼るのは Code.gs と appsscript.json の 2 ファイルで、設定は 20 分ほどです ── BOOTH / note
  • 設定ごと頼む: ココナラの「問い合わせフォームに台帳・通知・自動返信をつけます」(30,000 円・7 日)で、お使いのフォームのつなぎ替えから動作確認、手順書までお受けします

見本・キット・ご相談