Messaging Me

Cas d’usageMoins d’abonnements perdus sur une carte refusée, grâce à un message WhatsApp.

Quand Stripe signale un paiement échoué, votre application envoie à l’utilisateur un message WhatsApp avec le lien vers sa page de facturation. Il met à jour sa carte avant de perdre l’accès.

La bienvenue, puis la relance : 38 secondes.

De la demande dans Claude Code au paiement réussi, sur une vraie conversation WhatsApp. Le même film montre d’abord la bienvenue à l’inscription.

Comment ça circule.

Le paiement échoué, de Stripe au message WhatsAppStripeinvoice.payment_failedle paiement échoueVotre appson webhook Stripeune clé par facturePOST /v1/sendsSur son WhatsApple lien de facturation
Stripe envoie invoice.payment_failed au webhook de votre app, qui retrouve l’utilisateur et envoie le modèle par POST /v1/sends, avec une clé d’idempotence par facture.

Pas à pas, avec le vrai.

  1. 1

    Le modèle de paiement échoué

    Claude Code le crée par create_template, en catégorie utilitaire : une alerte sur le compte. Le prénom, et un bouton « Mettre à jour ma carte » vers votre page de facturation ; get_template_status confirme l’approbation.

  2. 2

    Le webhook Stripe que vous avez déjà

    Sur l’événement invoice.payment_failed, et une fois la signature de Stripe vérifiée, votre application retrouve l’utilisateur derrière le client Stripe.

  3. 3

    L’envoi

    Elle envoie le modèle par POST /v1/sends, avec une clé d’idempotence tirée de la facture : un même événement livré deux fois dans les 24 heures n’envoie qu’un message.

  4. 4

    La carte mise à jour

    L’utilisateur touche le bouton et met à jour sa carte sur votre page de facturation, avant de perdre l’accès.

Ce que vous tapez dans Claude Code

Le plugin installé, une phrase suffit. Celle du film branche aussi la bienvenue à l’inscription : Claude Code crée les deux modèles, écrit le code et teste.

/messagingme:demarrer à l’inscription (app/inscription.ts), un whatsapp de bienvenue avec le lien pour créer son premier planning. et quand stripe signale un paiement échoué, un whatsapp avec le lien pour mettre à jour la carte

Le webhook Stripe, tel que Claude Code l’écrit

import { messagingme } from '../../../lib/messagingme';
import { userOfCustomer, verifiedStripeEvent } from '../../../lib/billing';

// Your Stripe webhook, the one you already have. The template payment_failed is UTILITY (an account alert): one
// variable, the first name, and a URL button to your billing page.
export async function POST(req: Request) {
  const event = await verifiedStripeEvent(req);
  if (!event) return new Response(null, { status: 400 });
  if (event.type === 'invoice.payment_failed') {
    const invoice = event.data.object;
    const user = await userOfCustomer(invoice.customer);
    if (user) {
      // A failed WhatsApp send never fails the Stripe webhook: Stripe would retry it, then disable it.
      try {
        const send = await messagingme.POST('/v1/sends', {
          body: {
            target: { template: { name: 'payment_failed', language: 'en' } },
            recipients: [{ phone: user.phone, variables: { firstName: user.firstName } }],
            params: [{ position: 1, source: { type: 'variable', key: 'firstName' } }],
          },
          // Stripe may deliver the same event again: within 24 hours, one message per invoice.
          idempotencyKey: `payment-${invoice.id}`,
        });
        // A refused recipient (STOP, plan limit) is not an error: it is listed in skipped, with its reason.
        if (send.skippedTotal > 0) console.warn(`payment ${invoice.id} not sent: ${send.skipped[0]?.reason}`);
      } catch (e) {
        console.error(`payment ${invoice.id}: WhatsApp send failed`, e);
      }
    }
  }
  return new Response(null, { status: 200 });
}

app/api/stripe/route.ts · tout le code dans le guide

Ce que vous payez.

  • L’offre Free suffit pour démarrer : 1 000 modèles envoyés par mois et 100 contacts, l’API et le serveur MCP compris ; au-delà, le Pro.
  • Meta facture directement chaque modèle utilitaire à votre entreprise, selon sa grille et le pays de l’utilisateur.

Questions fréquentes.

Faut-il une adresse de webhook Messaging Me ?

Non : tout part du webhook Stripe que votre application a déjà, et rien ne revient vers elle.

Et si Meta reclasse le modèle en marketing ?

Il ne partirait plus qu’aux contacts qui ont consenti. Gardez un texte factuel : le paiement, la carte, l’accès.

Combien coûte une relance ?

La Free inclut 1 000 modèles par mois. Meta facture chaque modèle utilitaire à votre entreprise, selon sa grille et le pays de l’utilisateur.

Stripe peut-il envoyer deux fois le même événement ?

Oui, et la clé d’idempotence tirée de la facture le couvre : dans les 24 heures, un seul message part. Et un échec de l’envoi WhatsApp ne fait jamais échouer votre webhook Stripe.

L’utilisateur doit-il avoir accepté de recevoir des messages ?

Meta demande que la personne ait accepté d’être contactée sur WhatsApp : demandez-le à l’inscription ou dans son compte. Un utilisateur qui répond STOP ne reçoit plus rien.

Relancez vos paiements échoués aujourd’hui.

Le plugin en deux commandes, puis la phrase ci-dessus dans Claude Code. Aucun compte à créer.

Démarrer avec Claude Code · Les tarifs · Tous les cas d’usage