Google Chat Webhookの使い方|作成・カード・スレッド・エラー対策

Google Chatの受信Webhookを作成し、テキスト・カード・スレッド通知を送る方法を解説。URL管理、レート制限、再試行、重複防止、Chatアプリとの違いまで紹介します。

著者: SakuraAI 編集部監修: 湯田英也公開: 最終更新: 11
目次
30秒でわかる結論

Google Chatの受信Webhookは、固定されたスペースへ一方向の通知を送る最小構成です。監視、バッチ、フォーム、定期レポートには向きますが、承認・返信・入力処理には使いません。本番運用では、URLを秘密情報として管理し、イベントID、スレッド、送信キュー、指数バックオフ、重複防止、失敗監視まで用意します。

本記事は2026年6月28日時点のGoogle公式情報をもとにしています。Webhookの利用条件、メッセージ形式、クォータ、管理者設定は変更される可能性があります。実装前に公式ドキュメントと自社のGoogle Workspace設定を確認してください。

Expert Q&A

Webhookを作る前に確認すること

湯田英也SakuraAI株式会社 代表 / ソフトウェアエンジニア

Q. Webhookで最初に自動化するなら何ですか?

A. 結果が明確で、通知先が固定された処理です。バッチ完了、監視アラート、フォーム受付、日次集計が向いています。承認や問い合わせ対応から始めない方がよいです。

Q. カードに承認ボタンを付ければ承認できますか?

A. Webhookはクリックイベントを受け取れません。確認画面を開くリンクは置けますが、承認で状態を更新するならChatアプリが必要です。表示できることと操作できることを分けます。

Q. Webhook運用で最も多い事故は?

A. URLの漏えいと通知の連打です。URLをログやコードへ残さず、同じスペースへ複数システムが送る場合はキューで流量を制御します。

Google Chatへシステム通知を送りたいだけなら、最初からChatアプリを開発する必要はありません。受信Webhookをスペースへ登録し、発行されたURLへJSONをPOSTすれば通知できます。

仕組みは単純ですが、作成手順だけで本番運用を始めると、URL漏えい、通知重複、429エラー、アラートの大量投稿が起きます。Webhookは簡単に作れるからこそ、止め方と失敗時の扱いを先に決めます。

Google Chat Webhookとは

受信Webhookは、外部サービスから特定のGoogle Chatスペースへ非同期の一方向通知を送る仕組みです。Webhookごとに登録先スペースが決まり、そのURLを使って別のスペースへ投稿することはできません。

観点受信WebhookChatアプリ
通信方向送信元からChatへの一方向ユーザーとアプリの双方向
通知先登録したスペース認証・メンバーシップに応じたスペース
ユーザー入力受け取れないメッセージ、コマンド、カード、ダイアログを受け取れる
認証秘密のWebhook URLアプリ認証またはユーザー認証
準備スペースでWebhookを作成Cloudプロジェクト、Chat API、受信処理など
向く用途通知、アラート、定期報告承認、申請、FAQ、対話、動的操作

WebhookはGoogle Workspace Marketplaceへ公開する仕組みでもありません。組織内で複数の利用者やスペースへ配布する製品にしたい場合は、Chatアプリを検討します。

Webhookが向く用途・向かない用途

Decision chart

受信Webhookの適性

一方向性、通知先の固定度、操作の必要性、失敗時の影響をもとにSakuraAIが整理した用途別スコアです。Google公式の評価ではありません。

バッチ・バックアップ完了通知98/100

結果を固定スペースへ送るだけで完結する

監視アラート95/100

アラートIDでスレッド化し、監視画面へリンクできる

フォーム・問い合わせ受付90/100

受付通知に向くが、担当引受は別の正本で管理する

日次・週次レポート88/100

集約して決まった時間に送信しやすい

Gmailの重要メール通知80/100

本文や個人情報を載せすぎず、元メールへ誘導する

承認・差戻し15/100

クリックイベントを受け取れないためChatアプリが必要

FAQ・問い合わせ対話5/100

ユーザーのメッセージへ応答できない

Webhookは通知専用と割り切り、操作が必要になったらChatアプリへ切り替えます。

Webhookの作成手順

Google公式の手順では、ブラウザ版Google Chatから設定します。

  1. 通知先のスペースを開く
  2. スペース名のメニューからアプリとインテグレーションを開く
  3. Webhookを追加する
  4. 用途が分かる名前とアイコンを設定する
  5. 発行されたWebhook URLをシークレット管理へ保存する

