Loading...

If you're running an agency and you're still finding out about client downtime because someone fired off an angry email at 9am, we need to talk. You can connect Slack and Discord to Moonitor fairly quickly using native integrations and webhooks, then route Slack downtime alerts and Discord notifications to client-specific channels so the right team sees the right incident fast.
That part's reasonably simple. The real work—the bit that separates calm agencies from frazzled ones—is configuring smart filters and escalation rules so you're not getting paged for a 10-second blip that resolved itself before you'd even opened your laptop. Done properly, this creates a reliable incident alerting process for agencies managing multiple client websites.
A quick note before we start: the exact setup time depends on a few things outside your control—whether you have admin rights on your Slack workspace, whether someone else owns the Discord server, and whether a client needs to approve you adding anything to their systems. If you've got the right permissions already, you're looking at ten to fifteen minutes per platform. If you're waiting on a workspace admin to approve an app install, budget for that delay separately.
Let's walk through connecting Slack and Discord, routing alerts by client, filtering false positives, and troubleshooting common setup problems.
Here's a scenario most agency folks have lived through at least once: a client's checkout page goes down for twenty minutes on a Tuesday afternoon, nobody on your team notices, and the first you hear of it is a terse email with "URGENT" in the subject line. By the time you've read it, triaged it, and fixed whatever broke, you've lost the client's confidence and a chunk of your afternoon doing damage control instead of actual work.
Agencies carry a different risk profile than someone running a single site. You've got more surface area—multiple domains, APIs, cron jobs, servers—more SLAs to honour, and more reputations riding on uptime than just your own. One client's outage reflects on you, even if the root cause was their hosting provider or a third-party API you don't control. For UK agencies specifically, this often means coordinating across time zones with clients or hosting providers abroad and being able to show clients exactly when an incident was detected and resolved for your own records and GDPR-related data handling conversations.
Email alerts are better than nothing, but they're too slow for this kind of pressure. People don't check email in real time the way they check Slack or Discord. Your team already lives in those tools all day, so that's where incident alerting needs to show up too. A practical model that works well is to route production incidents to a dedicated ops channel, staging and lower-priority warnings to a separate project channel, and client-facing communication entirely separately. We'll get into exactly how that routing works in a moment.
Before you start, check you have permission to add apps to the Slack workspace you're connecting. Some workspaces restrict app installs to admins only—if that's the case here, you'll need someone with admin rights to approve the Moonitor Slack app, or the install step will stall without an obvious error message.
If no test alert arrives after a minute or two, the most common causes are: the app wasn't actually authorised (check your Slack workspace's app directory), the wrong channel was selected during setup, or your Slack workspace has a message-posting restriction on the channel you picked. Try posting to a channel you own personally first to rule out permissions issues.

Once a clean test alert lands and a recovery notification fires correctly, you're done with the Slack side.
Discord works differently to Slack. Rather than installing an app with OAuth permissions, Discord uses webhooks: a unique URL that lets external services post messages into a specific channel. This works in your favour if you're managing several clients, since you can create a dedicated webhook per client without an app-install approval process slowing you down.
You'll need the Manage Webhooks permission on the Discord server to complete this. If you're not the server owner, ask whoever administers the client's Discord to either grant you that permission or create the webhook and hand you the URL directly.
If the test message never shows up, double-check you pasted the full webhook URL without trailing spaces, and confirm the channel the webhook points to still exists—Discord webhooks silently stop working if their target channel gets deleted or renamed in some setups.

No app approvals, no waiting on workspace admins—just a URL, a permission check, and a save button.
This is the part that actually changes how your team operates day to day, so it's worth doing properly rather than rushing it.
client–environment–service–severity works well: acmecorp-production-checkout-critical tells anyone covering on-call exactly what they're looking at, even if they don't normally work on that account.Here's a worked example of what a small routing matrix might look like:
| Client | Environment | Monitor type | Alert destination | Escalation |
|---|---|---|---|---|
| Acme Corp | Production | Checkout API | #acme-ops | Pages on-call after 2 failed checks |
| Acme Corp | Staging | Health check | #acme-dev | No escalation, logged only |
| Beta Ltd | Production | SSL certificate | #beta-alerts | Informational, no page |
| Beta Ltd | Production | Cron job | #beta-ops | Pages on-call after 1 failed check |

