ガイド

フォーム回答をSlack通知する方法 -- Sheets記録・対応漏れ防止まで設計する

フォーム回答をSlack通知する方法 -- Sheets記録・対応漏れ防止まで設計する

最終更新日: 2026-05-12

フォーム回答をSlackに流すと、チームの反応は速くなります。

新しい問い合わせが来た瞬間に気づける。資料請求やイベント申込を、メールボックスの奥で見落としにくくなる。Googleフォームを使っているなら、Apps ScriptでSlackのIncoming WebhookへPOSTする実装もできます。

ただし、Slack通知は対応管理ではありません。

通知が流れただけでは、誰が返すのか、今どの状態なのか、営業メールを除外したのか、あとで一覧に戻れるのかが決まりません。通知は入口です。対応漏れを減らすには、通知、記録、担当者、ステータスをセットで設計します。

この記事では、フォーム回答をSlack通知する方法を、Googleフォーム+Apps Scriptの実装イメージから、Google Sheetsへの記録、FORMLOVAのWorkflow Placeでの考え方まで整理します。

フォーム自動化全体の順番を先に見たい場合は、FORMLOVAでフォーム自動化を始める方法を読むと、この記事の位置づけが分かりやすくなります。

先に結論

フォーム回答のSlack通知は、次の4点を決めてから作るのが安全です。

決めること内容決めないと起きること
通知条件全件通知か、条件付き通知か営業メールやテスト送信まで流れる
通知先どのチャンネル、どの担当領域か関係ない人が通知に慣れて見なくなる
記録場所Google Sheets、FORMLOVA回答一覧、CRMなどSlackから流れたあとに追えなくなる
状態管理未対応、対応中、完了、除外など誰かが見たことと対応済みが混ざる

Slack通知だけを作るなら、比較的簡単です。

でも、運用で効くのは「フォーム回答が来たらSlackへ送る」ではなく、次のような設計です。

新しい回答が届く
営業メールやテスト送信を除外する
必要なカテゴリだけSlackへ通知する
Google Sheetsにも同じ回答を残す
通知文に担当者・ステータス・回答URLを入れる
対応が始まったら未対応から対応中へ変える

この形にすると、Slackは気づく場所、Sheetsや回答一覧は戻る場所、ステータスは次の行動を決める場所になります。

Slack通知で止めないフォーム回答運用

よくある複合例: Slackに流したのに漏れる

以下は特定の顧客事例ではなく、フォーム運用でよく起きる状態をまとめた複合例です。

問い合わせフォームの回答を、すべて #inquiry チャンネルへ流すようにしたとします。送信されると、氏名、メールアドレス、問い合わせ内容がSlackに出ます。最初の数日は便利です。チーム全員が「届いた」と分かります。

しばらくすると、営業メール、テスト送信、既存顧客からの軽い連絡、料金相談が同じチャンネルに混ざります。

ある日、料金相談の問い合わせに誰かがリアクションを付けました。別の人は「誰かが見た」と思います。さらに別の人は、Slackの流れが速くて見落とします。週次でGoogle Sheetsを見返したとき、その問い合わせはまだ未返信でした。

この失敗は、Slack通知の失敗ではありません。

通知を「対応が始まった証拠」として扱ってしまったことが問題です。Slackに流れたこと、誰かが読んだこと、担当者が決まったこと、返信が完了したことは別の状態です。

Slack通知の最小構成

Googleフォームの回答をSlackに通知する場合、よくある構成は次の通りです。

  1. Googleフォームの回答をGoogle Sheetsへ保存する
  2. Apps Scriptでフォーム送信トリガーを設定する
  3. SlackのIncoming Webhook URLへJSONをPOSTする
  4. Slackチャンネルに通知が出る

SlackのIncoming Webhooksは、指定されたURLにJSONペイロードを送ることで、選択したチャンネルへメッセージを投稿する仕組みです。Webhook URLは秘密情報なので、公開リポジトリや記事のコードに実URLを貼らないでください。Slack公式ドキュメントでも、Webhook URLは秘密として扱うよう案内されています。

Google Apps Scriptでは、インストール型トリガーを使うと、フォーム送信のようなGoogle Workspace上のイベントをきっかけに関数を実行できます。外部URLへHTTPリクエストを送る場合は、UrlFetchApp.fetch(url, params) を使います。

実装イメージは次のようになります。

const SLACK_WEBHOOK_URL = PropertiesService.getScriptProperties().getProperty('SLACK_WEBHOOK_URL');