Webhookを追加する項目が表示されない場合は、組織で受信Webhookの利用が許可されているか、管理者へ確認します。モバイルアプリからはWebhookを構成できません。

Webhook名を通知Botやシステム通知だけにせず、監視_本番、フォーム_採用受付のように送信元と用途が分かる名前にします。漏えい・停止時に影響範囲を特定しやすくなります。

テキストメッセージを送る

最小の通知は、text を持つJSONをPOSTします。

curl -X POST "$GOOGLE_CHAT_WEBHOOK_URL" \
  -H "Content-Type: application/json; charset=UTF-8" \
  -d '{"text":"[INFO] 日次処理が完了しました"}'

GOOGLE_CHAT_WEBHOOK_URL はシークレット管理から実行時に渡します。コマンド履歴、CIログ、エラー出力へURLそのものを表示しないようにします。

通知文に入れる7項目

項目目的
種別INFO / WARNING / ERROR優先度を判断する
イベントIDJOB-20260628-001重複防止と追跡に使う
発生元日次集計、監視、フォームなどどのシステムか分かる
要点何が起きたか一読で状況を把握する
状態成功、要確認、失敗次の行動を判断する
担当・期限誰がいつまでに見るか投稿だけで放置しない
正本リンク監視、台帳、元データChatを正本にしない

通知にシステムのログ全文を貼る必要はありません。エラーの要点と追跡IDを載せ、権限を設定した監視画面やログへリンクします。

カード形式は情報整理とリンクに使う

カード形式を使うと、見出し、項目、画像、ボタンを構造化できます。Webhookは一方向なので、ボタンは外部ページを開くリンクとして使います。

{
  "cardsV2": [
    {
      "cardId": "monitoring-alert",
      "card": {
        "header": {
          "title": "監視アラート",
          "subtitle": "ALERT-2048"
        },
        "sections": [
          {
            "widgets": [
              {
                "decoratedText": {
                  "topLabel": "状態",
                  "text": "要確認"
                }
              },
              {
                "buttonList": {
                  "buttons": [
                    {
                      "text": "監視画面を開く",
                      "onClick": {
                        "openLink": {
                          "url": "https://example.com/alerts/2048"
                        }
                      }
                    }
                  ]
                }
              }
            ]
          }
        ]
      }
    }
  ]
}

カードに承認や完了という表示を置いても、Webhookはクリック結果を受信できません。外部画面を開くリンクは使えますが、Chat内の操作で状態を更新する場合はChatアプリを作ります。

システム_監視通知
Monitoring Webhook21:05
[WARNING] 応答時間を確認してください イベントID: ALERT-2048 対象: APIサービス 状態: しきい値超過 担当: オンコール 正本: 監視画面リンク
Webhookのカードボタンは外部画面へのリンクに限定し、状態変更は正本側で行う例

threadKeyで同じ案件をまとめる

受信Webhookは、thread.threadKeymessageReplyOption を使ってスレッドを開始・返信できます。同じ障害、案件、バッチ実行を1つのスレッドへまとめると、スペースの流量を減らせます。

{
  "text": "ALERT-2048: 応答時間が正常範囲へ戻りました",
  "thread": {
    "threadKey": "alert-2048"
  }
}

Webhook URL側の messageReplyOption は、スレッドがない場合に新規作成するか、送信を失敗させるかを制御します。

設定動作向く用途
REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD既存スレッドへ返信し、なければ新規作成障害・案件の最初の通知と更新
REPLY_MESSAGE_OR_FAIL既存スレッドへ返信し、なければ送信しない初回通知後だけ更新を許可したい処理

threadKey は通知文から毎回生成せず、アラートIDや案件IDから安定して作ります。キーが変わると、同じ事象が別スレッドへ分かれます。

Apps Scriptから送信する

Apps Scriptは、Gmail、Googleフォーム、スプレッドシート、Calendarなどを起点にWebhookへPOSTする実行基盤として使えます。

function notifyChat(message) {
  const url = PropertiesService.getScriptProperties()
    .getProperty("GOOGLE_CHAT_WEBHOOK_URL");

  const response = UrlFetchApp.fetch(url, {
    method: "post",
    contentType: "application/json; charset=UTF-8",
    payload: JSON.stringify({ text: message }),
    muteHttpExceptions: true,
  });

  const status = response.getResponseCode();
  if (status < 200 || status >= 300) {
    throw new Error(`Google Chat webhook failed: HTTP ${status}`);
  }
}

