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 desde la configuración de tu función.

Comenzando

1

Open the Webhook Section

En tu panel de Dodo Payments, navega a Webhooks → + Add Endpoint y despliega el menú desplegable de integraciones.
Add Endpoint and integrations dropdown
2

Select Inngest

Elige la tarjeta de integración Inngest.
3

Create Inngest Function

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

Paste Webhook URL

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

Configure Transformation

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

Test & Create

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

Done!

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

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
  • Gestionar pagos fallidos
  • Actualizar métricas de ingresos
  • Rastrear el comportamiento del cliente
  • Generar informes
  • Sincronizar datos con plataformas de análisis
  • Calcular tasas de abandono

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

  • Verificar que la URL del webhook sea correcta y esté activa
  • Comprobar que la función de Inngest esté desplegada y activa
  • Asegurarse de que los nombres de eventos coincidan con los desencadenadores de la función
  • Revisar los registros de la función de Inngest en busca de errores
  • Comprobar que la estructura de la carga útil coincida con las expectativas de Inngest
  • Verificar que los nombres de eventos estén formateados correctamente
  • Asegurarse de que se incluyan todos los campos obligatorios
  • Probar con la herramienta de pruebas de webhook de Inngest