Zum Hauptinhalt springen

Ereignisse zur Wiederherstellung verlassener Warenkörbe

Die folgenden Webhook-Ereignisse verfolgen den Lebenszyklus der Wiederherstellung von verlassenen Warenkörben:
EreignisBeschreibung
abandoned_checkout.detectedEin verlassener Checkout wurde erkannt. Gesendet, wenn eine Zahlung als verlassen (fehlgeschlagen oder unvollständig) identifiziert wird und der Wiederherstellungs-Workflow beginnt.
abandoned_checkout.recoveredDer Kunde hat die Zahlung über den Wiederherstellungslink abgeschlossen. Das Feld recovered_payment_id enthält die erfolgreiche Zahlungs-ID.

Felder des Payloads für verlassene Checkouts

payment_id
string
erforderlich
Die ursprüngliche Zahlung, die verlassen wurde. Verwenden Sie dies, um Produkt-, Betrags- und Währungsdetails nachzuschlagen.
customer_id
string
erforderlich
Der Kunde, der den Checkout verlassen hat.
abandonment_reason
string
erforderlich
Warum der Checkout verlassen wurde. Einer der folgenden:
  • payment_failed — Kunde hat versucht zu zahlen, aber es scheiterte
  • checkout_incomplete — Kunde hat den Checkout besucht, aber nie versucht zu zahlen
status
string
erforderlich
Aktueller Lebenszyklusstatus dieses Wiederherstellungsversuchs. Einer der folgenden:
  • abandoned — Erkannt, bisher keine E-Mails gesendet
  • recovering — Mindestens eine Wiederherstellungs-E-Mail gesendet
  • recovered — Kunde hat die Zahlung abgeschlossen
  • exhausted — Alle E-Mails gesendet oder neuerer Checkout gefunden
  • opted_out — Kunde hat sich abgemeldet
abandoned_at
string
erforderlich
ISO 8601-Zeitstempel, wann der Checkout als verlassen erkannt wurde.
recovered_payment_id
string | null
Die Zahlungs-ID der erfolgreichen Wiederherstellungszahlung. null bis der Checkout wiederhergestellt wird.

Beispiel: Umgang mit ACR-Webhooks

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 });
});

Dunning-Ereignisse

Die folgenden Webhook-Ereignisse verfolgen den Lebenszyklus der Abonnentenverwaltung:
EreignisBeschreibung
dunning.startedEin Dunning-Versuch wurde für ein Abonnement erstellt, das in on_hold eingetreten ist oder vom Kunden storniert wurde.
dunning.recoveredDer Kunde hat seine Zahlungsmethode aktualisiert und die resultierende Zahlung war erfolgreich. Das Feld payment_id enthält die erfolgreiche Zahlungs-ID.

Felder des Payloads für Dunning-Versuche

subscription_id
string
erforderlich
Das Abonnement, das den Dunning-Versuch ausgelöst hat.
customer_id
string
erforderlich
Der Kunde, dem das Abonnement gehört.
trigger_state
string
erforderlich
Der Abonnementstatus, der das Dunning ausgelöst hat. Einer der folgenden:
  • on_hold — Abonnement aufgrund eines Zahlungsfehlers pausiert
  • cancelled — Kunde hat über das Kundenportal storniert
status
string
erforderlich
Aktueller Lebenszyklusstatus dieses Dunning-Versuchs. Einer der folgenden:
  • recovering — Dunning-E-Mails werden gesendet
  • recovered — Kunde hat Zahlungsmethode aktualisiert und Zahlung war erfolgreich
  • exhausted — Alle E-Mails gesendet oder Abonnementstatus geändert
created_at
string
erforderlich
ISO 8601-Zeitstempel, wann der Dunning-Versuch erstellt wurde.
payment_id
string | null
Die Zahlungs-ID der erfolgreichen Wiederherstellungszahlung. null während der Wiederherstellung.

Beispiel: Umgang mit Dunning-Webhooks

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 });
});
Abonnieren Sie sowohl dunning.started als auch dunning.recovered, um den vollständigen Lebenszyklus der Abonnentenverwaltung zu verfolgen. Verwenden Sie dunning.started, um Karenzzeiten zu pausieren oder gefährdete Abonnements in Ihrem System zu markieren.

Abandoned Cart Recovery

Konfigurieren Sie ACR-E-Mail-Sequenzen und Rabattanreize.

Subscription Dunning

Konfigurieren Sie Dunning-E-Mail-Sequenzen für abgelaufene Abonnements.

Subscription Webhooks

Verwandte Abonnement-Lebenszyklusereignisse wie subscription.on_hold und subscription.cancelled.

Webhook-Payload-Schema

Webhook payload for abandoned_checkout.detected and abandoned_checkout.recovered events

abandoned_at
string<date-time>
erforderlich
abandonment_reason
enum<string>
erforderlich
Verfügbare Optionen:
payment_failed,
checkout_incomplete
customer_id
string
erforderlich
payment_id
string
erforderlich
status
enum<string>
erforderlich
Verfügbare Optionen:
abandoned,
recovering,
recovered,
exhausted,
opted_out
recovered_payment_id
string | null
Last modified on April 20, 2026