みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Google Apps Scriptで備品購入申請を題材にワークフローを作っております。
前回の記事はこちらです。
フォーム送信時にトリガーでメッセージを送る方法をお伝えしました。
さて、メッセージを送るのは良いのですが、その中にフォームで送信した内容を反映したくないですか??
ということで、今回はGoogle Apps Scriptでフォーム送信した内容を含んだメッセージをGmailで送るスクリプトを紹介します。
フォーム送信時のイベントオブジェクトを使いますよ。
では、行ってみましょう!
前回のおさらい
さて、これまでのおさらいをしておきましょう。
このシリーズでは備品購入申請のワークフローを作っておりまして、申請をするのは以下のGoogleフォームを使用します。
Googleフォームから送信した内容は、連携している以下のスプレッドシートに蓄積されます。
さらに、このスプレッドシートには「フォーム送信時」のトリガーで動作するスクリプトが仕込まれておりまして、それがこちらです。
function sendMessage() { const recipient = 'hogehoge@example.com'; //承認者のメールアドレス const subject = '備品購入申請のお知らせ'; let body = ''; body += '備品購入申請がありましたので\n'; body += '以下URLからスプレッドシートをご覧ください\n'; body += 'https://docs.google.com/spreadsheets/d/~'; //スプレッドシートのURL GmailApp.sendEmail(recipient, subject, body); }
つまり、備品購入申請のフォーム送信が行われると、承認者であるhogehogeさんにメールが送られるという仕組みです。
さて、そのメールのメッセージですが、フォーム送信の内容を含めたくないですか…?
ということで、その方法をお伝えしていきます。
フォーム送信時のイベントオブジェクト
Google Apps Scriptでは何らかのイベントでトリガーを発動させてスクリプトを動作させたとき、そのスクリプトはイベントに関する特別なオブジェクトを受け取ることができます。
それをイベントオブジェクトといいます。
イベントオブジェクトはトリガーの種類に応じてその内容が変わるのですが、今回使用している「フォーム送信時」イベントの場合は以下のような内容が含まれます。
プロパティ | 内容 |
---|---|
range | 編集されたRangeオブジェクト |
values | 送信される値の配列 |
values…この値を取り出せば、フォームから送信された値を取得できますね!
フォーム送信時のイベントオブジェクトのプロパティvaluesは、スプレッドシートに書き込まれる順に値が格納されている配列になっています。
つまり、今回の場合は以下のような内容になっています。
インデックス | 内容 |
---|---|
0 | タイムスタンプ |
1 | メールアドレス |
2 | 購買先 |
3 | 品名 |
4 | 個数 |
5 | 数量 |
6 | Memo(URLなど) |
実際の質問の前のインデックス0にタイムスタンプ、インデックス1にメールアドレスが入っているので注意ください。
これらから値を取り出して、メールの本文に組み込んであげればOKです。
フォーム送信の内容を含んだメッセージを送る
以上をもとに、フォーム送信の内容を含んだメッセージをGmailで送るスクリプトを作りました。
こちらです。
function sendMessage(e) { const [timeStamp, email, shop, item, price, amount] = e.values; const total = price * amount; const recipient = 'hogehoge@example.com'; //承認者のメールアドレス const subject = '備品購入申請のお知らせ'; let body = ''; body += '備品購入申請がありました。\n\n'; body += `・購買先: ${shop}\n`; body += `・品名: ${item}\n`; body += `・単価: ${price} 円\n`; body += `・数量: ${amount}\n`; body += `・総額: ${total} 円\n\n`; body += '以下URLからスプレッドシートをご覧ください\n'; body += 'https://docs.google.com/spreadsheets/d/~'; //スプレッドシートのURL GmailApp.sendEmail(recipient, subject, body); }
イベントオブジェクトを受け取る
イベントオブジェクトはトリガーで動作するスクリプトの仮引数として受け取ることができます。
1行目をご覧いただければわかりますが、よく「e」という名前を使います。
前述の通り、「values」というプロパティに、フォームから送信されたデータが配列として格納されています。
つまり、「e.values」がその配列を表すわけです。
分割代入で配列を個別の定数に代入する
さて、3行目ですが、分割代入という手法を使っています。
以下のようにすることで、配列内の値を個別の定数にごそっと代入することができるのです。
便利!
申請内容を含むメールを送信する
あとはe.valuesの配列からゴリゴリ値を取り出して、メッセージ本文bodyにゴリゴリ追加していけばOKというわけです。
実行すると、以下のようなメールが送信されますよ。
徐々に優しくなってきましたね。
まとめ
以上、Google Apps Scriptでフォーム送信した内容を含んだメッセージをGmailで送るスクリプトについてお伝えしました。
なんと言っても、フォーム送信時イベントのイベントオブジェクトがポイントですね。
これ知らないと困るやつです。
次回は、送信したメールのURLからスクリプトを起動する方法をお伝えします。
どうぞお楽しみに!
連載目次:初心者でも作れるGASによる簡単ワークフロー
スプレッドシート、Gmail、フォーム…Google Apps Scriptで操作できるアプリケーションはまさに「ワークフロー」を作成する上で必要なものが揃っています。ということで、このシリーズでは初心者でも簡単に作れるワークフローの作り方について解説をしていきます。- 備品購入申請フォームをGoogleフォームで作成する方法
- Google Apps Scriptでフォーム送信時にメッセージを送るスクリプトの作り方
- Google Apps Scriptでフォーム送信した内容を含んだメッセージをGmailで送るスクリプト
- Google Apps Scriptで特定のURLを踏んだらスクリプトを動作させるdoGet関数の使い方
- GASでURLを踏んでスクリプトを動作させたときにパラメータを渡す方法
- 【GASで作るワークフロー】URLクリックで「承認」とするスクリプトの作り方
- GASで送信するGmailのメッセージをプレーンでもHTMLでも送れるようにする
- GASのワークフローでURLのパラメータで承認・否認を切り替える方法