Google Chat と Slack に通知(フィルター付き)を送る Webhook テストシステムの構築
この記事はZennでも公開しています。
Google Chat と Slack に通知(フィルター付き)を送る Webhook テストテストシステムの構築
はじめに
この記事では、システム(テスト用に WebGUI+Node サーバ)から発生したメッセージを Webhook 経由で Google Chat と Slack に送り、内容によって投稿先チャネルを自動で振り分けるシステムの構築方法を紹介します。 ※Google Chat は Webhook 生成できなかったため、Slack でのみ検証した。
システムの概要
- Node.js: Webhook サーバー(メッセージ受信&Google Apps Script Bot へ転送)
- Google Apps Script: Google Chat Bot(受信した内容でチャネルを振り分けて投稿)
- Google Spreadsheet: フィルタールールの管理
- Slack: 通知用チャネル
システム構成図
graph TD
A[WebGUI] -->|WebSocket| B[Node.js Webhook Server]
B -->|POST| C[Google Apps Script Bot]
C -->|フィルタールール参照| D[Google Spreadsheet]
C -->|通知送信| E[Google Chat]
C -->|通知送信| F[Slack]
subgraph フィルタールール管理
D -->|正規表現パターン| G[チャネル振り分け]
D -->|Webhook URL| H[通知先設定]
end
subgraph 通知先
E -->|エラー通知| I[エラーチャネル]
E -->|通常通知| J[通常チャネル]
F -->|エラー通知| K[エラーチャネル]
F -->|通常通知| L[通常チャネル]
end
1. チャットサービスの設定
Google Chat のチャネル作成
※ Google Workspace の有料ユーザーのみ利用可能
- Google Chat にアクセス
- 左側の「+」ボタンから「スペースを作成」
- スペース名(例:エラー通知、通常通知)を入力
- 「作成」をクリック
- スペースを開き、「Webhook を追加」で Webhook URL を発行
Slack のチャネル設定
- Slack ワークスペースにログイン
- 通知を送信したいチャネルを作成または選択
- チャネル名の横の「…」→「チャネルの詳細を表示」
- 「アプリを追加する」→「Incoming Webhooks」をインストール
- 「Incoming Webhooks を追加」→「Webhook URL の追加」
- 生成された Webhook URL をコピー
2. Node.js サーバーの構築
必要なパッケージのインストール
1
npm install express dotenv ws
サーバーコードの実装
https://github.com/long-910/GoogleChatFilter/blob/f65c8695f29553f94e60a55e9a47189594ac21da/index.js
WebGUI の実装
https://github.com/long-910/GoogleChatFilter/blob/f65c8695f29553f94e60a55e9a47189594ac21da/public/index.html
環境変数の設定
.env
ファイルを作成:
1
2
BOT_WEBHOOK_URL="<GASのデプロイURL>"
PORT=3000
3. Google Apps Script Bot の実装
スプレッドシートの準備
- 新しい Google Spreadsheet を作成
- 以下の 2 つのシートを作成:
- 「フィルター設定」シート
- A 列: 正規表現パターン
- B 列: チャネル ID
- 「チャネル設定」シート
- A 列: チャネル ID
- B 列: Google Chat Webhook URL
- C 列: Slack Webhook URL
- 「フィルター設定」シート
Apps Script コードの実装
https://github.com/long-910/GoogleChatFilter/blob/08f03338dd9e9dab3916768a2757fa8f4664c7f7/Code.gs
デプロイ手順
- Google Apps Script エディタで「プロジェクトの設定」を開く
- 「スクリプトプロパティ」タブを選択
- 「行を追加」をクリック
- 以下の設定を追加:
- プロパティ名:
SPREADSHEET_ID
- 値: あなたのスプレッドシート ID
- プロパティ名:
- 「デプロイ」→「新しいデプロイ」
- 「種類を選択」で「ウェブアプリ」
- 「次のユーザーとして実行」→「自分」
- 「アクセスできるユーザー」→「全員」
- デプロイして、表示された URL を
.env
のBOT_WEBHOOK_URL
に設定
4. 使い方
Web ページからメッセージを送信
- ブラウザで
http://localhost:3000
にアクセス - テキストエリアにメッセージを入力
- 「送信」ボタンをクリック
API からメッセージを送信
1
2
3
curl -X POST http://localhost:3000/webhook \
-H "Content-Type: application/json" \
-d '{"text": "エラー: サーバーダウン"}'
5. トラブルシューティング
404 エラーが発生する場合
Google Chat Webhook URL の場合:
- Google Workspace の有料ユーザーであることを確認
- Webhook URL が正しく発行されているか確認
- スペースの種類が「チャット」であることを確認
Slack Webhook URL の場合:
- Webhook URL が正しく発行されているか確認
- チャネルが存在するか確認
- アプリの権限が正しく設定されているか確認
Google Apps Script の場合:
- デプロイが正しく行われているか確認
- デプロイ URL が正しいか確認
- アクセス権限が「全員」に設定されているか確認
6. 補足
- Google Apps Script の無料枠ではリクエスト数に制限があります
- Google Chat の Webhook 機能は Google Workspace の有料ユーザーのみ利用可能です
- Slack の Webhook は無料プランでも利用可能です
- スプレッドシートの設定を変更することで、フィルタールールを動的に更新できます
まとめ
このシステムを使用することで、システムからの通知を効率的に管理し、適切なチャネルに振り分けることができます。また、Google Apps Script とスプレッドシートを活用することで、設定の変更も容易に行えます。
参考リンク
This post is licensed under CC BY 4.0 by the author.