function onFormSubmit(e) {
  const values = e.namedValues;
  const name = values['お名前']?.[0] ?? '未入力';
  const email = values['メールアドレス']?.[0] ?? '未入力';
  const category = values['お問い合わせ種別']?.[0] ?? '未分類';
  const message = values['お問い合わせ内容']?.[0] ?? '';

  const payload = {
    text: `新しいフォーム回答: ${category}`,
    blocks: [
      {
        type: 'section',
        text: {
          type: 'mrkdwn',
          text: `*新しいフォーム回答*\n*種別:* ${category}\n*氏名:* ${name}\n*メール:* ${email}\n*内容:* ${message}`,
        },
      },
    ],
  };

  UrlFetchApp.fetch(SLACK_WEBHOOK_URL, {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(payload),
  });
}

これはあくまで最小例です。

実運用では、Webhook URLをスクリプトプロパティに保存する、テスト送信を本番チャンネルに流さない、エラー時にログを残す、通知文に回答シートの行番号や管理画面URLを入れる、といった調整が必要です。

Apps Scriptで実装する場合は、Google Apps Scriptのインストール型トリガーUrlFetchAppSlack Incoming Webhooksの一次情報を確認してください。

通知文に入れるべき項目

Slack通知の本文は、長ければよいわけではありません。

重要なのは、通知を見た人が次の判断をできることです。最低限、次の項目を入れます。

項目理由
回答種別問い合わせ、資料請求、採用、イベント申込を分ける
氏名・会社名誰から来たかをすぐ判断する
メールアドレス返信先を確認する
要約長文を全部読まなくても温度感をつかむ
回答URLまたは行番号Slackから記録場所へ戻れるようにする
初期ステータス未対応なのか、除外なのかを分ける
担当候補誰が見るべきかを通知時点で示す

逆に、すべての自由記述をSlackに流す必要はありません。

個人情報や機密に近い内容を含むフォームでは、Slackに出す情報を絞ります。Slackには要約と管理画面URLだけを出し、詳細は権限のある場所で確認する設計にします。

全件通知は最初だけでよい

最初は全件通知でも構いません。

フォームの送信量が少ないうちは、全件を見たほうが状況を理解しやすいです。どんな問い合わせが届くのか、営業メールがどれくらい混ざるのか、カテゴリが足りているのかを見られます。

ただし、送信量が増えたら条件を切ります。

カテゴリが「料金相談」または「導入相談」
かつ営業メールではない
かつテスト送信ではない
かつステータスが未対応

このように条件を入れると、Slack通知は静かになります。

静かな通知は見られます。うるさい通知は見られなくなります。フォーム運用では、この差が大きいです。

FORMLOVAのワークフローでは、条件を eqneq、比較、containsnot_containsis_emptyis_not_empty のような単位で扱います。AIが勝手に全部を決めるのではなく、人間が決めた条件と意図に沿って、通知や記録を動かす考え方です。

Google Sheetsは通知の保険ではなく、記録の本体です

Slackは流れる場所です。

Google Sheetsは戻る場所です。

この2つを分けて考えると、フォーム運用はかなり整理しやすくなります。

役割SlackGoogle Sheets / 回答一覧
すぐ気づく強い弱い
あとで検索する弱い強い
担当者を決める補助強い
集計する弱い強い
対応履歴を残す弱い強い

FORMLOVAでは、回答をCSVで一度書き出す方法と、Google Sheetsへ継続的に連携する方法を分けて考えています。CSVはある時点の回答を取り出す方法です。Google Sheets連携は、新しい回答を継続的に外部の表へ渡す方法です。

詳しくは回答をCSVで書き出す / Google Sheetsに自動連携する方法で整理しています。

Slack通知を作るときも同じです。通知を作ったら終わりではありません。あとから誰が、いつ、どの回答を、どう処理したかを見返せる場所を決めます。

ステータスがない通知は、対応漏れを防げない

問い合わせ対応でいちばん危ないのは、「見た」と「対応した」が混ざることです。

Slackで誰かがリアクションした。スレッドに「確認します」と書いた。担当者が口頭で返事をした。これらはすべて、対応完了とは限りません。

フォーム回答には、少なくとも次の状態を持たせます。

ステータス意味
未対応まだ誰も対応を始めていない
対応中担当者が決まり、返信や確認を進めている
完了必要な返信や処理が終わった
除外営業メール、重複、テスト送信など

Slack通知には、初期状態として 未対応 を入れます。

担当者が決まったら 対応中 に変えます。返信が終わったら 完了 にします。営業メールなら 除外 にします。

この状態をSlackのリアクションだけで管理しようとすると、あとで集計しにくくなります。フォーム側の回答一覧やSheetsに状態を持たせたうえで、Slackは入口として使うほうが安全です。

FORMLOVAの回答ステータス管理については、回答一覧を見て絞り込みとステータス管理をする方法を参照してください。

FORMLOVAで考えるなら、通知はWorkflow Placeの1部品です

