Googleフォームの回答をSlackに通知すると、チームで気づきやすくなります。
でも、通知を作ると次に起きるのが重複通知です。
GASを再実行したら同じ通知が出た
トリガーを2つ作っていた
エラー復旧で再送したら二重投稿になった
Slackには流れたが誰も担当していない
この記事では、GoogleフォームのSlack通知を作るときに、重複を防ぐ考え方を整理します。
Slack公式ドキュメントでは、Incoming WebhooksはJSON payloadをWebhook URLへ送ってチャンネルにメッセージを投稿する仕組みとして説明されています。
Googleフォーム側でApps Scriptを使う場合は、フォーム送信トリガーも確認します。
通知は、届いたら終わりではありません。
通知済み状態を残して、対応状況とは分けて管理します。
通知の重複は自然に起きる
Slack通知の重複は、設計が雑だから起きるとは限りません。
実務では自然に起きます。
トリガーを作り直した
手動実行でテストした
処理途中でエラーになった
投稿後にステータス更新だけ失敗した
同じ回答を再処理した
Webhookは投稿できても、「この回答はもう投稿済みか」をSlack側が知っているわけではありません。
その判断は、こちら側の回答レコードに持たせます。
slack_notified_at を持つ
一番シンプルな方法は、回答ごとに slack_notified_at を持つことです。
response_id
submitted_at
status
owner
slack_notified_at
slack_message_url
last_error
通知処理はこう考えます。
if slack_notified_at is empty:
post to Slack
set slack_notified_at
else:
skip posting
これだけで、再実行時の重複をかなり防げます。
可能なら、投稿後のメッセージURLやタイムスタンプも残します。
slack_message_url
slack_channel
slack_posted_by
後から「どの通知のことか」を確認しやすくなります。
通知状態と対応状況を分ける
Slack通知が出たからといって、対応が終わったわけではありません。
ここを混ぜると、対応漏れが起きます。
避けたい考え方です。
Slack通知済み = 対応済み
実際にはこうです。
slack_notified_at: 2026-06-18 10:00
status: new
owner: empty
これは、通知は出たがまだ未対応です。
次の状態になって初めて、対応が進んでいます。
status: assigned
owner: 山田
next_action: 本日中に一次返信
通知は気づくための仕組みです。
対応状況は仕事を進めるための記録です。
エラー時は「未通知」か「不明」を分ける
Slack投稿では、投稿そのものは成功したが、その後の記録更新に失敗することがあります。
このとき単純に再実行すると、二重投稿になるかもしれません。
状態は少し分けます。
slack_notification_state:
pending
sent
failed
unknown
unknown は、投稿できたか確認が必要な状態です。
この状態を作っておくと、機械的に再送せず、人が確認できます。
実務では「失敗したら全部再送」が一番危険です。
Slack本文に入れる情報を絞る
Slack通知に回答全文を入れたくなります。
でも、個人情報や長文が流れすぎると、あとから扱いづらくなります。
最低限にします。
新しい回答が届きました
回答ID: R-20260618-001
カテゴリ: 資料請求
要約: 料金について相談したい
管理URL: ...
Slackには、対応するための入口を置きます。
正本は管理表や回答レコード側です。
最小チェックリスト
GoogleフォームSlack通知を作る前に、これを確認します。
[ ] response_id がある
[ ] slack_notified_at を持つ
[ ] slack_notification_state を持つ
[ ] 投稿後にメッセージURLやチャンネルを残す
[ ] 再実行時は slack_notified_at を見てskipする
[ ] 通知済みと対応済みを混ぜない
[ ] unknown 状態を人が確認できる
[ ] Slack本文に個人情報を入れすぎない
Slack通知は便利です。
ただし、通知を増やすほど、通知済み状態の管理が大事になります。
Googleフォームに限らず、フォーム回答のSlack通知を全件通知から条件付き通知へ切り替えるなら、status、owner、priority、期限を使って通知条件を分けます。
フォーム回答をSlack通知する全体設計は、FORMLOVAの正本記事にまとめています。