An incoming webhook is one URL and one POST. It turns any script into something that can tell your team what happened, and it's the cheapest monitoring you will ever set up.

1. Incoming webhooks, not an app

For sending only, you don't need a Slack app with OAuth and scopes. An incoming webhook URL posts to one channel and takes two minutes to create.

Treat that URL as a secret — anyone holding it can post to your channel. Environment variable, never committed.

slack-notify.txt
Write a small notify() function for <language> that posts to a Slack
incoming webhook.

- URL from an environment variable.
- Takes a message, a severity (info / warning / error) and optional
  structured fields.
- Formats with Block Kit: a clear title, the fields as a table, colour
  by severity.
- Never throws. A failed notification must not break the thing that
  was calling it — log and continue.
- Times out after a few seconds rather than hanging.
- Rate-limits itself so a loop can't post 500 messages.

Show me how to test it without spamming a real channel.

Those last three points are what separates a useful notifier from a liability. A notification failure that takes down the job it was reporting on is a genuinely annoying bug.

2. Write messages someone will read

The most common failure isn't technical — it's a channel so noisy everyone mutes it.

Every alert should say what happened, what it affects, and whether anyone needs to do something. Include a link to the relevant dashboard, log or record. If an alert is purely informational and nobody ever acts on it, it doesn't belong in an alerting channel.

3. Group and throttle

One failure that repeats a hundred times should produce one message with a count, not a hundred messages. Batch, or suppress repeats within a window. This is the difference between a channel people watch and a channel people mute.

4. Route by importance

Separate channels for "something is broken" and "something happened". Mixing them trains people to ignore both.

If nobody has acted on an alert type in a month, delete it. Every ignored alert reduces attention paid to the ones that matter.