メッセンジャーボットを使った通知の自動化は、開発ワークフローをより速く、より効率的にします。ビルドの完了、エラーの発生、デプロイの完了など、重要なイベントをリアルタイムで受け取れます。このガイドでは、主要なメッセージングプラットフォームでwebhookを使った自動通知ボットの設定方法を解説します。CI/CDの結果、サーバーアラート、バッチ処理の完了をチームに知らせたい場合に役立ちます。ここでは、ボット連携が簡単なプラットフォームのみを取り上げます。プライバシーを重視するセキュアなメッセンジャーは自動化に対応していないため、別途まとめています。
目次
webhookベースのボット自動化を理解する
webhookベースのボットの仕組みはシンプルです。アプリケーションが特定のURLにHTTP POSTリクエストを送ると、メッセージングプラットフォームがそのコンテンツをチャンネルやユーザーに届けます。
このアプローチはさまざまな自動化タスクに活用できます。
- ビルド通知 - ビルドの成功・失敗をエラー詳細とともに通知
- デプロイ更新 - コードがステージングや本番環境に反映された際にチームへ通知
- 監視アラート - サーバーの異常やダウンタイムを即時通知
- 定期レポート - 日次メトリクスやステータスサマリーを自動配信
基本的なフローは3ステップです。
- 対象プラットフォームでボットまたはwebhook URLを作成する
- CI/CD、監視システム、またはカスタムスクリプトからHTTPリクエストを送信するよう設定する
- プラットフォームの仕様に合わせてメッセージのペイロードを整形する
プラットフォームを選ぶ際は、セキュリティ機能も重要な判断基準になります。各プラットフォームのセキュリティについて詳しくは、2026年版 メッセンジャー完全ガイドをご覧ください。
メッセンジャーボット連携ガイド
以下は、webhookベースのボット連携を簡単に設定できる各プラットフォームのステップバイステップガイドです。
Discord webhookボット
Discordはwebhookの設定が最もシンプルなプラットフォームの一つです。基本的なメッセージ送信にはボットアプリケーションや認証トークンは不要です。
設定手順
- サーバー設定を開く - サーバー名を右クリックして「サーバー設定」を選択
- 連携サービスに移動 - 左サイドバーの「連携サービス」をクリック
- webhookを作成 - 「ウェブフック」をクリックし、「新しいウェブフック」を選択
- webhookを設定 - 名前(例: "Build Bot")を入力し、チャンネルを選択。必要に応じてアバターも設定可能
- webhook URLをコピー - 「ウェブフックURLをコピー」をクリックし、安全な場所に保存
webhookを使ったメッセージ送信
curl -X POST -H "Content-Type: application/json" \
-d '{"content": "✅ Build completed successfully!\n\nProject: MyApp\nBranch: main\nDuration: 3m 42s"}' \
https://discord.com/api/webhooks/YOUR_WEBHOOK_ID/YOUR_WEBHOOK_TOKEN
エラー通知用のリッチ埋め込み例
curl -X POST -H "Content-Type: application/json" \
-d '{
"embeds": [{
"title": "❌ Build Failed",
"color": 15158332,
"fields": [
{"name": "Project", "value": "MyApp", "inline": true},
{"name": "Branch", "value": "feature/login", "inline": true},
{"name": "Error", "value": "```TypeError: Cannot read property of undefined```"}
],
"timestamp": "2026-01-15T10:30:00.000Z"
}]
}' \
YOUR_WEBHOOK_URL
公式ドキュメント: Discord webhookドキュメント
Slack webhookボット
SlackはSlackアプリのシステムを通じてIncoming Webhooksを提供しています。リッチなメッセージフォーマットや柔軟なチャンネル指定に対応しています。
設定手順
- Slackアプリを作成 - api.slack.com/appsにアクセスし、「新しいアプリを作成」をクリック
- 作成方法を選択 - 「ゼロから作成」を選び、アプリ名(例: "CI/CD Notifications")を入力
- Incoming Webhooksを有効化 - サイドバーの「Incoming Webhooks」に移動し、トグルをオンに切り替え
- ワークスペースにwebhookを追加 - 「ワークスペースに新しいwebhookを追加」をクリック
- チャンネルを選択 - 通知を送るチャンネルを選択し、「許可する」をクリック
- webhook URLをコピー - 発行された固有のwebhook URLをコピー
webhookを使ったメッセージ送信
curl -X POST -H "Content-Type: application/json" \
-d '{"text": "✅ Deployment to production completed successfully!"}' \
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXX
詳細通知用のBlock Kitメッセージ
curl -X POST -H "Content-Type: application/json" \
-d '{
"blocks": [
{
"type": "header",
"text": {"type": "plain_text", "text": "🚨 Build Failed"}
},
{
"type": "section",
"fields": [
{"type": "mrkdwn", "text": "*Project:*\nMyApp"},
{"type": "mrkdwn", "text": "*Branch:*\nmain"},
{"type": "mrkdwn", "text": "*Error:*\n`Module not found`"}
]
}
]
}' \
YOUR_WEBHOOK_URL
公式ドキュメント: Slack Incoming Webhooksガイド
Microsoft Teams webhookボット
Microsoft Teamsはコネクターシステムを通じてチャンネルへのIncoming Webhooksをサポートしています。
設定手順
- チャンネル設定を開く - 対象チャンネルのチャンネル名横にある3点メニュー(•••)をクリック
- コネクターを選択 - 「コネクター」をクリック(新しいバージョンでは「チャンネルを管理」から「コネクター」を選択)
- Incoming Webhookを検索 - 「Incoming Webhook」を検索し、「構成」をクリック
- webhookに名前を付ける - 名前(例: "Build Alerts")を入力し、必要に応じて画像をアップロード
- 作成してURLをコピー - 「作成」をクリックし、webhook URLをコピー
webhookを使ったメッセージ送信
curl -X POST -H "Content-Type: application/json" \
-d '{"text": "✅ Build #1234 completed successfully on main branch"}' \
YOUR_TEAMS_WEBHOOK_URL
リッチ通知用のAdaptive Card
curl -X POST -H "Content-Type: application/json" \
-d '{
"type": "message",
"attachments": [{
"contentType": "application/vnd.microsoft.card.adaptive",
"content": {
"type": "AdaptiveCard",
"version": "1.2",
"body": [
{"type": "TextBlock", "size": "Large", "weight": "Bolder", "text": "❌ Build Failed"},
{"type": "FactSet", "facts": [
{"title": "Project:", "value": "MyApp"},
{"title": "Error:", "value": "Compilation failed"}
]}
]
}
}]
}' \
YOUR_TEAMS_WEBHOOK_URL
公式ドキュメント: Microsoft Teams Incoming Webhooks
Telegramボット
Telegramはプログラムからメッセージを送信できる強力なBot APIを提供しています。webhook URLではなく、TelegramのAPIに直接リクエストを送る方式です。
設定手順
- BotFatherでボットを作成 - Telegramを開き、
@BotFatherを検索 - 新しいボットを開始 -
/newbotコマンドを送信 - ボットに名前を付ける - 表示名とユーザー名(末尾が「bot」である必要あり)を設定
- APIトークンを保存 - BotFatherから
123456789:ABCdefGHIjklMNOpqrsTUVwxyz形式のトークンが発行される - チャットIDを取得 - ボットをグループまたはチャンネルに追加してメッセージを送信後、
https://api.telegram.org/bot<TOKEN>/getUpdatesにアクセスしてチャットIDを確認
Bot APIを使ったメッセージ送信
curl -X POST \
"https://api.telegram.org/bot/sendMessage" \
-d "chat_id=" \
-d "text=✅ Build completed successfully!%0A%0AProject: MyApp%0ABranch: main" \
-d "parse_mode=HTML"
HTMLを使ったフォーマット済みメッセージ
curl -X POST \
"https://api.telegram.org/bot/sendMessage" \
-H "Content-Type: application/json" \
-d '{
"chat_id": "",
"text": "❌ Build Failed\n\nProject: MyApp\nBranch: main\nError: Module not found",
"parse_mode": "HTML"
}'
公式ドキュメント: Telegram Bot API
Mattermost webhookボット
MattermostはSlackのオープンソース代替として知られ、強力なwebhookサポートを備えています。セルフホスト型のチームコミュニケーションに適しています。
設定手順
- 連携設定にアクセス - ハンバーガーメニューをクリックし、「連携設定」を選択
- Incoming Webhookを作成 - 「Incoming Webhooks」を選択し、「Incoming Webhookを追加」をクリック
- webhookを設定 - タイトル、説明、デフォルトチャンネルを入力
- 保存してURLをコピー - 「保存」をクリックし、webhook URLをコピー
webhookを使ったメッセージ送信
curl -X POST -H "Content-Type: application/json" \
-d '{"text": "✅ Build completed successfully!"}' \
https://your-mattermost-server.com/hooks/YOUR_WEBHOOK_ID
リッチ添付メッセージ
curl -X POST -H "Content-Type: application/json" \
-d '{
"attachments": [{
"fallback": "Build Failed",
"color": "#FF0000",
"title": "❌ Build Failed",
"fields": [
{"short": true, "title": "Project", "value": "MyApp"},
{"short": true, "title": "Branch", "value": "main"},
{"short": false, "title": "Error", "value": "```Module not found```"}
]
}]
}' \
YOUR_WEBHOOK_URL
公式ドキュメント: Mattermost Incoming Webhooks
Matrix/Elementボット
Matrixは分散型通信のオープンプロトコルです。Elementはその最も人気のあるクライアントです。ボットを連携するにはMatrix Client-Server APIを使用します。
設定手順
- ボットアカウントを作成 - 自分のホームサーバーまたはmatrix.orgでボット用の新しいMatrixアカウントを登録
- アクセストークンを取得 - ログイン後、Elementの「設定」-「ヘルプと情報」-「詳細設定」-「アクセストークン」から確認
- ルームIDを取得 - ボットを対象ルームに参加させ、「ルーム設定」-「詳細設定」でルームIDを確認
- ボットをルームに招待 - メッセージを送信するルームにボットアカウントが参加していることを確認
Matrix APIを使ったメッセージ送信
curl -X PUT \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"msgtype": "m.text", "body": "✅ Build completed successfully!"}' \
"https://matrix.org/_matrix/client/r0/rooms/YOUR_ROOM_ID/send/m.room.message/$(date +%s)"
HTMLを使ったフォーマット済みメッセージ
curl -X PUT \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "m.text",
"body": "Build Failed\nProject: MyApp\nError: Module not found",
"format": "org.matrix.custom.html",
"formatted_body": "❌ Build Failed
Project: MyApp
Error: Module not found
"
}' \
"https://matrix.org/_matrix/client/r0/rooms/YOUR_ROOM_ID/send/m.room.message/$(date +%s)"
ヒント: Matrixボットの開発をより簡単にするには、matrix-nio(Python)やmatrix-bot-sdk(JavaScript)などのライブラリの利用をおすすめします。
公式ドキュメント: Matrix Client-Server API仕様
WhatsApp Businessボット
WhatsAppは自動メッセージ送信のためのBusiness APIを提供しています。ビジネス認証が必要で、他のプラットフォームと比べて設定がやや複雑です。
設定手順
- Metaビジネスアカウントを作成 - business.facebook.comにアクセスし、ビジネスアカウントを作成
- WhatsApp Businessを設定 - developers.facebook.comでアプリを作成し、WhatsApp製品を追加
- 電話番号を設定 - ボット用の電話番号を追加(開発用のテスト番号も利用可能)
- アクセストークンを取得 - アプリのダッシュボードから永続的なアクセストークンを生成
- ビジネス認証を完了 - 本番運用前にビジネス認証を完了させる
Cloud APIを使ったメッセージ送信
curl -X POST \
"https://graph.facebook.com/v17.0/YOUR_PHONE_NUMBER_ID/messages" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"messaging_product": "whatsapp",
"to": "RECIPIENT_PHONE_NUMBER",
"type": "text",
"text": {"body": "✅ Build completed successfully!"}
}'
重要: WhatsAppではユーザーとの会話を開始する際にメッセージテンプレートが必要です。自由形式のメッセージはユーザーからの操作後24時間以内のみ送信可能です。自動通知には、事前にメッセージテンプレートを作成して承認を受けておく必要があります。
公式ドキュメント: WhatsApp Cloud APIドキュメント
Facebook Messengerボット
Facebook MessengerのボットにはFacebookアプリとページが必要です。メッセージはSend APIを通じて送信します。
設定手順
- Facebookアプリを作成 - developers.facebook.comで新しいアプリを作成(「ビジネス」タイプを選択)
- Messenger製品を追加 - アプリのダッシュボードで「製品を追加」をクリックし、Messengerを選択
- Facebookページを連携 - アプリにFacebookページをリンク(必要に応じて新規作成)
- ページアクセストークンを生成 - Messenger設定でページ用のトークンを生成
- PSIDを取得 - ユーザーが最初にページにメッセージを送った際、webhookイベントからPage-Scoped ID(PSID)を取得
Send APIを使ったメッセージ送信
curl -X POST \
"https://graph.facebook.com/v17.0/me/messages" \
-H "Content-Type: application/json" \
-d '{
"recipient": {"id": "USER_PSID"},
"message": {"text": "✅ Build completed successfully!"},
"access_token": "YOUR_PAGE_ACCESS_TOKEN"
}'
注意: Facebook Messengerには自動メッセージ送信に関する厳格なルールがあります。プロモーション目的のメッセージはユーザーの操作後24時間以内のみ送信可能です。この時間枠を超えた通知には、特定のメッセージタグの申請または1回限りの通知機能の利用が必要です。
公式ドキュメント: Facebook Messengerプラットフォームドキュメント
ボット連携が難しいメッセンジャー
以下のメッセンジャーはプライバシーとセキュリティを最優先に設計されているため、webhookベースのボット連携が難しいか、実用的ではありません。
- Signal - 公式のボットAPIなし。エンドツーエンド暗号化を重視しており、セキュリティを低下させる可能性のある自動化機能は意図的に排除されています。
- Session - ボットインフラを持たない分散型メッセンジャー。オニオンルーティング設計により、自動メッセージ送信は実用的ではありません。
- Briar - 活動家やジャーナリスト向けに設計されたP2Pメッセンジャー。サーバーインフラがないためwebhookは非対応です。
- Wire - エンタープライズ向けのAPI機能はありますが、自動通知向けのシンプルなwebhookシステムはありません。
- Wickr - エンタープライズ向けで公開ボットAPIなし。自動化にはカスタム連携を含むWickr Enterpriseが必要です。
- SimpleX - ユーザー識別子を持たない設計のため、ボット連携はアーキテクチャ上対応していません。
- Threema - ビジネス向けのThreema Gatewayを提供していますが、契約が必要な有料サービスであり、シンプルなwebhook設定とは異なります。
- Viber - ボットAPIはありますが、ビジネスアカウントの審査が必要で、開発者向け通知よりもカスタマーサービス用途向けに設計されています。
- LINE - Messaging APIを提供していますが、ビジネスアカウントの認証が必要で、シンプルな通知用途には複雑すぎます。
- WeChat - 公式アカウントAPIはありますが、中国でのビジネス登録と政府承認が必要です。
これらのプラットフォームをセキュアな通信に使いたい場合は、自動化用にサポート対象のプラットフォームと組み合わせて利用することをおすすめします。プライベートメッセージを本当に安全に保つ方法については、セキュアなメッセージングガイドもご参照ください。
実装例
以下は、複数のプラットフォームに同時にビルド通知を送信するNode.jsの完全な実装例です。
const axios = require('axios');
const notifiers = {
discord: async (message, webhookUrl) => {
await axios.post(webhookUrl, { content: message });
},
slack: async (message, webhookUrl) => {
await axios.post(webhookUrl, { text: message });
},
telegram: async (message, token, chatId) => {
await axios.post(`https://api.telegram.org/bot${token}/sendMessage`, {
chat_id: chatId,
text: message,
parse_mode: 'HTML'
});
},
teams: async (message, webhookUrl) => {
await axios.post(webhookUrl, { text: message });
}
};
async function notifyBuildResult(success, project, branch, error = null) {
const emoji = success ? '✅' : '❌';
const status = success ? 'succeeded' : 'failed';
let message = `${emoji} Build ${status}\n\nProject: ${project}\nBranch: ${branch}`;
if (error) message += `\nError: ${error}`;
const notifications = [
notifiers.discord(message, process.env.DISCORD_WEBHOOK),
notifiers.slack(message, process.env.SLACK_WEBHOOK),
notifiers.telegram(message, process.env.TELEGRAM_TOKEN, process.env.TELEGRAM_CHAT_ID),
notifiers.teams(message, process.env.TEAMS_WEBHOOK)
];
await Promise.allSettled(notifications);
}
// CI/CDパイプラインでの使用例
notifyBuildResult(false, 'MyApp', 'main', 'Module not found: @utils/helper');
まとめのポイント:
- Discord、Slack、MattermostはURLを作成するだけで使えるため、設定が最もシンプル
- TelegramはボットトークンとチャットIDが必要だが、信頼性が高くフォーマットも豊富
- Microsoft TeamsはAdaptive Cardでリッチな通知が可能
- Matrix/Elementは設定に手間がかかるが、セルフホスト環境に最適
- WhatsAppとFacebook Messengerはメッセージポリシーが厳格
- プライバシー重視のメッセンジャーはユーザーのセキュリティ保護のため、設計上ボットAPIを持たない
まとめ
各メッセンジャープラットフォームにwebhookベースのボット通知を設定することで、開発ワークフローに強力な自動化をもたらします。DiscordとSlackはシンプルなwebhook URLだけで始められるため最も手軽です。Telegramは信頼性が高く設定も簡単です。エンタープライズチームにはMicrosoft TeamsやMattermostが既存ツールとうまく連携します。Matrixはフル API アクセスを備えたセルフホスト・プライバシー重視の選択肢として優れています。
まずは1つのプラットフォームから始めましょう。通知ワークフローをテストして、必要に応じてチャンネルを追加していけます。上記のコード例はすぐに動作します。次のステップは、選んだプラットフォームでwebhookを作成して最初の自動メッセージを送ることです。10分もあれば完了します。
よくある質問
Discordが最も簡単です。チャンネル設定でwebhookを作成するだけで、すぐにPOSTリクエストを送れるURLが発行されます。トークン不要、アプリ作成不要、認証不要です。Slackも簡単ですが、事前にSlackアプリを作成する必要があります。
できません。Signal、Session、Briar、SimpleXといったプライバシー重視のメッセンジャーはボットAPIを持ちません。これはユーザーのプライバシーを守るための意図的な設計です。これらのプラットフォームはエンドツーエンド暗号化と最小限のデータ収集を重視しており、自動メッセージ送信とは相性がよくありません。通知にはサポート対象のプラットフォームを使い、プライベートな会話にはセキュアなメッセンジャーを使い分けることをおすすめします。
はい、webhook URLはパスワードと同様に扱ってください。URLを知っている人は誰でもチャンネルにメッセージを送れます。環境変数に保存し、バージョン管理システムにはコミットせず、漏洩した場合は再発行してください。Slackなど一部のプラットフォームでは、必要に応じて新しいwebhook URLを発行できます。
webhookは一方向です。URLにメッセージを送ると、チャンネルに表示されます。ボットAPIは双方向です。メッセージを送るだけでなく、ユーザーからのメッセージを受信して返信することもできます。ビルドアラートや監視のようなシンプルな通知にはwebhookで十分です。ユーザーのコマンドに応答するボットには、サーバー側にwebhookエンドポイントを持つフルボットAPIが必要です。
ほとんどのプラットフォームにはレート制限があります。Discordはwebhookあたり1分間に30メッセージまで、Slackも同様の制限があります。リトライにはエクスポネンシャルバックオフを使ったメッセージキューイングを実装してください。大量の通知が発生する場合は、複数のイベントを1つのメッセージにまとめるか、プラットフォームが提供するバルクAPIを活用してください。