【GoogleForm×GAS×Slack】GoogleForm回答時にSlackに通知を送る


# 1.やりたいこと
- GoogleFormでユーザーが回答を終えたときに、Slackに回答があったことを伝える通知を送る
- 利用シーンとしては、Google Formを「問い合わせフォーム」として利用し、問い合わせに気づくために通知がほしいときに使えます。Google Formでの回答をそのままにしない/すぐに対応するようなシーンで威力を発揮します。

# 2.実現方法

まず、Google Formでフォームを作成します。その後、slackからwebhookのURLを取得し、GASを使用してGoogle Formの回答から必要な回答を取得し、Slackに通知を送るコードを書きます。最後に、GASのトリガー機能で設定を行いまいます。


## 2.1 Google Formを作成する

GoogleFormを作成します。お問い合わせフォームの例なので、以下のように簡易的に作成しました。


- 「重要度を教えてください」
    - ラジオボタン　「緊急」「通常」「お手すき」
- 「お問い合わせタイトル」
    - 記述式（短文）
- 「お問い合わせ内容」
    - 段落

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605915/48c428fc-4259-5c19-697e-81efaacef3e7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605915/aaa96049-17c5-7ee2-279b-e8cb3beab302.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605915/d43379b3-c134-db6e-6c39-c2ac20f1c2ac.png)

また、設定から「メールアドレスを収集する」を「確認済み」にしておきます。（メールアドレスを回答者名をして扱うために、必要です）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605915/6873114c-4899-015b-d44f-ba735959bfbd.png)


## 2.2 SlackからwebhookのURLを取得

以下の記事の「2.2 Webhook URLの取得」を参照してください。

https://qiita.com/aki_number16/items/d72ecf47e0f7c272ec30#22-webhook-url%E3%81%AE%E5%8F%96%E5%BE%97

## 2.3 GASでコードを記述

お問い合わせフォーム画面の右上の点々アイコンから、「Apps Script」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605915/ed754ec3-bec4-b34f-8bc3-55cbf609e771.png)

＊

以下のコードをコピー＆ペーストし、所定の位置にwebhook URLを入力し、保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605915/5eac9c16-be65-124d-9cc7-b4a583d321da.png)


```javascript

function sendSlackNotification(e) {
  // SlackのIncoming Webhook URL
  const slackWebhookUrl = 'sampleUrl';// ここに取得したwebhook URLを置き換える

  // Googleフォームの回答から必要な情報を抽出
  const formResponse = e.response;
  const importance = formResponse.getItemResponses()[0].getResponse();
  const title = formResponse.getItemResponses()[1].getResponse();
  const content = formResponse.getItemResponses()[2].getResponse();
  const name = formResponse.getRespondentEmail(); // 回答者のメールアドレスを名前として利用

  // Slackに送信するメッセージを作成
  const message = `ただ今、お問合せがありましたのでご確認ください。\n\n【${importance}】「${title}」\n質問者：${name}\n質問内容：${content}`;

  // Slackに通知を送信
  const options = {
    'method': 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify({
      'text': message
    })
  };
  try {
    UrlFetchApp.fetch(slackWebhookUrl, options);
    Logger.log('Slack通知を送信しました。');
  } catch(error) {
    Logger.log('Slack通知の送信に失敗しました。', error);
  }
}
```
ちなみに、このコードでは、Google Formの回答を取得し、回答内容をslackに送っています。回答者のメールアドレスを名前として利用しています。

## 2.4 設定を追加する

以下のトリガーアイコンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605915/f45ad0b1-ba6a-2f81-7179-0393aed1ed11.png)

設定を追加していきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605915/733f6752-91c6-2a7f-e4c8-684ff0ab18d0.png)

- 実行する関数: sendSlackNotification
- 実行するデプロイ: Head
- イベントのソース: フォームから
- イベントの種類: フォーム送信時

最後に「保存」ボタンを押下します。

# 3.動作確認
作成したGoogle Formを回答して、slackに通知が飛ぶか動作確認をしてみましょう。

以下のようにslackに通知が飛びました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605915/87dd0221-26d7-2150-67ab-587db1fe8de1.png)


# 4.作ってみた感想
GASを使うと簡単に自動化ができて、試行錯誤するのが楽しいです。今回はメールアドレスを名前として利用していますが、ここはもう少し改良の余地があります。フォームの項目に名前や所属を追加してもよいかもしれません。いずれにせよ、自分が必要な文脈でカスタマイズできて、使い勝手がよいです。

最後まで読んでいただいた方、ありがとうございました。

# 参考文献

Yuiki's BNB blog「【コピペでOK！】GASでGoogleフォーム回答者のメールアドレスを取得する方法」https://www.yukibnb.com/entry/form_getrespondentemail
 2025年02月08日アクセス.