FORMLOVAには、フォーム作成だけでなく、公開後の運用を扱うMCPツールがあります。2026年5月時点で、127個のMCPツールを25カテゴリに分けて扱っています。

その中には、回答、分析、メール、Webhook、フィルタリング、ステータス管理、スケジュール、Google Sheets、レシピなど、フォーム送信後に必要になる領域が含まれます。

Workflow Placeには、回答→Slack通知+Google Sheets記録 という横断レシピがあります。

これは「Slackに飛ばす」だけのレシピではありません。フォーム回答を起点にして、通知先と記録先を分ける考え方です。

たとえば、チャットでは次のように依頼できます。

問い合わせフォームの回答が来たら、
営業メールとテスト送信を除外して、
カテゴリが「料金相談」または「導入相談」のものだけSlackに通知してください。
同じ回答はGoogle Sheetsにも記録してください。
Slack通知には氏名、会社名、カテゴリ、要約、回答URL、初期ステータスを入れてください。

さらに運用に寄せるなら、次のように条件を足します。

Slackに通知した回答は、最初は未対応にしてください。
担当者が決まったら対応中に変更できるようにしてください。
営業メールと判断した回答は分析から除外してください。
毎週月曜に、未対応の問い合わせだけ一覧にしてください。

このプロンプトの価値は、個別のAPIを覚えなくてよいことではありません。

価値は、フォーム運用を「通知」「記録」「状態」「次の確認」に分けて、同じ意図で扱えることです。

Workflow Placeの使い方は、FORMLOVAのWorkflow Placeからレシピを見つけて、チャットで設定する方法で説明しています。MCPフォームサービス全体の考え方は、MCPフォームサービスまとめにまとめています。

実装前チェックリスト

Slack通知を作る前に、次を決めてください。

チェック決めること
目的気づくためか、担当者へ渡すためか、エスカレーションか
対象フォーム問い合わせ、資料請求、採用、イベント申込など
通知条件全件か、カテゴリや温度感で絞るか
除外条件営業メール、テスト送信、重複をどう扱うか
通知先どのチャンネル、どの担当者、どの時間帯か
記録先Google Sheets、FORMLOVA回答一覧、CRMなど
ステータス未対応、対応中、完了、除外の定義
失敗時Slack投稿失敗、Sheets連携失敗、権限切れをどう検知するか
秘密情報Webhook URLやOAuth情報をどこに保存するか

ここまで決めてから実装すると、Slack通知は長く使える運用になります。

逆に、ここを決めないまま通知だけ作ると、最初は便利でも、後から誰も見ない通知になりやすいです。

どの方法を選ぶべきか

最後に、選び方をまとめます。

状況向いている方法
Googleフォームをすでに使っていて、少量の回答をSlackに流したいGoogleフォーム + Apps Script + Slack Incoming Webhook
ノーコードで複数サービスをつなぎたいZapier、Makeなどの外部自動化
回答一覧、ステータス、Sheets連携、通知条件までまとめたいFORMLOVA
MCPクライアントからSlackやSheetsも含めて運用したいFORMLOVA + Workflow Placeの横断レシピ

GASで自作する方法は、軽く始めるには向いています。

ただし、送信量が増える、営業メールを除外したい、担当者やステータスを管理したい、SlackとSheetsとフォーム回答一覧を同じ運用で扱いたい、という段階になると、通知だけを自作しても足りなくなります。

FORMLOVAでは、フォームを作る前後だけでなく、公開後の回答確認、CSV/Sheets連携、ステータス管理、自動返信、条件付き通知、Workflow Placeのレシピまでを同じ運用の中で扱います。

フォーム回答をSlackに流したいなら、最初の問いは「どう通知するか」で構いません。

でも、実務で最後に残る問いは「誰が、どの回答を、いつ、どの状態まで進めるか」です。

Slack通知は、その問いに答えるための入口として設計してください。

参考情報

次に読む記事

執筆・確認情報

この記事は、FORMLOVAの既存記事、過去インタビュー、Workflow Placeのレシピ設計、SlackとGoogle Apps Scriptの公式ドキュメントを確認して作成しました。

本文中の「よくある複合例」は、実在する特定顧客の事例ではありません。フォーム回答をSlackに流す運用で起きやすい状態をまとめた説明用の例です。

参考文献

  1. Slack: Sending messages using incoming webhooks参照日:
  2. Google Apps Script: Installable triggers参照日:
  3. Google Apps Script: UrlFetchApp参照日:

最終検証日:

この記事をシェア

執筆者

@Lovanaut
@Lovanaut

FORMLOVAの開発者。「ラバ = ラブ」の想いで、優しいサービスを作り続けています。

同じカテゴリの記事