Documentation▾
Alert Channels
Alert channels control where Merlonix sends notifications when a check result changes state — an SSL certificate approaching expiry, a DNS record drifting unexpectedly, or a vendor incident affecting a service your clients depend on.
Each channel has a type (email, Slack webhook, or custom webhook), a severity filter (which alert levels trigger a notification), and a workspace-wide delivery scope. Channels are not scoped to an individual client or asset. Every active channel can receive matching alerts from any client in the workspace.
Channel types
Merlonix sends a plain-text email with the asset name, check type, severity level, and a direct link to the asset detail page. Your billing email is pre-configured as a channel automatically.
To add an additional email channel:
- Go to Settings → Alert channels
- Click Add channel
- Select Email
- Enter the recipient address
- Set the severity filter (see below)
- Click Save
You can add multiple email channels — for example, a shared monitoring@youragency.com address and an internal on-call address. Do not add individual client contacts to a multi-client workspace channel.
Slack webhook
Merlonix posts a formatted message to a Slack channel using an Incoming Webhook URL. The message includes the asset label, check type, severity, and a link.
For step-by-step Slack setup, see How to Configure Slack Alerts for Client SSL Expiry.
To add a Slack channel:
- Go to Settings → Alert channels → Add channel → Slack
- Paste the Incoming Webhook URL from your Slack app configuration
- Set a severity filter
- Click Save
Custom webhook
For PagerDuty, Teams, custom dashboards, or any other endpoint, use a custom webhook. Merlonix sends a signed POST request with a JSON body.
Webhook payload:
{
"asset_id": "uuid",
"asset_label": "Client A — main site",
"check_type": "ssl",
"classifier": "expiring_soon",
"severity": "warning",
"detail": { "days_remaining": 22 },
"alert_id": "uuid",
"fired_at": "2026-04-30T09:14:00Z"
}
Signature verification:
Each request includes an X-Merlonix-Signature: sha256=<hex> header. Verify it against your webhook secret to confirm the request originated from Merlonix.
const crypto = require('crypto');
const expected = crypto
.createHmac('sha256', process.env.WEBHOOK_SECRET)
.update(rawBody)
.digest('hex');
if (`sha256=${expected}` !== req.headers['x-merlonix-signature']) {
return res.status(401).end();
}
Your webhook secret is shown once when you create the channel. Store it in your environment secrets.
Severity filters
Each channel has a severity filter that controls which alert levels trigger a notification on that channel.
| Level | When it fires |
|---|---|
info | First check result, routine state changes, resolved incidents |
warning | SSL expiry 8–30 days, low-severity DNS drift, minor vendor incidents |
critical | SSL expiry ≤ 7 days, key downgrade, NS record change, major vendor outages |
Recommended configuration for most agencies:
| Channel | Severity filter | Purpose |
|---|---|---|
| Internal team email or Slack | warning and above | Catch issues while there is still time to act |
| Internal escalation email or Slack | critical only | Escalate urgent issues across the workspace |
| PagerDuty / on-call webhook | critical only | Page the right person at 3 AM |
Severity filters control urgency, not client scope. A critical-only channel still receives critical alerts for all clients in the workspace.
Client-specific delivery
Native email, Slack, and webhook channels are workspace-wide. Naming a channel after a client or setting it to critical-only does not restrict which client's alerts it receives. Use internal agency recipients for direct channels.
For client-specific delivery, operate your own custom webhook receiver. Verify the signature, map stable asset_id values to the intended client and approved recipients, and forward only allowlisted matches. Drop unknown assets and alerts without an asset ID; vendor alerts can be workspace-wide context. Do not route by editable asset_label text alone.
This filtering is logic you implement and maintain, not a native Merlonix isolation feature. Test with assets from at least two clients and with missing/unknown IDs before enabling external delivery. Alternatively, have your team review an alert and send the relevant details manually.
Testing a channel
After creating a channel, click Test to send a sample alert payload. Confirm the notification arrives before relying on the channel for production alerts.
If the test notification does not arrive:
- Email: check spam folders and confirm the address is correct
- Slack: verify the Incoming Webhook URL is still active in your Slack app settings
- Webhook: check your endpoint logs for the incoming request and verify signature handling
Alert deduplication
Merlonix deduplicates alerts on a 24-hour window per (asset, check type, severity, classifier) combination. You receive at most one notification per day for the same condition on the same asset — until the condition resolves and recurs.
This means a single SSL certificate approaching expiry fires one alert per day, not one per check cycle. After you renew the certificate, the expiring_soon condition resolves; if expiry is detected again on a new cycle, a fresh alert fires.
Acknowledging or resolving an alert in the dashboard resets the deduplication window for that alert immediately.
Next: return to Getting Started or read Monitoring Concepts to understand how alerts are classified.