Telegram alerts for failed Stripe payments

Get an instant Telegram ping the moment a Stripe charge or invoice payment fails, so revenue issues never sit unseen in an email inbox.

Deterministic Code
StripeTelegramFinanceOperationsNotifications & Alerts
PromptCreate

Build me a code workflow that sends an instant Telegram alert every time a Stripe payment fails, so I notice revenue problems in real time instead of finding them in an email digest the next morning.

Trigger: a Stripe webhook. Register the workflow as a Stripe webhook endpoint and subscribe to two event types: charge.failed (covers one-off payments and direct charges) and invoice.payment_failed (covers subscription renewals). Both event types should route into the same workflow and produce the same alert format. Verify the Stripe-Signature header on incoming requests so we ignore anything that isn't really from Stripe.

Extract these fields from the event payload, handling both event shapes:

- Customer email (from charge.billing_details.email, charge.receipt_email, or the customer record on the invoice, whichever is present) - Amount and currency (amount in the smallest currency unit, formatted back to a human-readable string like "$49.00 USD") - Failure reason: prefer failure_message, fall back to failure_code, then outcome.seller_message. For invoice.payment_failed, use the latest charge's failure_message or attempt_count + next_payment_attempt context. - Customer name or Stripe customer id, whichever is available - A direct deeplink to the charge or invoice in the Stripe dashboard (https://dashboard.stripe.com/payments/{charge_id} for charges, https://dashboard.stripe.com/invoices/{invoice_id} for invoices). Use the test-mode subdomain if livemode is false.

Format the alert as a short, scannable Telegram message using this template:

🚨 Stripe payment failed Customer: {name or email} Amount: {formatted_amount} {currency} Reason: {failure_reason} Type: {one-off charge | subscription renewal} → Open in Stripe: {dashboard_url}

Send the message via Telegram's Send Message operation. Default the destination to "me" so it lands in the operator's own Saved Messages, but expose the peer as a single configurable input so it can be retargeted to any chat, group, or channel without editing code. Use plain text formatting (not HTML or Markdown parse modes) so the template is robust against customer names containing special characters.

Respond to the webhook with HTTP 200 immediately after the Telegram send succeeds. If the Telegram send fails (FloodWaitError or network error), log it but still return 200 so Stripe doesn't retry the webhook and double-alert. This is a deterministic pipeline with no agent reasoning: webhook in, template render, message out.

What does this prompt do?

  • Listens for Stripe's failed payment events the second they happen, so you find out in real time instead of the next morning.
  • Sends a tight, scannable alert to your Telegram with the customer email, amount, currency, and why the card was declined.
  • Includes a direct link to the failed charge in your Stripe dashboard so you can investigate in one tap.
  • Covers both one-off charges and subscription renewals, so nothing slips through whether you sell once or bill monthly.

What do I need to use this?

  • A Stripe account with admin access to add a webhook endpoint.
  • A Telegram account connected to General Input. By default the alert goes to your own Saved Messages, but you can point it at any chat, group, or channel you're in.
  • Optional: a dedicated finance or revenue chat if you'd rather route alerts to your team than to yourself.

How can I customize it?

  • Change the destination from your Saved Messages to a specific finance chat, group, or channel.
  • Edit the message template to add or remove fields, mention a teammate, or change the tone.
  • Filter which failures alert you, for example only above a certain amount, only live mode, or only specific failure reason codes.

FAQs

Will this work for subscription renewals as well as one-off purchases?
Yes. The workflow listens for both kinds of failure events Stripe emits, so a declined renewal on a monthly plan and a failed one-off checkout both fire the same alert.
Can the alert go to a group chat instead of my Saved Messages?
Yes. By default the alert lands in your own Saved Messages so only you see it, but you can change the destination to any group, channel, or direct message your Telegram account has access to.
How fast does the alert arrive after a payment fails?
Within seconds. Stripe pushes the event to the workflow as soon as the payment fails, and Telegram delivers the message immediately. There's no polling delay.
What's actually in the message?
Customer email, amount and currency, the reason Stripe gave for the failure, and a direct link to the charge in your Stripe dashboard. The format is short on purpose so it reads cleanly on a phone.
Will failed test payments ping me too?
Only if you wire the workflow to your Stripe test mode. Most teams connect the live endpoint so only real failures alert them, and leave test failures quiet.

Related templates

Consolidate weekly Stripe revenue and separate growth from FX

Every Monday, turn last week's Stripe payments in every currency into one home currency total and show what was real growth versus exchange rates.

Open Exchange Rates
Stripe
Google Sheets
+1
Agentic Task
Reconcile Stripe payouts against your Mercury deposits

Every weekday morning, check that every Stripe payout actually landed in your Mercury account, and hear about it only when one did not.

Stripe
Mercury
Slack Bot
Agentic Task
Rescue failed Stripe payments with a Keap recovery play

When a Stripe payment fails, tag the customer in Keap, log the reason, open a 48 hour follow up task, and send a friendly card update email.

Stripe
Keap
Slack Bot
Agentic Task
Recover failed Stripe payments with friendly Gladly care

When a Stripe payment fails, we find the customer in Gladly, log the details, open a follow-up task, and send a warm note to update their payment method.

Gladly
Stripe
Agentic Task
Sync Stripe subscription status to your Firebase users

The moment a customer's Stripe subscription changes, we update their Firebase user record so their paid access always matches their real billing status.

Stripe
Firebase
Deterministic Code
Audit failed Stripe payments in DynamoDB with a Slack triage note

When a Stripe charge fails, save the failure to your DynamoDB audit table with duplicate protection and post a Slack triage line that says how worried to be.

Amazon DynamoDB
Stripe
Slack Bot
Agentic Task

Stop finding out about failed payments tomorrow morning.

Connect Stripe and Telegram once, and the next failed payment lands in your pocket in seconds.