deploy · tutorial · mobile
Telegram + Discord Alerts: Both Pockets Buzz in 2 Seconds
One alert function sends incidents to Telegram or Discord for $0, with a breaker that stops spam. How to set it up for a team.

The alert only you can hear
Solo founders pick Telegram.
Instant buzz.
No noise.
Pocket-first.
The day a co-founder joins, the same setup becomes a silo. Incidents ping one pocket while the other person sleeps through the outage they could have fixed.
So teams bolt on a second system.
A different SDK.
Different call sites.
Different formatting.
Within a month the two disagree.
Discord fired, Telegram did not, and nobody knows which tells the truth.
Telegram and Discord alerts should be one call with one clear path.
Same event.
Same text.
Delivered where your team actually reads.
One channel, two systems, one function
| Setup | Pocket buzz | The team sees it | Truth source |
|---|---|---|---|
| Telegram only | Instant | Nobody else | A solo silo |
| Two bolted systems | Sometimes | Sometimes | Two, and they disagree |
| An email list | In the morning | Everyone, late | Slow consensus |
| One alert function, Telegram first, Discord as backup | Instant | Instant, via a shared group or channel | One function |
Bolted-on second channels rot. Three reasons.
Formats drift. Telegram gets the order ID. Discord gets "something broke". Two call sites evolve separately.
Breakers disagree. One channel throttles, the other floods, and the team argues about severity while checkout burns. A single 60-second breaker keeps every channel telling the same story.
Tests cover one path. The Telegram drill passes monthly while the Discord webhook expired silently three weeks ago. One function means one drill proves the path or exposes the dead one.
What to do
Set up the channel your team reads.
For Telegram, create a bot with @BotFather and find your chat ID. For Discord, open the channel settings, then Integrations, then Webhooks, and copy the URL.
Put the values in your production settings and sync them with bp secret sync.
Share the destination, not the function.
Telegram goes first, so point it at a group chat when two or more people share on-call. Everyone in the group gets the same buzz.
If your team lives in Discord, leave Telegram unset and the alert goes to the Discord channel instead.
The kit sends one alert per incident, to one place. It does not post to both at the same time.
Alert at three sites. Then stop.
Payments.
Paid-route errors.
Database loss.
Repeat alerts for the same problem are held back for a minute, so one bug cannot spam your phone 400 times.
The kit already alerts from its payment webhooks.
Drill the path monthly.
Send a test alert from your server and confirm it lands within seconds. If it does not, a token or webhook has expired. That is a Tuesday discovery, not a Saturday one.
The drill card
| Check | Action | Pass looks like |
|---|---|---|
| Telegram live | Send a test alert | A buzz within seconds, with context |
| Discord backup | Remove the Telegram setting, test again | The same alert in Discord |
| The breaker holds | Fire the same alert five times fast | One ping, the rest held back |
| A dead channel | Revoke a token, test | You see the failure on a calm day |
A second channel adds a second thing that can expire silently. A noisy channel trains everyone to ignore it.
Keep alerts to three kinds. A fourth is a conversation first. "Will we act on this at 2 a.m.?"
Know this first
The kit sends one alert, to one place.
It does not post to Telegram and Discord at once.
No severity routing.
No escalation ladder.
Past five people on call, buy an on-call tool.
Why BoringPush is the way to do this
Alerts that reach the team.
BoringPush sends critical failures to Telegram, or to Discord when Telegram isn't set. Repeats are held back for a minute.
Payment failures already fire from the webhooks.
FAQ
Should alerts go to a group or a channel?
On Telegram, a direct message works for a solo founder and a group works once two or more people share on-call. On Discord, use a dedicated incidents channel with mentions off except for the bot, so people discuss in threads without muting the alarm. Keep the alarm surface separate from the discussion surface.
What if both Telegram and Discord are down?
The function returns a failure without crashing your route. For a dead server, neither channel can help anyway, so add a free external uptime check on a separate network. Three watchers, three independent networks, no shared fate.
How do I stop alert fatigue?
Cap the alert sites at three, let the breaker eat bursts, and audit every quarter. Any alert that fired twice without action loses its call site. The day someone mutes the incidents channel, treat it as a process bug.
Can different severities route to different channels?
Not out of the box. The function is deliberately simple. If you need routing, make the decision in the code that raises the alert and keep the function itself plain.
Does Discord threading work for incident discussion?
Yes. Reply in a thread under the bot's post so the channel stays a clean timeline of events with discussion tucked underneath. Later, you read the thread to see what you tried at 2:14.
When does this setup stop being enough?
When on-call spans time zones and needs escalation, such as paging the next person after five unacknowledged minutes. That is roughly team-of-five territory. Buy an on-call tool for the escalation ladder and keep this function as the trigger.
Keep reading
- Sentry $49 vs Telegram Alerts $0 for Indies — the cost case for the $0 buzz
- Fix Production From Your Phone: The Grocery-Line Drill — the fix loop this alert starts
- Env Sync in 30 Seconds: Kill Secret Drift Forever — how the keys travel safely
+ all the boring stuff (analytics, auth, SQLite ↔ Supabase, full marketplace, webhooks)
Command from your phone.
Built so autonomous AI agents build what you want without breaking what's already paying you.
- Built-in analytics — cookie-free mode, $0 forever, no PostHog bill
- SQLite ↔ Supabase: one setting, same field names
- Full digital marketplace & feedback boards included
- 3 payment rails: Stripe, LemonSqueezy & Dodo Payments
- Agent fences: lint gate, read-only data access, auto-rollback
- Ship from your phone via SSH & WireGuard/Tailscale in under a minute
$199
Get BoringPushOne-time payment · Lifetime updates · Unlimited projects.
Keep reading


