方法っていうかスクリプト。
Google Drive (旧 Google ドキュメント) のフォーム機能は便利ですね。
簡単な申し込みフォームぐらいならすぐ作れる。
ただひとつ悩ましいのは、
申し込みをした人に送信内容の控えを送る機能がないところ。
なので「申し込んだかどうか忘れた」とか
「日時や場所がわからなくなった」とかいうこともよく起こります。
またフォームの管理者に「投稿があった」ことを通知する機能はあるけど
具体的な投稿内容はその都度スプレッドシートを開かないとわからない。
(一応書いておくとこれは「ツール」→「通知ルール」から設定)
ただ Google Drive では Google Apps Script というのが使えて
いろんな処理を自動化することができますね。
というわけで、
Google Drive のフォームから投稿があったら
投稿者に確認メールを自動返信して
管理者にそのコピーを送信するスクリプトを書いてみました。
基本的な使い方
-
Google Drive でフォームを作る
ここは普通にやります。Google Driveのホームで「作成」をクリックして「フォーム」を選ぶ。
なお、投稿者のメールアドレスを入れてもらう欄の「質問のタイトル」は「メールアドレス」という名前にしてください。(後ほど設定で変更可能)
最後に右上の「保存」をクリック。保存したら「回答を表示」→「スプレッドシート」でスプレッドシートの画面へ移動します。
-
スクリプトエディタを開く
スプレッドシートで「ツール」→ “Script editor” を選ぶ。
-
自動返信用のスクリプトを貼り付ける
デフォルトで入っている
function myFunction() {}
というやつは消して、ここにあるスクリプトをコピー&ペーストしてください。同じものをこの記事の末尾にも置いときます。
-
スクリプトを保存する
メニュー欄にある保存ボタンを押します。
プロジェクトに名前をつけろと言われるので、適当な名前をつけます。
最初から入っている「無題のプロジェクト」のままでも大丈夫だけど、まあ後から何だかわかるように「自動返信」か何か適当に。 -
トリガーをセットする
「こうなったときにスクリプトを起動してね」という指示を設定します。
メニュー欄「リソース」→「現在のスクリプトのトリガー」を選ぶ。最初は何も設定されていないので “No triggers set up. Click here to add one now.” と書かれたリンクをクリック。
「実行」欄にはスクリプトの関数名 sendConfirmation が入っていると思うのでそのまま。
“Events” のところを “From spreadsheet” “On form submit” にして「保存」をクリック。
この時点ではまだ保存はされず、次の承認ステップに移ります。 -
スクリプトの実行を承認する
“Authorization required” というタイトルで実行権限の承認を求めるダイアログが出るので、下にある “Authorize” をクリック。
「認証されました。トリガーを保存できます。」というウィンドウが出たら承認完了。「閉じる」ボタンを押してトリガー設定の画面に戻ります。 -
トリガーを保存する
もう一度「保存」ボタンをおす。
これで、フォームの投稿があったらメールが送信されるようになります。
テスト投稿
フォームを開いて、試しに何か投稿してみてください。
「メールアドレス」欄に入力したアドレスと
自分の Gmail アドレスに自動でメールが送られるはず。
設定を変えて使う
確認メールの件名やメール本文に入れる文章などは
用途に応じて変えることができます。
やり方は2とおり。
ソースを直接書き換える方法
ソース前半の宣言部分を書き換えると各種設定が変わります。
「テンプレート」については後述します。
//フォームでメールアドレスが入力される列の名前 var emailColName = "メールアドレス"; //テンプレートとして使うシートの番号。1枚目を0と数える。false にするとテンプレートを使わない。 var templateSheetId = false; //テンプレートを使わない場合の確認メールの送信内容 //件名(デフォルトではフォームのタイトルが入ります) var subject = ss.getName(); //冒頭に入れる文章 var bodyPre = "下記の内容で受け付けました。\n\n"; //末尾に入れる文章 var bodyPost = ''; //投稿内容の箇条書きにつける印 var bullet = ' - '; //確認メールのコピーを送る管理者のメールアドレス var adminEmail = ss.getOwner().getEmail(); //エラー発生時に管理者に送るメールの件名 var errorSubject = 'エラーが発生しました'; //スプレッドシートにつける送信済みマーク var sentFlag = 'v'; //送信済みマークをつける列のタイトルと背景色 var sentHeaderTitle = '送信済み'; var sentHeaderBgColor = 'white'; //メールアドレスの列が見つからなかった場合のエラーメッセージ var emailNotFoundMessage = 'メールアドレス用のフィールド名「' + emailColName + '」が見つかりませんでした';
テンプレートを使う方法
スクリプトをインストールする人と運用する人が違うとか
いちいちスクリプトを書き換えたくないとかいう場合には
スプレッドシートの別シートに各項目の内容を書くことで
設定を変えることができます。
まずはテンプレートを使うように設定を変更。
今のところ、ここだけはスクリプトを書き換える必要があります。
//テンプレートとして使うシートの番号。1枚目を0と数える。false にするとテンプレートを使わない。 var templateSheetId = 1; //【2枚目のシートをテンプレートとして使う場合】
スプレッドシート左下にあるシート追加のボタンを押して
できた新しいシートの次のセルに必要な内容を入れてください。
- A1: 確認メールの件名
- A2: 本文の冒頭に入れる文章
- A3: 本文の末尾に入れる文章
- A4: エラーが発生したとき管理者に送るメールの件名
その他の項目についても後日対応しますたぶん。
注意点
現状のものだと、確認メールの送信元は
フォーム所有者の Gmail アドレスになります。
これを “noreply” にすることもできるんだけど
どうも Google Apps ユーザー限定みたい。
ともかく、まだ実装してません。
今後の対応予定
- スクリプトは一切書き換えなくてもテンプレートを使えるようにする
- テンプレートで指定できる項目の追加
- 送信元メールアドレスを noreply にする設定
こんなところかなあ。自分でもう少し使ってみてから改善します。