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

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


## 手順
### 1.GoogleFormを作成する
目的に合わせ[GoogleForm](https://www.g-workspace.jp/googleworkspace-reference/forms/create-form/)を作成してください。

※GoogleFormから「新しい回答についてのメール通知を受け取る」設定を行う方法は[こちら](https://www.g-workspace.jp/googleworkspace-reference/forms/mail-notification/)をご確認ください。
（条件を設けずにメール通知を受け取りたい場合は上記リンクの方法で設定できます。）

#### 今回使用するフォームとメールを送信する条件
今回はテンプレートの「イベント出欠確認」フォームを使用します。
設定されている質問は以下の4つです。
```
①参加されますか？（ラジオボタン）
⇒はい、参加します
⇒いいえ、参加できません

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

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

④コメントまたはご質問（テキスト）
```
今回は①で「はい、参加します」を選択し回答した場合のみ、メールを送信するようにします。

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

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

<img alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3843084/28ea69bb-fa45-67cd-9ea6-44ceb5e9a158.png" width="65%">

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

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

<img alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3843084/66e2e454-3b4c-5f3d-3412-e4569f14767a.png" width="75%">

```
  "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」ファイル修正
エディタに以下のコードを入力してください。

```js
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.トリガーの設定
フォームが送信されたとき、スクリプトが実行されるようにトリガーを設定します。

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

<img alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3843084/90558db8-e76f-62b1-311e-e636a26b6133.png" width="60%">


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

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

<img alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3843084/5b6de135-8379-2ca8-f1db-5037ee59ed42.png" width="50%">

<img alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3843084/c535e298-0f2e-27a0-9a34-d5fd06418dfb.png" width="50%">

<img alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3843084/6835b9fe-2b1b-706a-3346-30373d222698.png" width="50%">

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

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

<img alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3843084/a43d6f76-2d4e-92fe-995c-96753358328e.png" width="85%">

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

<img alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3843084/2b5cf1a3-de67-a69f-5fd9-6a60bc286dcf.png" width="60%">

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