2分で読めます
Slack インカミング webhook
Zenovay イベント(トラフィックスパイク、ゴール達成、エラースパイク、ダウンタイム)が発生するたびに Slack メッセージを受け取ります。
このレシピは Slack ネイティブのインカミング webhook機能を使用します。Slack アプリやボットは不要です。
アウトバウンド webhook は Pro+ の機能です。プランをアップグレードして有効にしてください。
1. Slack インカミング webhook を作成する
- Slack でワークスペースを開き、Apps → 「Incoming Webhooks」を検索 → Slack に追加をクリックします。
- Zenovay アラートを受信するチャンネルを選択します(例:
#alertsまたは#growth)。 - Incoming Webhooks インテグレーションを追加をクリックします。
- Slack が Webhook URL を表示します。
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXXのような形式です。コピーしてください。
2. Zenovay に webhook を追加する
app.zenovay.comで Settings → Webhooks に移動します。- 通知を受け取るウェブサイトを選択します。
- Add webhook をクリックします。
- 以下を入力します。
- Name:
Slack #alerts(自分にとってわかりやすい名前) - URL:ステップ 1 の Slack webhook URL を貼り付けます
- Events:受信したいイベントを選択します(Traffic spike、Goal completed、Website down など)
- Name:
- Create webhook をクリックします。
- 新しいカードのテストイベントを送信(紙飛行機アイコン)をクリックします。約 5 秒以内にチャンネルに Slack メッセージが届くはずです。
以上で基本セットアップは完了です。Slack は Zenovay のデフォルトの JSON ペイロードを汎用的な text フィールドとして受け付けます。
3.(オプション)Slack メッセージをきれいにフォーマットする
Slack のインカミング webhook は、ブロック・添付ファイル・Markdown フォーマットを含むより豊かなペイロードに対応しています。Zenovay は汎用的な JSON イベントを送信しますが、Slack はそれをフォールバックの text 値としてレンダリングします。
重要度ごとに色付けされた添付ファイルやブロックレイアウトのきれいな Slack メッセージが必要な場合は、Zenovay と Slack の間に小さなリレーを実行します。
// Cloudflare Workers / any Node-style runtime
export default {
async fetch(req) {
const event = await req.json();
const slackPayload = {
text: `📈 Zenovay event: *${event.event_type}* on ${event.website_id}`,
attachments: [{
color: event.event_type === 'website_down' ? '#dc2626' : '#3b82f6',
fields: [
{ title: 'Event', value: event.event_type, short: true },
{ title: 'Time', value: event.timestamp, short: true },
],
}],
};
await fetch(SLACK_WEBHOOK_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(slackPayload),
});
return new Response('ok');
},
};
Zenovay の webhook URL を Slack に直接ではなく、リレーに向けます。
4. Zenovay の署名を検証する(リレーを使う場合に推奨)
リレーを使用する場合、Zenovay の HMAC-SHA256 署名を検証して、本物の Zenovay イベントのみが Slack に届くようにします。
import { createHmac } from 'crypto';
const signature = req.headers.get('x-zenovay-signature'); // 'sha256=<hex>'
const provided = signature.replace(/^sha256=/, '');
const expected = createHmac('sha256', YOUR_WEBHOOK_SECRET)
.update(rawBody)
.digest('hex');
if (provided !== expected) {
return new Response('invalid signature', { status: 401 });
}
webhook シークレットは Settings → Webhooks → webhook カードの目のアイコンをクリックすると確認できます。
トラブルシューティング
- Slack メッセージが届かない:Zenovay の webhook カードで「Last fired」タイムスタンプを確認してください。空の場合はまだイベントがトリガーされていません。テストイベントを送信をクリックして強制的に送信してください。
- Slack からの
invalid_payload:JSON の形式が Slack の期待するものと一致しなかったため、Slack の webhook が 400 を返しました。ステップ 3 のリレーを使って Slack の期待する形式に変換してください。 - アラートが多すぎる:webhook 設定で
traffic_spikeなどの頻繁なイベントタイプの選択を外してください。重要度の高いものだけを残してください。
関連記事
このページは役に立ちましたか?