Notifications & Alerts
Email, Slack, Discord, Teams, webhooks. Per-channel event filters so engineering doesn't see the QA noise. HMAC-signed webhooks.
Notifications & Alerts
AegisRunner can deliver run results, scan completions, and AI-generated tests to email, Slack, Discord, Microsoft Teams, and any HTTPS webhook. Each channel can subscribe to a different mix of events, so your engineering channel doesn't get the same noise as your QA channel.
Channels
| Channel | Setup | Notes |
|---|---|---|
| Just enable. Uses your account email by default; override per project. | Always available, no config required. | |
| Slack | Paste an Incoming Webhook URL. | Block Kit formatting with pass/fail counts and link to run. |
| Discord | Paste a Webhook URL. | Embed format. Color-coded by status. |
| Teams | Paste a Workflow / Incoming Webhook URL. | Adaptive Card format. Note: classic Office 365 connectors retire late 2025. |
| HTTPS Webhook | Your URL + a secret. | HMAC-SHA256-signed JSON payload. Best for piping into your own tools. |
Events
Five events can fire a notification:
| Event | When it fires |
|---|---|
run_completed | Any test run finishes — pass or fail. |
run_failed | A test run fails. Subset of run_completed. |
crawl_completed | A scan finishes (success or failure). |
ai_generated | AI test generation completes for a scan. |
scheduled_runs | A scheduled run completes. |
Per-channel filters
You don't have to send every event to every channel. Each channel can subscribe to a different subset:
- Engineering Slack channel — only
run_failed. Don't ping engineers when everything passes. - QA Slack channel —
run_completed+ai_generated. They want every run plus alerts when new tests are generated to review. - Email (you) —
scheduled_runsonly. Daily digest of overnight schedule outcomes. - Webhook (your dashboard) — everything. Centralized aggregation in your own tooling.
The filter UI is on the Notifications page (sidebar) or per-project under Project Config → Integrations → Notifications.
How filters resolve
The system uses two layers:
- Global event flags — at the top of the settings, you toggle which events you want at all. "Notify on run failed" on; "Notify on crawl completed" off.
- Per-channel overrides — under each enabled channel, you can override individual events. If a channel doesn't override an event, it inherits the global flag.
Storage shape (for the API):
{
"slack": {
"run_completed": false,
"run_failed": true
},
"email": {
"scheduled_runs": true
}
}
Missing keys fall back to the global flag, so you only specify what's different.
Setting up Slack
- In Slack, go to Apps → Manage → Custom Integrations → Incoming Webhooks.
- Add a webhook to the channel you want notifications in. Copy the URL.
- In AegisRunner, open Project → Integrations → Notifications.
- Toggle Slack on, paste the URL, click Test to send a sample message.
- Configure which events route to Slack from the per-channel filter.
Setting up Discord
- In Discord, open the channel settings → Integrations → Webhooks → New Webhook.
- Name it (e.g. "AegisRunner") and copy the webhook URL.
- In AegisRunner, paste it under the Discord toggle.
Setting up Teams
- In Teams, open the channel → … → Workflows → Post to a channel when a webhook request is received.
- Configure the workflow and copy the trigger URL.
- Paste it under the Teams toggle.
Setting up an outbound webhook
- Toggle Webhook on.
- Enter your URL.
- Generate or paste a secret. AegisRunner signs every request with HMAC-SHA256 using this secret.
- Save.
Verifying the signature
Every webhook delivery includes X-AegisRunner-Signature:
X-AegisRunner-Signature: sha256=<hex>
X-AegisRunner-Event: run_completed
Content-Type: application/json
Compute HMAC-SHA256(secret, raw_body) and compare with constant-time equality. Reject any request whose signature doesn't match.
Payload shape
{
"event": "run_completed",
"timestamp": "2026-04-28T10:42:11Z",
"project": { "id": "...", "name": "Acme Web", "slug": "acme-web" },
"run": {
"id": "...",
"suite_name": "Checkout flow",
"status": "passed",
"browser": "chromium",
"passed": 14,
"failed": 0,
"skipped": 1,
"duration_ms": 38_400,
"url": "https://aegisrunner.com/runs/..."
}
}
Schemas vary by event. Webhooks deliver as soon as the event fires. Make your endpoint idempotent — duplicate deliveries are possible during retries.
Email digests and retention emails
Beyond run notifications, AegisRunner sends a few automated emails outside the per-event system:
- Weekly digest — opt-in, summarizes the week's runs, scans, top failures.
- Retention nudges — sent if your account goes inactive for 7 days, then again at 30 days. Encourage you to come back, with a link to your last project.
- Plan-limit warnings — at 80% and 100% of your monthly run/scan cap.
Manage subscription to digests under Settings → Email Preferences. Retention nudges respect a workspace-wide unsubscribe.
Plan availability
| Plan | Slack/Discord/Teams | Webhook | Per-channel filters | |
|---|---|---|---|---|
| Free | ✓ | — | — | — |
| Starter | ✓ | 1 channel | 1 webhook | — |
| Pro | ✓ | All three | 3 webhooks | ✓ |
| Business | ✓ | All three | Unlimited | ✓ |
| Enterprise | ✓ | All three | Unlimited | ✓ |
Common questions
I'm getting Slack messages for runs that pass — can I quiet that?
Yes. Under per-channel filters for Slack, set run_completed to false and run_failed to true. You'll only get notified on failures.
Why didn't I get an email for that failure?
Either the global notify_run_failed is off, or the email channel has an explicit run_failed: false override. Check Settings → Notifications.
Can I add multiple Slack workspaces?
One Slack webhook per project on Pro. On Business, no per-project cap — you can target different channels in different workspaces by configuring multiple projects or using multiple webhook integrations.
Related
- Slack Integration — deeper guide to formatting and channel routing.
- Issue Tracking — auto-create GitHub Issues / Jira tickets on failure.
- Deployment Webhooks — receive notifications from your deploy provider.
- Scheduling Tests — schedule + notification combos.