Notifications
Every monitor alert is emailed by default. Notification channels add Slack, Discord, or a generic JSON webhook on top — so the same alert lands in your team chat, your incident automation, or a custom endpoint.
What's a channel?
A channel is a destination owned by your team (organisation). The configuration is one webhook URL plus a friendly name. We send every alert generated by every monitor in your team to every active channel — in addition to email, never instead of it.
The URL is the secret that lets ViewPeek post messages on your behalf. You generate it inside Slack / Discord / your own tool, then paste it into ViewPeek. The three sections below walk you through each one end-to-end.
Set up Slack
Slack incoming webhooks are created through their developer portal, not from inside the Slack desktop app. The full canonical walkthrough lives at docs.slack.dev — sending messages using incoming webhooks. The short path:
- Visit api.slack.com/apps while signed in to the workspace that should send the alerts. Click Create New App → From scratch, give it a name (e.g. "ViewPeek"), pick the workspace.
- In the app's left sidebar, click Incoming Webhooks. Toggle Activate Incoming Webhooks to On.
- Scroll down and click Add New Webhook to Workspace. Slack asks which channel the webhook should post to — pick it, then click Authorize.
- Slack returns a URL starting with
https://hooks.slack.com/services/under Webhook URLs for Your Workspace. Copy it. - Back in ViewPeek, go to Notifications → Add channel. Pick Slack, give it a name (e.g.
#incidents), paste the URL. - Click Send test. When the message arrives in Slack, click Save channel.
Security note from Slack: the webhook URL is a secret. Don't commit it to a public repo — Slack actively scans for leaks and revokes any URL it finds exposed.
Set up Discord
Discord webhooks are created through Server Settings → Integrations. You need Manage Webhooks permission on the server. The canonical reference is Discord — Intro to Webhooks. The short path:
- In Discord, click the down arrow next to your server name (top-left), then Server Settings.
- In the sidebar, click Integrations. Click Create Webhook.
- Enter a name (e.g. "ViewPeek"), pick the target channel from the dropdown, click Save Changes.
- Click Copy Webhook URL. The URL is on
discord.com(formatdiscord.com/api/webhooks/<id>/<token>). - Back in ViewPeek, go to Notifications → Add channel. Pick Discord, give it a name, paste the URL.
- Click Send test. When the embed shows up in Discord, click Save channel.
You can also reach the same Integrations page from a single channel: hover the channel name → Edit Channel → Integrations. The button is still Create Webhook and the resulting URL behaves the same.
Set up a generic webhook
Use this when you want ViewPeek to POST to your own endpoint — an n8n workflow, a Zapier hook, a Make scenario, a custom Lambda, or anything else that accepts JSON over HTTPS.
- Generate an HTTPS endpoint that accepts a JSON
POST. The host can be anywhere — we don't enforce a hostname allow-list on this kind. - In ViewPeek, go to Notifications → Add channel. Pick Webhook, give it a name, paste the URL.
- Click Send test. We POST a sample payload (see shape below); inspect the request in your endpoint's logs to confirm it arrived.
- Save channel.
The body we send:
{
"title": "🔴 Website Down: example.com",
"summary": "example.com (https://example.com) is DOWN — HTTP 502",
"details": {
"Monitor": "example.com",
"URL": "https://example.com",
"Reason": "HTTP 502",
"HTTP": 502,
"Response time": "—ms"
},
"ts": "2026-05-23T11:30:00Z",
"source": "viewpeek"
}
Headers: Content-Type: application/json, User-Agent: ViewPeek/alerts. We don't sign the payload — if your endpoint needs auth, embed a token in the URL path or query string.
How channels fire
Channels are team-wide: once a channel is saved and active, every monitor in your team fans out to every active channel. There's no per-monitor opt-in to manage. If you need to silence one channel without affecting the rest, use the Pause button on the channel list — one channel can be paused without touching the others.
Failure handling
Each channel has a 5-second HTTP timeout. A failure on one channel never blocks email delivery or other channels — the agents call each channel independently. The Last error column on the channel list shows the upstream status code or network error for the most recent attempt; it clears on the next successful delivery.
Troubleshooting
I clicked Send test and nothing arrived. In priority order:
- Check the channel list — the Last error column tells you whether the upstream rejected the message and what code came back.
- Confirm the webhook URL hasn't been revoked. Slack / Discord rotate URLs when integrations are reinstalled or deleted.
- For Slack: open the integration in Slack and confirm it's still attached to a real channel (private channels get deleted, orphaning their hooks).
- For Discord: confirm the webhook's role permissions include Send Messages in the target channel.
"Test failed: HTTP 404." The URL is wrong or the integration has been deleted upstream. Generate a fresh URL and update the channel.
"URL must start with https://." We require TLS on every webhook — http:// URLs are rejected at validation.
Discord shows a webhook avatar but the embed is blank. Some servers strip embeds from webhook messages via channel permissions. Toggle Allow embeds in the channel's integration settings.
Next steps
- Pause a noisy monitor rather than silencing the whole channel.
- Invite teammates so they get the email alerts alongside the channel alerts.
- Add a monitor if you haven't yet — a channel with no monitors has nothing to deliver.