見出し画像

#40 GoogleFormの回答が条件に当てはまる場合にメールで通知を送りたい

はじめに

GoogleFormからの回答をリアルタイムで確認するため、回答の内容をメールで送信する機能を作成してみました。
GoogleFormで「新しい回答についてのメール通知を受け取る」設定を行うことができますが、今回は条件付きでメールを送信するためGASを用いて処理を行います。

手順

1.GoogleFormを作成する

目的に合わせGoogleFormを作成してください。

※GoogleFormから「新しい回答についてのメール通知を受け取る」設定を行う方法はこちらをご確認ください。
(条件を設けずにメール通知を受け取りたい場合は上記リンクの方法で設定できます。)

今回使用するフォームとメールを送信する条件

今回はテンプレートの「イベント出欠確認」フォームを使用します。
設定されている質問は以下の4つです。

①参加されますか?(ラジオボタン)
⇒はい、参加します
⇒いいえ、参加できません

②参加者の名前をご記入ください。(テキスト)

③このイベントのことを、どのようにしてお知りになりましたか。(ラジオボタン)
⇒ウェブサイト
⇒友人
⇒ニュースレター
⇒広告

④コメントまたはご質問(テキスト)

今回は①で「はい、参加します」を選択し回答した場合のみ、メールを送信するようにします。

2.Google Apps Script を開く

作成したフォーム画面最上部にある「その他」を開き「スクリプト エディタ」を押下します。
Google Apps Scriptの画面に遷移します。

3.「appsscript.json」の修正を行う

画面左のメニューから「プロジェクトの設定」を押下します。
プロジェクトの設定>全般設定の中に
"「appsscript.json」マニフェスト ファイルをエディタで表示する"
というチェックボックスがあるのでチェックします。

左のメニューから「エディタ」画面へ戻ると、「ファイル」に「appsscript.json」が表示されるようになります。

メールの送信に必要なアクセス権限をリクエストするため、「oauthScopes」を追記します。

  "oauthScopes": [
    "https://www.googleapis.com/auth/script.send_mail"
  ]

アクセス権限が足りていない場合、スクリプト実行時に以下のようにエラーが発生します。

Exception: You do not have permission to call DocumentApp.create. Required permissions: https://www.googleapis.com/auth/script.send_mail

設定を追記しただけでは権限は付与されず、後述のトリガーの設定時に権限の付与を許可する必要があります。
参考:https://developers.google.com/apps-script/concepts/scopes?hl=ja
参考:https://zenn.dev/atomic/articles/831195249869ff

4.「コード.gs」ファイル修正

エディタに以下のコードを入力してください。

function onFormSubmit(e) {
  // フォームの回答を取得する
  var formResponses = e.response.getItemResponses();
  
  // ①参加されますか?の回答
  // 1番目の質問なので配列の[0]に値が入る
  let participation = formResponses[0].getResponse();

  // 条件を満たすかチェック
  if (participation == 'はい、参加します') {
    // 条件が満たされた場合、メールを送信する
    sendEmail(formResponses);
  }else{
  // 条件が満たされない場合、ログを出力する
    Logger.log('回答がメール通知の条件を満たしていません。', e.response.getItemResponses());
  }
}

function sendEmail(formResponses) {
  // 送信先のメールアドレス
  var emailAddress = 'メールアドレス';
  
  // メールの件名
  var subject = 'GoogleFormへの回答がありました';
  // メールの本文
  var message = '回答内容\n' + formResponses.join('\n');
  
  // メールを送信する
  MailApp.sendEmail(emailAddress, subject, message);
}

コードを入力したら保存してください。
「Ctrl+S」かエディタ上部の「プロジェクトを保存」ボタン押下で保存できます。

5.トリガーの設定

フォームが送信されたとき、スクリプトが実行されるようにトリガーを設定します。

画面左のメニューから「トリガー」を押下しトリガー画面を開きます。
トリガー画面右下の「+ トリガーを追加」ボタンを押下し、以下のように設定してください。

実行する関数:onFormSubmit
実行するデプロイ:Head
イベントのソース:フォームから
イベントの種類:フォーム送信時
エラー通知設定:お好みで

保存を押下すると、アクセス権限を求めるポップアップが表示されます。

先に進み「Allow」押下でメール送信のアクセス権限が付与されます。
これでトリガーの設定は完了です。

6.実際にフォームを送信してみる

作成したフォームで回答を送信してみます。
スクリプトが動いているかどうかは、画面左のメニューの「実行数」から確認できます。
ステータスが「完了」と表示されていたらスクリプトの実行は成功です。
フォームの回答が条件に合わない場合、「実行数」画面のログに「回答がメール通知の条件を満たしていません。」と表示されます。

フォームの回答が通知の条件に当てはまる場合、指定したメールアドレスにメールが送信されます。

最後に

GoogleFormの回答を条件にメールを送る方法を紹介しました。
今回は参加か不参加かのシンプルな条件でメールを送信しましたが、条件を増やすことでより便利に使うことができそうです。
ご覧いただきありがとうございました。