Most apps don't fail loudly. They degrade quietly — a slow endpoint here, a failed job there, a payment that silently didn't go through. By the time you hear about it from a user, the damage is done. The antidote is real-time alerting: knowing the moment something goes wrong, before your users do.
Here are five concrete ways to instrument your application with real-time alerts using NotificationsBot.
1 HTTP Endpoint Health Checks
The simplest — and most overlooked — form of monitoring is just checking that your endpoints actually respond. NotificationsBot has a built-in URL health checker that polls your URLs every 60 seconds and sends an instant alert when something stops responding or returns an unexpected HTTP status code.
Add your critical endpoints — your API root, your payment gateway integration, your auth service — and you'll get notified within a minute of any downtime. No infrastructure to set up, no cron jobs, no external service. It's built right into the dashboard.
Your public API health route (/health or
/status), third-party integrations you depend on
(payment gateways, auth providers, email APIs), and any internal
services your app calls. If it has a URL, you can monitor it.
2 Error and Exception Tracking
Unhandled exceptions in production are silent killers. Your users hit an error screen, give up, and leave — and you have no idea until you check your logs the next morning. With NotificationsBot, you can hook directly into your error handling and fire an alert the instant an exception is caught.
The pattern is the same regardless of your stack: catch the error, make an HTTP POST to the NotificationsBot API with the relevant context, and the alert lands in your Telegram, Discord, or Slack within seconds.
# In your app startup or middleware import requests def send_alert(title, message): requests.post( "https://api.notificationsbot.com/event", headers={"Authorization": "Bearer YOUR_API_KEY"}, json={ "channel": "errors", "title": title, "message": message, } ) # In your exception handler try: process_payment(order) except Exception as e: send_alert( "🚨 Payment processing failed", f"Order #{order.id} — {str(e)}" ) raise
Add the same pattern to your global error handler or middleware and every unhandled exception in your app will notify your team in real time — with the error message, stack context, or any other data you choose to include.
3 Deployment Notifications
Deployments are the number one cause of production incidents. Knowing exactly when a deploy happened — and who triggered it — is invaluable context when something breaks. Add a notification to your CI/CD pipeline so your whole team knows the moment a new version goes live.
- name: Notify deployment
run: |
curl -s -X POST https://api.notificationsbot.com/event \
-H "Authorization: Bearer ${{ secrets.NOTIFICATIONSBOT_KEY }}" \
-H "Content-Type: application/json" \
-d '{
"channel": "deployments",
"title": "✅ Deployed to production",
"message": "Branch: ${{ github.ref_name }} — commit ${{ github.sha }}"
}'
Now when an incident happens, the first question — "did anything change recently?" — is already answered. Your team can see in the notification feed exactly what was deployed and when, and correlate it with any errors that appeared afterward.
Create separate channels for different environments. A production-deploys channel gets the whole team notified, while a staging-deploys channel keeps the noise down to just the engineers who need it.
4 Background Job and Queue Monitoring
Background jobs are invisible by nature — they run quietly, and when they fail, nobody notices until a downstream system starts behaving strangely. Sending notifications for job failures, long-running jobs, and queue backlogs gives you visibility into parts of your system that are otherwise a black box.
Useful patterns to alert on:
- A job fails after all retry attempts are exhausted
- A job takes longer than an expected threshold (e.g., > 5 minutes)
- The message queue depth exceeds a high-water mark
- A scheduled job doesn't start within its expected window (dead-man's switch)
- A job succeeds after previously failing (recovery notification)
// In your job processor error handler worker.on('failed', async (job, err) => { if (job.attemptsMade >= job.opts.attempts) { await fetch('https://api.notificationsbot.com/event', { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.NOTIF_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ channel: 'background-jobs', title: `❌ Job failed: ${job.name}`, message: `${err.message} — after ${job.attemptsMade} attempts`, }), }); } });
5 Business Metric Alerts
Technical health is only half the picture. Business events — new signups, payments, cancellations, refunds, fraud flags — are just as important to stay on top of, especially for early-stage products where every event matters and your team wants to know immediately when the needle moves.
Some of the highest-value business alerts to set up:
- New paid subscription — celebrate it and verify the webhook landed correctly
- Subscription cancellation — trigger a win-back workflow
- Payment failure — prompt the user before they churn silently
- New user signup — track growth in real time
- A user hitting a plan limit — opportunity to prompt an upgrade
// In your Stripe webhook handler case 'customer.subscription.created': { const sub = event.data.object; await notifyTeam({ channel: 'revenue', title: '🎉 New subscription', message: `${sub.customer_email} → ${sub.plan.nickname} ($${sub.plan.amount / 100}/mo)`, }); break; }
For early-stage products, business event notifications double as a real-time dashboard. Your whole team sees growth happening live — which builds morale and keeps everyone aligned on what's working.
Putting It All Together
You don't need to implement all five at once. Start with the one that would have caught your last production incident, then expand from there. Each integration is a single HTTP POST, so the overhead is minimal and the payoff is immediate.
A good starting setup for most teams:
- Add URL health checks for your three most critical endpoints — takes 2 minutes in the dashboard
- Wrap your payment processing in an error alert — one try/catch call
- Add a deployment notification to your CI/CD pipeline — one curl command
From there you'll have eyes on uptime, errors, and deployments — the three things that most commonly cause production incidents — and your team will never be caught off guard again.
Start Monitoring in Minutes
Set up your first real-time alert for free. No credit card required, no infrastructure to manage.
Start for free