Sources should not choose the chat app. GitHub Actions, Stripe, WordPress, Shopify, email ingest, and n8n already POST once to AlertHub. The usual next step is a team channel: Slack, Microsoft Teams, or Mattermost.
That channel is a poor pager. It is muted at night, it is full of people who are not on call, and it is the wrong place for a lock-screen ping. Add ntfy or Gotify on the same project. Every warning and critical fans out to both. info stays in the dashboard.
This is the combo the other nine posts assume: you do not rebuild ingest to get a phone.
Who hears what
| Surface | Role | Typical dest |
|---|---|---|
| Team channel | Shared context, handoff, “did anyone see this?” | Slack OAuth, Teams, Mattermost, Discord, Google Chat |
| On-call pocket | Wake the human who can act | ntfy topic or Gotify app |
| Auditor / ticket | Paper trail that outlives a swipe | Email destination |
| History | Search, retention, read state | Dashboard (including info) |
AlertHub does not send different levels to different destinations today: if it is warning or critical, every connected channel gets it. Split noise with level at the source (info vs warning) and separate projects (staging vs prod), not with a second curl.
GitHub / Stripe / WP / Shopify / email / n8n
│
▼
AlertHub
/ | \
Slack ntfy email
Teams Gotify
ntfy vs Gotify vs WhatsApp
| ntfy | Gotify | WhatsApp Pro | |
|---|---|---|---|
| Hosting | ntfy.sh or self-hosted | Self-hosted | Vendor |
| Auth | Unguessable topic (?auth= optional) | Application token on HTTPS URL | Paid AlertHub dest |
| Best when | Phone-first, no server to run | Android ops already has Gotify | Warehouse already lives in WhatsApp |
Setup: ntfy alerts · Gotify alerts · WhatsApp Pro. You can attach ntfy and Gotify if two teams refuse to share an app.
Setup (once)
- Ingest stays as it is. Do not add
curl ntfy.shnext tosendAlert. - Connect the team channel you already use (Slack mention-to-connect, or a Mattermost/Teams webhook).
- Paste ntfy
https://ntfy.sh/{topic}or Gotifyhttps://host/message?token=…in Connections. - Send one test warning. Confirm channel + phone. Send an info test and confirm it is dashboard-only.
Mute the Slack channel at night if you want; keep ntfy priority 5 / Gotify 8 for critical. That is a client setting, not a second webhook.
Pattern 1: Prod pages the phone, staging does not
Two AlertHub projects (or staging sources stuck at info). Prod Connections: Slack + ntfy. Staging: dashboard only, or Slack #staging without ntfy. Same YAML/plugin/Stripe URL shape, different secret keys.
Pattern 2: Finance off the public channel
Stripe failed payments on a project whose Slack is a private #billing, plus Gotify for the finance lead — Stripe → Gotify. Do not reuse the public #deploys webhook.
Pattern 3: Agency many sites, one pager
WordPress security hooks (ntfy combo) on one topic; each client is ah_source or its own project. Slack is the agency room; ntfy is whoever is on the weekly rota.
Ideas to squeeze more value
- One ingest, many dests. That is the product. Changing Slack → Teams is a Connection, not a GitHub Actions edit.
- Do not dual-send from n8n. If AlertHub fans out to Slack, delete the Slack node in n8n — automation → Gotify.
- Read state. The phone is lossy. Use the inbox and retention in the morning.
- Levels. info vs warning vs critical is how you keep ntfy sacred.
FAQ
Can Slack get info and ntfy only critical?
Not as two filters on one project. Use info for noise (dashboard only) and critical for the page. Or two projects.
Does the team see ntfy messages in Slack?
No. Same event, two deliveries. Slack has the thread; ntfy has the banner.
Self-hosted Gotify plus Slack Cloud?
Yes. Gotify needs public HTTPS. Slack is OAuth as usual.
Next steps
Leave ingest alone. Add ntfy or Gotify next to Slack. Fail a test warning and check both.
Related: ntfy setup · Gotify setup · GitHub Actions → ntfy · Mattermost