Skip to content
Ichnois
docs/slack-webhooks

Slack & Outbound Webhooks

Dispatch real-time incident notification cards to Slack channels or custom outbound webhook endpoints as incidents traverse the dual-gate triage pipeline.

Best-effort, non-blocking alerts: Outbound webhook dispatches run in asynchronous background tasks. A failed or slow webhook response never delays incident triage or blocks developer dashboard actions.

Global Slack Webhook Configuration

Configure your organization-wide Slack webhook URL in your environment. Ichnois dispatches rich Block Kit message cards whenever an incident requires Gate 2 review or is published to GitHub:

.env
1SLACK_WEBHOOK_URL=https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

Per-Project Outbound Webhook Overrides

In microservice fleets, different teams own different services. In the dashboard at Projects → Service Settings, you can configure dedicated outbound overrides per microservice:

  • Slack Channel Override: Route payment incidents to #eng-payments and auth crashes to #team-auth.
  • Custom Webhook URL: Forward triaged incident JSON payloads directly to an internal microservice, custom Discord bot, or incident queue via webhook_url.
Slack Notification Card Dispatch
1# Slack Incoming Webhook Notification Dispatcher
2import httpx
3
4def notify_slack_run(state: RunState, settings: Settings, webhook_url: str | None = None) -> bool:
5 target = webhook_url or (settings.slack_webhook_url.get_secret_value() if settings.slack_webhook_url else None)
6 if not target:
7 return False
8 payload = {
9 "text": f"[{state.severity}] Incident Triaged: {state.incident.exception_type}",
10 "blocks": [
11 {"type": "header", "text": {"type": "plain_text", "text": f"🚨 {state.severity}: {state.incident.exception_type}"}},
12 {"type": "section", "fields": [
13 {"type": "mrkdwn", "text": f"*Service:*
14{state.incident.service}"},
15 {"type": "mrkdwn", "text": f"*Suspect Commit:*
16{state.culprit.commit_sha if state.culprit else 'Unknown'}"},
17 ]}
18 ]
19 }
20 return httpx.post(target, json=payload, timeout=4.0).is_success

Test Your Webhook Connection

Verify connectivity directly from the terminal or using the test button in Dashboard → Settings → Notifications:

Terminal — Test Slack Webhook
1curl -X POST https://ichnoisapi.onrender.com/api/v1/notifications/slack/test \
2 -H "Authorization: Bearer <admin-token>" \
3 -H "Content-Type: application/json" \
4 -d '{"webhook_url": "https://hooks.slack.com/services/..."}'