Saltar al contenido principal

Introducción

Ejecuta funciones sin servidor y trabajos en segundo plano automáticamente cuando ocurren eventos de pago. Procesa pagos, envía notificaciones, actualiza bases de datos y ejecuta flujos de trabajo complejos con la plataforma de ejecución de funciones confiable de Inngest.
Esta integración requiere tu URL de webhook de Inngest de la configuración de tu función.

Comenzando

1

Abre la Sección de Webhooks

En tu panel de Dodo Payments, navega a Webhooks → + Agregar Endpoint y expande el menú desplegable de integraciones.
Agregar Endpoint y menú desplegable de integraciones
2

Selecciona Inngest

Elige la tarjeta de integración Inngest.
3

Crea la Función de Inngest

En Inngest, crea una nueva función y copia la URL del webhook de la configuración de la función.
4

Pega la URL del Webhook

Pega la URL del webhook de Inngest en la configuración del endpoint.
5

Configura la Transformación

Edita el código de transformación para formatear eventos para tu función de Inngest.
6

Prueba y Crea

Prueba con cargas útiles de ejemplo y haz clic en Crear para activar la integración.
7

¡Listo!

🎉 Los eventos de pago ahora activarán tus funciones de Inngest automáticamente.

Ejemplos de Código de Transformación

Carga Útil de Evento Básica

basic_event.js
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.payload = {
      name: "payment.succeeded",
      data: {
        payment_id: p.payment_id,
        amount: (p.total_amount / 100).toFixed(2),
        currency: p.currency || "USD",
        customer_email: p.customer.email,
        customer_name: p.customer.name,
        payment_method: p.payment_method || "unknown"
      },
      user: {
        email: p.customer.email
      },
      ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
    };
  }
  return webhook;
}

Manejador de Eventos de Suscripción

subscription_event.js
function handler(webhook) {
  const s = webhook.payload.data;
  switch (webhook.eventType) {
    case "subscription.active":
      webhook.payload = {
        name: "subscription.started",
        data: {
          subscription_id: s.subscription_id,
          customer_email: s.customer.email,
          customer_name: s.customer.name,
          product_id: s.product_id,
          amount: (s.recurring_pre_tax_amount / 100).toFixed(2),
          frequency: s.payment_frequency_interval,
          next_billing: s.next_billing_date
        },
        user: {
          email: s.customer.email
        },
        ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
      };
      break;
    case "subscription.cancelled":
      webhook.payload = {
        name: "subscription.cancelled",
        data: {
          subscription_id: s.subscription_id,
          customer_email: s.customer.email,
          cancelled_at: s.cancelled_at,
          cancel_at_next_billing: s.cancel_at_next_billing_date
        },
        user: {
          email: s.customer.email
        },
        ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
      };
      break;
  }
  return webhook;
}

Manejador de Eventos de Disputa

dispute_event.js
function handler(webhook) {
  if (webhook.eventType.startsWith("dispute.")) {
    const d = webhook.payload.data;
    webhook.payload = {
      name: webhook.eventType,
      data: {
        dispute_id: d.dispute_id,
        payment_id: d.payment_id,
        amount: (d.amount / 100).toFixed(2),
        status: d.dispute_status,
        stage: d.dispute_stage,
        remarks: d.remarks || "",
        urgent: webhook.eventType === "dispute.opened"
      },
      user: {
        email: d.customer?.email || "unknown"
      },
      ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
    };
  }
  return webhook;
}

Casos de Uso Comunes de Inngest

  • Enviar correos electrónicos de confirmación
  • Actualizar registros de clientes
  • Procesar reembolsos
  • Generar facturas
  • Actualizar inventario
  • Dar la bienvenida a nuevos suscriptores
  • Procesar cancelaciones
  • Enviar recordatorios de renovación
  • Actualizar ciclos de facturación
  • Manejar pagos fallidos
  • Actualizar métricas de ingresos
  • Rastrear el comportamiento del cliente
  • Generar informes
  • Sincronizar datos con plataformas de análisis
  • Calcular tasas de cancelación

Consejos

  • Usa nombres de eventos descriptivos para una mejor organización de funciones
  • Incluye contexto del usuario para la ejecución de funciones
  • Establece marcas de tiempo adecuadas para el orden de los eventos
  • Estructura los datos de manera consistente a través de eventos
  • Usa las funciones de reintento y manejo de errores de Inngest

Solución de Problemas

  • Verifica que la URL del webhook sea correcta y esté activa
  • Asegúrate de que la función de Inngest esté desplegada y activa
  • Asegúrate de que los nombres de los eventos coincidan con los disparadores de funciones
  • Revisa los registros de funciones de Inngest en busca de errores
  • Verifica que la estructura de la carga útil coincida con las expectativas de Inngest
  • Asegúrate de que los nombres de los eventos estén correctamente formateados
  • Asegúrate de que todos los campos requeridos estén incluidos
  • Prueba con la herramienta de prueba de webhook de Inngest