スクリプトプロパティはコード直書きより安全ですが、誰がプロジェクトとプロパティを閲覧・編集できるかも確認します。実行ログへURLや通知本文を不用意に出力しません。

URLを秘密情報として管理する

Webhook URLには keytoken が含まれます。パスワードと同じように扱います。

管理項目決めること
所有者どの部署・担当者が管理するか
用途どの送信元が何を投稿するか
通知先登録先スペースとメンバー
保存場所環境変数、シークレット管理、Script Propertiesなど
利用システムどのジョブ・サービスが参照するか
発行・更新日いつ作成・交換したか
停止手順漏えい・廃止時に誰が削除するか

Webhook URLを1本だけ作り、すべてのシステムで共有すると、漏えい時に影響元を特定できません。用途や送信元ごとに分けると、個別に停止できます。

レート制限と送信キュー

2026年6月28日時点のGoogle公式情報では、同じスペースへのメッセージ書き込みは原則1秒あたり1回で、受信Webhookには追加制限も適用されます。複数Webhookの送信量は同じスペースで共有されます。

発生状況設計
短時間に大量イベントキューで順番に送り、同種イベントを集約する
429 Too Many Requests指数バックオフとランダムな待ち時間で再試行
ネットワーク・500系上限つきで再試行し、最終失敗を保存
400系自動再試行せず、ペイロードを修正
Webhook・スペース削除停止扱いにし、管理者へ通知

すべてのイベントを即時に1件ずつ送るのではなく、緊急アラートは即時、定期結果は集約、回復通知は同じスレッドというように分けます。

再試行で重複投稿しない設計

送信元がタイムアウトした場合、Chat側では投稿済みでも、送信元は失敗と判断することがあります。無条件に再送すると同じ通知が増えます。

項目内容
イベントID元システムで一意のIDを発行する
送信状態未送信、送信中、成功、再試行、失敗を記録する
試行回数無限再試行を防ぐ
最終HTTPコード原因分析に使う
threadKey同じ案件の更新先を固定する
送信日時遅延と再処理を確認する

Webhookのレスポンスにはメッセージ全体が含まれず、namethread.name が中心です。Webhookだけを正本にせず、送信元側にイベントと状態を残します。

通知疲れを防ぐルール

通知推奨する扱い
緊急障害即時通知し、同じ障害はスレッドへ集約
警告一定時間継続した場合やしきい値超過回数で通知
成功重要ジョブだけ、または日次集約
件数レポート決まった時刻に1投稿へまとめる
個人だけが対応する内容広いスペースではなく正本や適切な通知先へ

成功通知をすべて流すと、本当に見るべき失敗が埋もれます。通知件数ではなく、未対応、確認時間、誤通知を測ります。

WebhookからChatアプリへ移る基準

次の要件が出たら、Webhookへ機能を足すのではなくChatアプリを検討します。

  • ユーザーのメッセージやメンションへ応答したい
  • ボタンで担当引受、承認、差戻しを処理したい
  • ダイアログで入力を受け付けたい
  • 利用者ごとに権限を変えたい
  • 動的に複数スペースやDMへ送信したい
  • メッセージの更新・削除やメンバー管理が必要

Webhook・Chat API・Chatアプリ・Apps Scriptの全体像はGoogle Chat APIとは、対話型の設計はGoogle Chat Bot開発の設計パターンで解説しています。

導入手順

1. 通知専用でよいか確認する

ユーザー操作を受け取らず、通知先が固定スペースであることを確認します。承認や対話が必要ならChatアプリを選びます。

2. テスト用Webhookで送信する

本番スペースへ直接作らず、テストスペースでテキスト、カード、エラーを確認します。URLは最初からシークレット管理へ置きます。

3. イベントIDとメッセージ形式を決める

種別、イベントID、発生元、要点、状態、担当、期限、正本リンクを固定します。同じ事象をまとめるならthreadKeyも決めます。

4. キュー・再試行・重複防止を作る

429と一時障害は指数バックオフ、400系は停止、最終失敗は失敗キューへ残します。再送前にイベントIDの処理状態を確認します。

5. 漏えい・廃止時の停止手順を試す

