Googleフォームの回答者に、
自動返信メールを送る(GAS)。
問い合わせ・予約・申込みフォームで「受け付けました」のメールを自動で返すと、届いたかどうかの確認電話や二重送信がぐっと減ります。このページでは Google Apps Script(GAS)で、店名・返信先・受付内容の控えを入れた自動返信を送る方法を、実際にありがちな事故(2通届く・悪用される)の対策込みで紹介します。
1. まず:標準機能で足りるか確認
| 方法 | できること | 向いている場合 |
|---|---|---|
| フォームの設定「回答のコピーを回答者に送信」 | 回答内容がそのまま届く。文面・送信元名は変えられない | 控えが届けば十分なとき(コード不要) |
| このページのGAS | 件名・本文・送信元名・返信先を自由に。返す項目も選べる | 「2営業日以内にご連絡します」などの案内や店名を入れたいとき |
標準機能で困らないなら、それが一番安全で手間もかかりません。
2. 準備
- フォームの「設定 → 回答 → メールアドレスを収集」を「回答者からの入力」にするか、「メールアドレス」という名前の記述式の質問を作ります(どちらでもシートの見出しは「メールアドレス」になります)。
- フォームの「回答」タブからスプレッドシートにリンクします。
- そのスプレッドシートで「拡張機能 → Apps Script」を開き、下のコードを貼り付けます。
- 左の時計アイコン「トリガー」→「トリガーを追加」→ 実行する関数
onFormSubmit・イベントのソース「スプレッドシートから」・イベントの種類「フォーム送信時」で保存。初回だけ Gmail とシートの許可を求められます。
3. コード全文(コピペで動きます)
const EMAIL_Q = 'メールアドレス'; // フォームの質問名(完全一致)
const NAME_Q = 'お名前';
const ECHO_Q = ['ご用件の種類', 'ご希望の日時']; // 控えとして返す質問だけ
const FROM_NAME = '山田商店 お問い合わせ窓口';
const REPLY_TO = 'info@example.com'; // 返信を受ける宛先
const STATUS_HEAD = '自動返信'; // シート右端に作る状態列の見出し
function onFormSubmit(e) {
const lock = LockService.getScriptLock();
if (!lock.tryLock(30 * 1000)) return;
try {
const sh = e.range.getSheet();
const row = e.range.getRow();
const col = statusColumn_(sh);
const cell = sh.getRange(row, col);
if (String(cell.getValue()).trim() !== '') return; // 二重起動対策
const v = e.namedValues;
const get = q => String((v[q] || [''])[0]).trim();
const to = get(EMAIL_Q);
if (!/^[^\s@,;<>]+@[^\s@,;<>]+\.[^\s@,;<>]+$/.test(to)) {
cell.setValue('ERROR: メール不正'); return;
}
if (MailApp.getRemainingDailyQuota() < 1) {
cell.setValue('ERROR: 送信上限'); return;
}
const name = (get(NAME_Q) || 'お客様').slice(0, 40);
const echo = ECHO_Q.filter(q => get(q) !== '')
.map(q => '・' + q + ':' + get(q).slice(0, 100)).join('\n');
const body = name + ' 様\n\n' +
'お問い合わせありがとうございます。以下の内容で受け付けました。\n' +
'担当者より2営業日以内にご連絡いたします。\n\n' +
(echo ? echo + '\n\n' : '') +
'※このメールは送信専用の自動返信です。お心当たりのない場合は破棄してください。\n' +
FROM_NAME;
MailApp.sendEmail({
to: to,
subject: '【' + FROM_NAME + '】お問い合わせを受け付けました',
body: body, name: FROM_NAME, replyTo: REPLY_TO,
});
cell.setValue('送信済 ' +
Utilities.formatDate(new Date(), 'Asia/Tokyo', 'MM/dd HH:mm'));
} finally {
lock.releaseLock();
}
}
function statusColumn_(sh) {
const last = sh.getLastColumn();
const head = sh.getRange(1, 1, 1, last).getValues()[0].map(String);
const i = head.indexOf(STATUS_HEAD);
if (i >= 0) return i + 1;
sh.getRange(1, last + 1).setValue(STATUS_HEAD);
return last + 1;
}
上の5つの定数(質問名・返す質問・送信元名・返信先)を自分のフォームに合わせて書き換えるだけです。質問名はシートの1行目の見出しと完全に同じ文字にしてください。
4. このコードが防いでいる3つの事故
- 同じ人に2通届く:「フォーム送信時」トリガーは、まれに同じ回答で2回起動することがあります。シート右端に「自動返信」列を自動で作り、送信済みの行には二度と送りません(
LockServiceで同時実行も防止)。 - 他人のアドレスで迷惑メールの踏み台にされる:フォームは誰でも送信できるため、第三者のアドレスと宣伝文を書き込まれると、あなたの Gmail からその文を送ってしまうおそれがあります。そこで自由記述欄は控えに入れず、
ECHO_Qで選んだ選択式の項目だけを100文字以内で返します。カンマ区切りで複数の宛先を入れる細工もはじきます。 - 送信上限で止まっていたのに気づかない:Apps Script からのメールには1日の宛先数の上限があります(無料の Gmail アカウントは約100件/日、Google Workspace は約1,500件/日)。上限に達した行は「ERROR: 送信上限」と残るので、後から手で対応できます。
5. よくあるつまずき
e.range が無くエラーになります。このコードはスプレッドシート側のトリガー用です。実行ログは Apps Script の「実行数」で確認できます。エディタで ▶実行するとエラー:フォーム送信時に渡される
e が無いためで、正常です。テストはフォームから実際に回答して行います。迷惑メールフォルダに入る:件名に店名を入れ、本文を短く、URLを入れすぎないのが基本です。送信元アドレスは実行したアカウントになり、Workspace でなければ
noReply は使えないため、replyTo で返信先を指定しています。6. AIはどこに使う?(おすすめは「担当者側」)
回答者への自動返信の本文を ChatGPT に書かせるのはおすすめしません。確認していない文面が、そのまま外部の人に届いてしまうからです。AI は担当者への通知側で使い、「種別・緊急度・要約」を付けてから人が返信するのが安全です。その仕組みは Googleフォームの問い合わせをAIで自動振り分け、返信文の下書きは Gmailの問い合わせ返信をAIで下書き にまとめています。
フォームの問い合わせ対応を、もう一歩まとめて自動化したい方へ
自動返信のあと、担当者にAIで種別・緊急度・要約を付けて通知し、放置された問い合わせをリマインドする拡張版です。設定はシートで変えられ、通知に載せる前に電話番号・メールアドレスをマスクします。
フォーム問い合わせAI振り分け・拡張版(設定シート・個人情報マスク・放置リマインド・日次まとめ/$3)を見る → Gmail問い合わせ AI 下書き返信・拡張版($3)→ 請求書PDF+AI添え状・議事録AI要約など、そのまま動くGAS5本+日本語の導入手順書(PRO版・$39)→手で貼って使うプロンプトだけ欲しい方へ:事務AIプロンプト集12種(無料・投げ銭歓迎)
Gumroad での販売です。このページの自動返信のコードは無料で、有料版には含まれていません。AI を使う機能には OpenAI の API キー(従量課金)が必要です。デジタル納品のため、ダウンロード後の返金はお受けできません(不具合時は誠実に対応します)。
自分で設定するのが不安な方へ(ココナラ・日本円):シート1列のAI一括処理と、当日分の自動サマリーメールのGAS2本+日本語手順書を、ココナラで販売しています(3,000円・税抜〜)。初期設定サポート(+4,000円)や、あなたの実データで自動化フローを1つ一緒に作る導入伴走(+12,000円)は任意のオプションです(いずれも税抜)。対応できるかは購入前の見積り相談で確認できます。
ココナラで導入相談・購入する →フォーム問い合わせをAIで振り分け · スプレッドシートから差し込みメールを下書き作成 · Gmail問い合わせ返信をAIで下書き · GASからChatGPT APIを安全に呼ぶ · 無料本:GAS×ChatGPT事務自動化の基本