
前提条件
- Corgeaの管理者アクセス
- Slackワークスペース内でワークフローを作成する権限
Slackワークフロービルダーの設定
Slack Workflow Builderを使用すると、Corgeaのトップレベルのペイロードフィールドをチャンネルメッセージにマッピングできます。1
ワークフローを作成する
- Slackでワークスペースメニューを開く
- Tools → Workflow Builderを開く
- Createをクリックする
- トリガーとしてWebhookを選択する
- ワークフローに名前を付けて続けます
2
ワークフローステップの設定
- ワークフロービルダーのWebhookURLをコピーする(
hooks.slack.com/triggers/...) - Webhookトリガーのステップで、Corgeaのトップレベルキーと同じ名前の変数を追加します(Slackはペイロードフィールドを自動検出しません)。少なくとも
message、pull_request_id、scan_url、true_positive_count、scan_id、event_type、project_name、status、branch、companyを追加します。 - Send a messageステップを追加します(必須。Corgea単独ではSlackに投稿しません)
- Insert a variableを使用して、Webhookの変数をメッセージに挿入します(
{message}というテキストを直接入力しても動作しません)
scan.completedボディの例です。ネストされたproject、summary、scheduled_scan_idsは含まれません。scan.failedでは、存在する場合にトップレベルのerrorもフラットなボディに含まれます。まず、送信可能な要約としてmessageを使用し、プルリクエストのトリアージ用にpull_request_id、scan_url、true_positive_countを追加します。完了したスキャンのmessageでは、問題の総数ではなく、誤検知でない検出結果の件数が使用されます。
Scan completed for {project} (PR #N): X true-positive finding(s) [(Y with fixes)]. View: {scan_url}
Y with fixesは、その誤検知でない検出結果に対する修正のみを数えます。- ワークフローを完成させて公開する
3
Corgeaで設定
- Integrations → Webhooksに移動する
- 新しいWebhookを作成する
- Typeを
Slackに設定する - 名前を入力し、ワークフロービルダーのURLを貼り付けます
scan.completedおよび/またはscan.failedの購読(オプションでscan.started)- スキャンイベントフィルター (任意):
- プルリクエスト/マージリクエストスキャンのみ — PR以外のスキャンはスキップ
- 誤検知でない検出結果がある完了済みスキャンのみ —
true_positive_countが0の場合はscan.completedをスキップします(scan.failedには影響しません)
- Webhook作成 をクリックして、ワンタイムのシークレットキーを保存します
- Testをクリックして配信を確認する
Webhookテストで想定される結果
Slackワークフロービルダーの送信先で テストWebhook をクリックすると、Corgeaは次のようなフラットサンプルを送信します:companyは実際のスキャンイベントと同じ値です。company_idは従来のテストクライアント向けに用意された同じ値です。Slack以外の送信先では、同じフィールドが通常のエンベロープのdata内にネストされて届きます。
想定される結果:
- SlackからHTTP 2xxが返される(400
invalid_workflow_inputではない) - トップレベルの
message変数をマッピングすると、空でないSlackメッセージが届く - 本番スキャンイベントと同じ変数名を使用できる(テスト時にプルリクエスト番号、スキャンリンク、誤検知でない検出結果の件数をマッピング可能)
通知内容
Slack Workflow Builder(Type = Slack + hooks.slack.com/triggers/...)では、次のトップレベルフィールドをマッピングします。
true_positive_countはスキャンUIのセキュリティ件数と一致し、status=false_positive、hold_reason=false_positive、detected_by=code-qualityを除外します。summary、project、scheduled_scan_ids、scan_errors、created_at、processed_atなどのネストされたフィールドは、Zapier/Otherと配信履歴ではdata内で利用できますが、Slack Workflow Builderではフラット化されません。
互換性に関する注意事項
- Zapier / その他: は依然として入れ子状のエンベロープ(
event_id、event_type、timestamp、data)を受け取ります。これにはdata.message、data.summary、およびdataの下にある新しいトリアージフィールドが含まれます。 - ネストされた
data.*をマッピングしている既存のSlack Workflow Builder設定は動作しません。data.messageではなくmessageなど、トップレベルのキーに再マッピングします。 - Corgeaの配信履歴には、SlackがフラットなHTTPボディを受信する場合でも、ネストされたエンベロープが保存されます。
- Slack Workflow BuilderのWebhookでは、スキャン以外のイベントはフラット化されません。利用可能なSlack変数が必要な場合は、Zapier、Other、またはCustom Bodyを使用してください。
Incoming WebhooksとWorkflow Builderの比較
- 推奨:Workflow BuilderのURL(
hooks.slack.com/triggers/...)とSend a messageステップを使用します。CorgeaはType = Slackに対してscan.*とwebhook.testをフラット化します。 - Incoming Webhooks(
hooks.slack.com/services/...):レンダリング後のJSONに、トップレベルで空でない文字列のtextフィールドが含まれるCustom Bodyを追加しない限り、保存時に拒否されます。Slackのフォールバックテキストとしてtextが必要で、任意でblocksも併用できます。{"text": "{{message}}"}が機能するのは、Webhookをscan.started、scan.completed、scan.failed、scheduled_scan.daily_reportに限定した場合だけです(その他のイベントでは{{message}}が空になります)。有効なボディがないと配信に失敗し、Webhookが自動停止する可能性があります。
既存のSlack統合管理
非推奨のSlack項目に既存の連携がある場合は、View Allを開いてテストまたは削除します。
カスタマイズオプション
ワークフロービルダーを使えば、以下のことが可能です:- メッセージを重大度やプロジェクトごとに異なるチャネルにルーティングする
- リマインダーやフォローアップの手順を追加する
- スキャン結果を中心に条件付き論理を構築する(例:
true_positive_countが0より大きい時のみ通知) - 同じペイロード変数を複数のアクションで再利用する
