Skip to main content
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

Email

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:

  1. Go to Settings → Alert channels
  2. Click Add channel
  3. Select Email
  4. Enter the recipient address
  5. Set the severity filter (see below)
  6. 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:

  1. Go to Settings → Alert channels → Add channel → Slack
  2. Paste the Incoming Webhook URL from your Slack app configuration
  3. Set a severity filter
  4. 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.

LevelWhen it fires
infoFirst check result, routine state changes, resolved incidents
warningSSL expiry 8–30 days, low-severity DNS drift, minor vendor incidents
criticalSSL expiry ≤ 7 days, key downgrade, NS record change, major vendor outages

Recommended configuration for most agencies:

ChannelSeverity filterPurpose
Internal team email or Slackwarning and aboveCatch issues while there is still time to act
Internal escalation email or Slackcritical onlyEscalate urgent issues across the workspace
PagerDuty / on-call webhookcritical onlyPage 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.