Webhook削除、シークレット更新、送信元停止、スペース変更の手順を確認します。所有者不明のWebhookを作りません。

6. 指標を見て運用する

評価項目見る内容
配信成功率2xxで完了した通知の割合
通知遅延元イベントからChat投稿までの時間
429・再試行制限超過と回復状況
重複投稿同じイベントIDが複数投稿された件数
最終失敗再試行後も送れなかった件数
通知量スペース・種別・送信元ごとの件数
未対応要対応通知の担当・状態が変わらない件数
不要Webhook送信元や所有者が不明なWebhook

よくある失敗

失敗起きること回避策
Webhookで承認を実装するクリック結果を受信できないChatアプリを使う
URLをコード・ログへ残す第三者に投稿される可能性があるシークレット管理とログ除外
全システムでURLを共有する漏えい元と影響範囲を特定できない用途・送信元ごとに分ける
大量通知を直接POSTする429と通知の連打が起きるキュー、集約、スレッドを使う
即時に連続再試行する制限超過を悪化させる指数バックオフと上限を設ける
タイムアウトを無条件再送する同じ通知が重複するイベントIDと送信状態を持つ
成功通知を全部流す重要な警告が埋もれる重要度と集約ルールを決める

SakuraAIで支援できること

SakuraAIは、Google Chat Webhookの作成だけでなく、通知対象、メッセージ、スレッド、送信キュー、再試行、重複防止、シークレット管理、監視、停止手順まで設計します。

通知だけならWebhookで小さく始め、ユーザー操作や動的な権限が必要になった時点でChatアプリとChat APIへ移行します。Apps Script、既存システム、Cloud実行環境も要件に合わせて選びます。

Q. Webhook導入が成功した状態とは?

A. 通知が届くだけでなく、重複せず、重要なものが埋もれず、担当者が正本へ移って対応でき、失敗時に再処理できる状態です。投稿件数の多さは成功指標ではありません。

Q. 1つのスペースへWebhookはいくつ作りますか?

A. 最低でも用途や送信元を識別できる単位に分けます。すべてを1本にすると漏えい時に全連携を止めることになります。ただし増やしすぎず、所有者と利用先を台帳で管理します。

Q. 本番前に最低限試すことは?

A. 正しい投稿、400、429、ネットワーク失敗、同一イベント再送、Webhook削除です。スレッドを使う場合は、既存キーと存在しないキーの動作も確認します。

よくある質問

Google ChatのWebhook作成に管理者権限は必要ですか?

Webhookを追加できるかは、Google Workspaceの管理者設定とスペースでの権限によります。アプリとインテグレーションにWebhook追加が表示されない場合は、組織の管理者へ利用可否を確認してください。

Webhookでボタン付きカードを送れますか?

カード形式のメッセージやリンクを開くボタンは送れます。ただしWebhookは一方向なので、ボタンクリックを接続先アプリへ返して状態を変更する承認処理はできません。双方向操作にはChatアプリを使います。

Webhookで同じ案件をスレッドにまとめられますか?

できます。メッセージ本文にthreadKeyを指定し、Webhook URLにmessageReplyOptionを設定すると、既存スレッドへ返信するか、新しいスレッドを開始するかを制御できます。案件IDやアラートIDを安定したthreadKeyとして使います。

Webhook URLが漏れた場合はどうしますか?

該当Webhookを削除・再作成し、送信元のシークレットを更新します。URLには秘密のkeyとtokenが含まれるため、公開リポジトリ、ログ、エラーメール、Chat本文へ貼らないでください。

Webhookの通知が多い場合はどうすればよいですか?

同じスペースへの書き込み制限を考慮し、送信キュー、日次集約、スレッド化、重要度による通知先の分離を行います。429が返った場合は即時連打せず、指数バックオフで再試行します。

参考・一次情報

湯田英也

Reviewed by

監修者: 湯田英也

SakuraAI株式会社 代表 / ソフトウェアエンジニア

Google Chatの導入・移行、Google Workspace連携、Google Chat API / Webhook / Bot、Gmail・Meet・Drive・Calendarをまたぐ業務自動化領域を監修しています。

Google公式情報、各プロダクトの仕様、実務での運用・開発観点をもとに、企業が導入判断・運用設計・自動化設計を行える内容になるよう確認しています。

開発相談

Google Chat Bot・Webhook開発を相談する

通知・承認・問い合わせ連携のBotとAPI実装を支援します。

開発を相談する