Notifications
Understand notification channels, alert sensitivity, webhook payloads, and recovery alerts.
What is a notification channel?
A notification channel is a destination where alert messages are delivered when an incident opens or resolves. Each channel type has its own setup — from a simple email address to a webhook endpoint with HMAC signature verification.
When a monitor goes down, every channel attached to the escalation policy receives the alert simultaneously — they don't queue.
Available channels
| Channel | Plans | Notes |
|---|---|---|
| All | Default channel; always available | |
| Slack | All | Incoming Webhook from your Slack workspace |
| Discord | All | Incoming Webhook from your Discord server |
| Telegram | All | Link via @HowlOpsAlertsBot |
| Custom Webhook | Standard+ | HTTPS endpoint, JSON payload, optional HMAC signing |
| Pushover | Standard+ | Push notifications to mobile devices |
| Mattermost | Standard+ | Incoming Webhook from Mattermost |
| Microsoft Teams | Standard+ | Incoming Webhook from Teams channel |
| PagerDuty | Premium+ | Events API v2 integration key |
| Opsgenie | Premium+ | REST API integration key |
| Jira | Premium+ | Creates issues for new incidents |
| Zendesk | Premium+ | Opens tickets for new incidents |
| AWS SNS | Premium+ | Publishes to an SNS topic |
| SMS / Twilio | Enterprise | Requires admin-level configuration |
Alert sensitivity
The alert threshold on each monitor controls how sensitive the alerting is:
- 1 (default) — alert fires on the first consecutive failure. Use for critical production services.
- 2–3 — alert fires after N consecutive failures. Use for less-critical services to absorb transient errors.
Recovery alerts fire automatically when a monitor returns to a healthy state. Recovery alerts use the same channels as the original alert and cannot be disabled.
Webhook payload
When an alert fires on a custom webhook channel, the platform sends a JSON payload:
{
"version": "1",
"event": "monitor.down",
"monitor_name": "Production API",
"url": "https://api.example.com/health",
"details": "HTTP 503 - Service Unavailable",
"timestamp": "2026-05-13T10:00:00Z",
"tenant_id": "00000000-0000-0000-0000-000000000000",
"monitor_id": "00000000-0000-0000-0000-000000000001",
"heartbeat_id": ""
}
Event types
| Event | When it fires |
|---|---|
monitor.down | Monitor or heartbeat failed |
monitor.up | Monitor or heartbeat recovered |
monitor.ssl_expiry | SSL certificate is nearing expiry |
test | Sent when you click "Send Test Alert" |
For heartbeat events, heartbeat_id is populated and monitor_id is empty. For ping monitors, the url field contains ping://HOST.
Webhook signature verification
Each webhook request includes an X-HOWLOPS-Signature header — an HMAC-SHA256 hex digest of the raw request body, signed with your webhook secret. Verify it server-side to reject forged requests:
// Node.js
const crypto = require("crypto");
function verifySignature(body, secret, signature) {
const expected = crypto
.createHmac("sha256", secret)
.update(body, "utf8")
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature)
);
}
Testing channels
Always test a channel before relying on it for production alerts. After adding a channel, click Send Test Alert in the channel settings. Verify the message arrives at the destination.
Assigning channels to monitors
A channel must be explicitly assigned to a monitor before it can receive alerts from that monitor. One channel can be assigned to many monitors. Removing a channel from a monitor does not delete the channel.
- Open a monitor and click Edit.
- In the Notifications section, select channels from the dropdown.
- Click Save.
Related
Was this page helpful?