Failed payments are a revenue leak whether the card died on Stripe Billing or on a WooCommerce checkout. The Stripe-only critical URL is already documented. The WooCommerce hook is already documented. This post is the combined operator view: both sources in one project, labeled so you can tell a declined invoice from a failed shop order, then one phone destination.
Do not duplicate those setup tables here:
- Stripe events
invoice.payment_failedandpayment_intent.payment_failed,ah_level=critical, placeholders — failed Stripe payments and Stripe source. - WooCommerce hook
woocommerce_order_status_failed,{{0}}= order id — WooCommerce order alerts. - No-server Stripe via Zapier — Stripe payment alerts with Zapier.
- WhatsApp last mile for the shop — WooCommerce failed payments on WhatsApp.
AlertHub stores every ingest. Only warning and critical fan out to Telegram, Slack, WhatsApp (Pro), email, and the rest. Successful payments should stay info or they will train you to ignore the channel.
What to turn on
| Money path | How it reaches AlertHub | Level | Source label |
|---|---|---|---|
| Recurring Stripe invoice | Stripe webhook URL | Critical | Stripe or Stripe Billing |
| One-time Stripe PaymentIntent | Same or second Stripe endpoint | Critical | Stripe |
| WooCommerce checkout | Plugin hook woocommerce_order_status_failed | Warning | Plugin shared source name, e.g. Shop |
| Stripe through Zapier | Zapier Failed Payment → Send a New Alert | Critical | Stripe |
WooCommerce Stripe gateway still fires WooCommerce order hooks. You do not also need the Stripe Dashboard webhook for that checkout unless you bill SaaS (Checkout / Billing) outside WordPress. Many products do both: two sources, one project.
Keep customer email out of public Slack. Amount, currency, invoice id or order id are enough.
Setup (once)
- One project at app.thealerthub.com. Connect Telegram (or Slack) before you rely on the first declined card.
- Add the Stripe critical endpoint or the WooCommerce failed hook — whichever you run today. Confirm a test-mode decline.
- Add the other source with a different
ah_source/ plugin source name. Filter the dashboard instead of mixing titles.
Stripe test vs live: separate webhook lists, preferably a separate AlertHub project for test.
Alert 1: Stripe invoice / PaymentIntent failed
Use the critical URL from the Stripe failed-payments post. That is dunning you might still have to do by hand on high-value accounts. Subscription cancels are a different event (customer.subscription.deleted) at warning — subscription monitoring.
Alert 2: WooCommerce order failed
woocommerce_order_status_failed at warning (or critical for high-ticket shops). Same plugin as paid orders; do not install a second notifier. If you also want those failures on WhatsApp, follow the WooCommerce WhatsApp failed-payments last mile — quota applies.
Alert 3: Successful charges stay in the feed
invoice.paid / payment_intent.succeeded / woocommerce_payment_complete at info. That is the reconciliation log. It does not page. A second Stripe endpoint with ah_title=Stripe:{{type}} at info is webhook monitoring, not this page.
Ideas to squeeze more value
- Gotify if the team channel is the wrong place for invoice ids — Stripe → Gotify.
- Zapier Filters (amount,
past_due) when you cannot register two Stripe URLs yet. - Inbox unread. After you emailed the customer, mark the alert read — retention. Chat is not the archive.
- This does not replace Stripe or WooCommerce customer receipts. Those stay on. AlertHub is for operators.
FAQ
Does Stripe POST to Telegram?
No. Stripe → AlertHub → Connections. WooCommerce: plugin → AlertHub → Connections.
Can I page only on failures above €100?
Native Stripe placeholder URLs cannot branch. Use two endpoints, Zapier/Make filters, or Hookdeck. WooCommerce default hooks pass the order id, not the total.
Will WooCommerce and Stripe double-alert the same checkout?
Only if you subscribed Stripe payment_intent.payment_failed and the WooCommerce failed-status hook for the same charge. Pick one path per checkout stack.
Next steps
Turn on the failed-payment source you actually run (Stripe URL or WooCommerce hook), connect Telegram, decline a test payment, then add the second source if you have both.
Related: Stripe failed payments · WooCommerce orders · centralize webhook notifications