Vai al contenuto principale

Eventi di Recupero del Carrello Abbandonato

I seguenti eventi webhook tracciano il ciclo di vita del recupero del carrello abbandonato:
EventoDescrizione
abandoned_checkout.detectedÈ stato rilevato un checkout abbandonato. Inviato quando un pagamento viene identificato come abbandonato (fallito o incompleto) e inizia il flusso di lavoro di recupero.
abandoned_checkout.recoveredIl cliente ha completato il pagamento tramite il link di recupero. Il campo recovered_payment_id contiene l’ID del pagamento riuscito.

Campi del Payload del Checkout Abbandonato

payment_id
string
obbligatorio
Il pagamento originale che è stato abbandonato. Usalo per cercare i dettagli del prodotto, importo e valuta.
customer_id
string
obbligatorio
Il cliente che ha abbandonato il checkout.
abandonment_reason
string
obbligatorio
Perché il checkout è stato abbandonato. Uno di:
  • payment_failed — Il cliente ha tentato il pagamento ma è fallito
  • checkout_incomplete — Il cliente ha visitato il checkout ma non ha mai tentato il pagamento
status
string
obbligatorio
Stato attuale del ciclo di vita di questo tentativo di recupero. Uno di:
  • abandoned — Rilevato, nessuna email ancora inviata
  • recovering — Almeno un’email di recupero inviata
  • recovered — Il cliente ha completato il pagamento
  • exhausted — Tutte le email inviate o nuovo checkout trovato
  • opted_out — Cliente disiscritto
abandoned_at
string
obbligatorio
Timestamp ISO 8601 di quando il checkout è stato rilevato come abbandonato.
recovered_payment_id
string | null
L’ID del pagamento di recupero riuscito. null fino a quando il checkout non viene recuperato.

Esempio: Gestione dei Webhook 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 });
});

Eventi Dunning

I seguenti eventi webhook tracciano il ciclo di vita della gestione delle sottoscrizioni:
EventoDescrizione
dunning.startedÈ stato creato un tentativo di dunning per una sottoscrizione entrata in on_hold o cancellata dal cliente.
dunning.recoveredIl cliente ha aggiornato il metodo di pagamento e il pagamento risultante è riuscito. Il campo payment_id contiene l’ID del pagamento riuscito.

Campi del Payload del Tentativo di Dunning

subscription_id
string
obbligatorio
La sottoscrizione che ha attivato il tentativo di dunning.
customer_id
string
obbligatorio
Il cliente che possiede la sottoscrizione.
trigger_state
string
obbligatorio
Lo stato della sottoscrizione che ha attivato il dunning. Uno di:
  • on_hold — Sottoscrizione sospesa a causa di un fallimento del pagamento
  • cancelled — Cliente cancellato dal portale clienti
status
string
obbligatorio
Stato attuale del ciclo di vita di questo tentativo di dunning. Uno di:
  • recovering — Le email di dunning sono in invio
  • recovered — Il cliente ha aggiornato il metodo di pagamento e il pagamento è riuscito
  • exhausted — Tutte le email inviate o lo stato della sottoscrizione è cambiato
created_at
string
obbligatorio
Timestamp ISO 8601 di quando il tentativo di dunning è stato creato.
payment_id
string | null
L’ID del pagamento di recupero riuscito. null durante il recupero.

Esempio: Gestione dei Webhook Dunning

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 });
});
Iscriviti a dunning.started e dunning.recovered per tracciare l’intero ciclo di vita del dunning. Utilizza dunning.started per sospendere i periodi di grazia o segnalare sottoscrizioni a rischio nel tuo sistema.

Abandoned Cart Recovery

Configura sequenze email ACR e incentivi scontati.

Subscription Dunning

Configura sequenze email di dunning per le sottoscrizioni scadute.

Subscription Webhooks

Eventi del ciclo di vita delle sottoscrizioni correlati come subscription.on_hold e subscription.cancelled.

Schema del Payload del Webhook

Webhook payload for abandoned_checkout.detected and abandoned_checkout.recovered events

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