Saltar al contenido principal

Eventos de Recuperación de Carritos Abandonados

Los siguientes eventos de webhook rastrean el ciclo de vida de la recuperación de carritos abandonados:
EventoDescripción
abandoned_checkout.detectedSe ha detectado un pago abandonado. Enviado cuando un pago se identifica como abandonado (fallido o incompleto) y comienza el flujo de trabajo de recuperación.
abandoned_checkout.recoveredEl cliente completó el pago a través del enlace de recuperación. El campo recovered_payment_id contiene el ID de pago exitoso.

Campos de Carga Útil de Pago Abandonado

payment_id
string
requerido
El pago original que fue abandonado. Úselo para buscar detalles de producto, cantidad y moneda.
customer_id
string
requerido
El cliente que abandonó el pago.
abandonment_reason
string
requerido
Por qué se abandonó el pago. Uno de:
  • payment_failed — El cliente intentó el pago pero falló
  • checkout_incomplete — El cliente visitó el pago pero nunca intentó pagar
status
string
requerido
Estado actual del ciclo de vida de este intento de recuperación. Uno de:
  • abandoned — Detectado, aún no se han enviado correos electrónicos
  • recovering — Al menos un correo electrónico de recuperación enviado
  • recovered — El cliente completó el pago
  • exhausted — Todos los correos enviados o se encontró un nuevo pago
  • opted_out — Cliente se dio de baja
abandoned_at
string
requerido
Marca de tiempo ISO 8601 de cuando se detectó el pago como abandonado.
recovered_payment_id
string | null
El ID de pago del pago de recuperación exitoso. null hasta que el pago sea recuperado.

Ejemplo: Manejo de Webhooks de 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 });
});

Eventos de Dunning

Los siguientes eventos de webhook rastrean el ciclo de vida de la suscripción fallida:
EventoDescripción
dunning.startedSe ha creado un intento de dunning para una suscripción que ingresó a on_hold o fue cancelada por el cliente.
dunning.recoveredEl cliente actualizó su método de pago y el pago resultante fue exitoso. El campo payment_id contiene el ID de pago exitoso.

Campos de Carga Útil de Intento de Dunning

subscription_id
string
requerido
La suscripción que desencadenó el intento de dunning.
customer_id
string
requerido
El cliente que posee la suscripción.
trigger_state
string
requerido
El estado de suscripción que desencadenó el dunning. Uno de:
  • on_hold — Suscripción pausada por fallo en el pago
  • cancelled — Cliente canceló desde el portal del cliente
status
string
requerido
Estado actual del ciclo de vida de este intento de dunning. Uno de:
  • recovering — Se están enviando correos electrónicos de dunning
  • recovered — Cliente actualizó método de pago y el pago fue exitoso
  • exhausted — Todos los correos enviados o el estado de suscripción cambió
created_at
string
requerido
Marca de tiempo ISO 8601 de cuando se creó el intento de dunning.
payment_id
string | null
El ID de pago del pago de recuperación exitoso. null mientras se recupera.

Ejemplo: Manejo de Webhooks de 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 });
});
Suscríbase a ambos dunning.started e dunning.recovered para rastrear el ciclo de vida completo del dunning. Use dunning.started para pausar periodos de gracia o marcar suscripciones en riesgo en su sistema.

Abandoned Cart Recovery

Configure secuencias de correos electrónicos de ACR e incentivos de descuento.

Subscription Dunning

Configure secuencias de correos electrónicos de dunning para suscripciones vencidas.

Subscription Webhooks

Eventos relacionados con el ciclo de vida de suscripción como subscription.on_hold e subscription.cancelled.

Esquema de Carga Útil de Webhook

Webhook payload for abandoned_checkout.detected and abandoned_checkout.recovered events

abandoned_at
string<date-time>
requerido
abandonment_reason
enum<string>
requerido
Opciones disponibles:
payment_failed,
checkout_incomplete
brand_id
string
requerido

Brand id this abandoned checkout belongs to

customer_id
string
requerido
payment_id
string
requerido
status
enum<string>
requerido
Opciones disponibles:
abandoned,
recovering,
recovered,
exhausted,
opted_out
recovered_payment_id
string | null
Última modificación el 4 de mayo de 2026