Passer au contenu principal

Événements de récupération de panier abandonné

Les événements webhook suivants suivent le cycle de vie de la récupération de panier abandonné :
ÉvénementDescription
abandoned_checkout.detectedUn paiement abandonné a été détecté. Envoyé lorsqu’un paiement est identifié comme abandonné (échoué ou incomplet) et que le flux de travail de récupération commence.
abandoned_checkout.recoveredLe client a complété le paiement via le lien de récupération. Le champ recovered_payment_id contient l’ID de paiement réussi.

Champs de la charge utile du paiement abandonné

payment_id
string
requis
Le paiement original qui a été abandonné. Utilisez ceci pour rechercher les détails du produit, le montant et la devise.
customer_id
string
requis
Le client qui a abandonné le paiement.
abandonment_reason
string
requis
Pourquoi le paiement a été abandonné. L’un des cas suivants :
  • payment_failed — Le client a tenté de payer mais cela a échoué
  • checkout_incomplete — Le client a visité le paiement mais n’a jamais tenté de payer
status
string
requis
État actuel du cycle de vie de cette tentative de récupération. L’un des suivants :
  • abandoned — Détecté, pas encore de courriels envoyés
  • recovering — Au moins un courriel de récupération envoyé
  • recovered — Le client a complété le paiement
  • exhausted — Tous les courriels envoyés ou nouveau paiement trouvé
  • opted_out — Le client s’est désabonné
abandoned_at
string
requis
Horodatage ISO 8601 quand le paiement a été détecté comme abandonné.
recovered_payment_id
string | null
L’ID de paiement de la récupération réussie. null jusqu’à la récupération.

Exemple : Gestion des webhooks ACR

app.post('/webhooks/dodo', async (req, res) => {
  const event = req.body;

  switch (event.type) {
    case 'abandoned_checkout.detected':
      console.log(`Checkout abandoned: ${event.data.payment_id}`);
      console.log(`Reason: ${event.data.abandonment_reason}`);
      // Track abandonment in your analytics
      await trackAbandonment(event.data);
      break;

    case 'abandoned_checkout.recovered':
      console.log(`Checkout recovered: ${event.data.payment_id}`);
      console.log(`Recovery payment: ${event.data.recovered_payment_id}`);
      // Grant access, update records
      await handleRecovery(event.data);
      break;
  }

  res.json({ received: true });
});

Événements de recouvrement

Les événements webhook suivants suivent le cycle de vie du recouvrement d’abonnement :
ÉvénementDescription
dunning.startedUne tentative de recouvrement a été créée pour un abonnement qui a été mis en on_hold ou a été annulé par le client.
dunning.recoveredLe client a mis à jour son mode de paiement et le paiement a réussi. Le champ payment_id contient l’ID de paiement réussi.

Champs de la charge utile de tentative de recouvrement

subscription_id
string
requis
L’abonnement qui a déclenché la tentative de recouvrement.
customer_id
string
requis
Le client qui possède l’abonnement.
trigger_state
string
requis
L’état de l’abonnement qui a déclenché le recouvrement. L’un des cas suivants :
  • on_hold — Abonnement en pause à cause d’un échec de paiement
  • cancelled — Annulé par le client depuis le portail client
status
string
requis
État actuel du cycle de vie de cette tentative de recouvrement. L’un des suivants :
  • recovering — Les courriels de recouvrement sont envoyés
  • recovered — Le client a mis à jour le mode de paiement et le paiement a réussi
  • exhausted — Tous les courriels envoyés ou l’état de l’abonnement a changé
created_at
string
requis
Horodatage ISO 8601 de la création de la tentative de recouvrement.
payment_id
string | null
L’ID de paiement de la récupération réussie. null pendant la récupération.

Exemple : Gestion des webhooks de recouvrement

app.post('/webhooks/dodo', async (req, res) => {
  const event = req.body;

  switch (event.type) {
    case 'dunning.started':
      console.log(`Dunning started for subscription: ${event.data.subscription_id}`);
      console.log(`Trigger: ${event.data.trigger_state}`);
      // Track dunning in your system
      await trackDunning(event.data);
      break;

    case 'dunning.recovered':
      console.log(`Subscription recovered: ${event.data.subscription_id}`);
      console.log(`Recovery payment: ${event.data.payment_id}`);
      // Reactivate access, update records
      await handleDunningRecovery(event.data);
      break;
  }

  res.json({ received: true });
});
Abonnez-vous à dunning.started et dunning.recovered pour suivre le cycle de vie complet du recouvrement. Utilisez dunning.started pour suspendre les périodes de grâce ou signaler les abonnements à risque dans votre système.

Abandoned Cart Recovery

Configurez les séquences d’emails ACR et les incitations pour des réductions.

Subscription Dunning

Configurez les séquences d’emails de recouvrement pour les abonnements échus.

Subscription Webhooks

Événements liés au cycle de vie d’abonnement comme subscription.on_hold et subscription.cancelled.

Schéma de la charge utile du webhook

Webhook payload for abandoned_checkout.detected and abandoned_checkout.recovered events

abandoned_at
string<date-time>
requis
abandonment_reason
enum<string>
requis
Options disponibles:
payment_failed,
checkout_incomplete
customer_id
string
requis
payment_id
string
requis
status
enum<string>
requis
Options disponibles:
abandoned,
recovering,
recovered,
exhausted,
opted_out
recovered_payment_id
string | null
Last modified on April 20, 2026