Once this is set up, an outage on Client A's server shows up in Client A's channel, tagged clearly, visible to the right people, without anyone needing to dig through a shared channel full of unrelated noise.
Here's the uncomfortable truth about incident alerting: if your alerts are noisy, your team will start ignoring them. Not consciously, not on purpose—but after the fifth "DOWN" notification that turns out to be a brief network hiccup, people's brains quietly reclassify your alert channel as background noise. That's exactly when a real incident slips through unnoticed.
The values below are starting points, not universal defaults—tune them against your own traffic and tolerance for false positives:
| Monitor type | Check interval | Retry/confirmation | Regions required | Escalation delay |
|---|---|---|---|---|
| Production payment API | 1 minute | Immediate retry | 2 regions must agree | Page immediately |
| General production site | 2–3 minutes | 1 retry before alert | 2 regions must agree | Page after 2 failed checks |
| Staging/internal tools | 5 minutes | 2 retries before alert | 1 region | Log only, no page |
| SSL certificate expiry | Daily check | N/A | N/A | Informational channel, 30/14/7-day warnings |
| Cron job monitoring | Matches job schedule | 1 missed run tolerance | N/A | Alert after 1 missed run |
A few supporting practices worth layering on top, where your monitoring plan supports them:
Get these roughly right and your Slack downtime alerts become something your team trusts: when something fires, it's real, and it gets actioned instead of glanced at and dismissed.
Not every incident deserves the same urgency, and not every channel behaves the same way under pressure. Worth being clear-eyed about what each one actually offers:
| Channel | Delivery | Acknowledgement | Best for | Limitation |
|---|---|---|---|---|
| Slack | Push notification, near-instant when online | None built-in unless you add a bot workflow | Team-wide visibility, threaded discussion | Useless if notifications are muted or the device is offline |
| Discord | Push notification via webhook | None built-in | Smaller teams, per-client servers | Same muting/offline limitation as Slack |
| Minutes, not seconds, in practice | None | Non-urgent summaries, audit trail | Too slow to be a primary alert path | |
| SMS/phone-style alerting | Near-instant, bypasses app notification settings | Depends on integration | Genuinely critical outages only | Only useful if Moonitor (or a third-party bridge like a webhook-to-SMS service) supports it on your plan—check before relying on it |
Neither Slack nor Discord guarantees someone sees an alert immediately—both depend on the recipient having notifications enabled and their device online. That's exactly why a secondary channel reserved for true critical outages matters: something that bypasses "do not disturb" settings for the handful of incidents where someone genuinely needs to know even if they've stepped away from their desk.

A few things that trip people up during setup, and what to check:
Before you consider your monitoring setup finished, run through this:
That last step matters more than people expect. Your first configuration is always a guess—the real tuning happens once you've seen a week of live data.
In Moonitor, go to Integrations, select Slack, and authorise the app for your workspace—you'll need admin rights on that workspace, or approval from someone who has them. You'll choose a default channel during setup, and from there you can assign specific monitors to specific channels if your plan supports per-monitor routing.
Yes. Since Discord uses webhooks rather than a single app install, you can create a separate webhook URL for each channel or server and assign them to different monitors in Moonitor. This is how agencies keep Client A's alerts out of Client B's server without any extra app-install overhead.
Route client-facing updates through a branded status page rather than their own Slack or Discord, and keep raw incident alerting internal to your team's channels. Pair that with multi-region failure verification and sensible retry thresholds, where your plan supports them, so you're only alerting on confirmed, meaningful downtime.
Slack and Discord are both push-based and generally fast when someone's actively online with notifications on—but neither is guaranteed to reach someone who's muted alerts or has their device offline. For genuinely critical incidents, many agencies layer in a secondary channel, like SMS or a phone-call webhook, so nothing gets missed. Check whether this is available on your Moonitor plan before building a process around it.
First, confirm the basics: for Slack, check the app was actually authorised and that it has posting permission in the selected channel; for Discord, check the webhook URL was copied correctly and that the target channel still exists. If both check out and nothing arrives, try a different channel to rule out a channel-specific permissions issue before assuming the integration itself is broken.

A 200 response doesn't mean your API is healthy. Learn how to monitor APIs properly—response content, latency trends, alert thresholds, and CI/CD inte

Set up Slack downtime alerts in minutes with this practical guide to Slack and Discord integrations, custom messages, low-noise routing, testing, and

Learn how to connect Slack downtime alerts and Discord webhooks to your monitoring tool for faster incident notifications and less alert noise.