> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# N8N

> Integra Dodo Payments con N8N para automatizar flujos de trabajo y conectarte con más de 5,000 aplicaciones utilizando webhooks: potencia automatizaciones personalizables y potentes en entornos N8N autoalojados o en la nube.

## Introducción

Conecta Dodo Payments a miles de aplicaciones y servicios a través de N8N. Automatiza flujos de trabajo activando flujos de trabajo de N8N cuando ocurren eventos de pago, desde enviar correos electrónicos hasta actualizar hojas de cálculo, crear tareas, realizar operaciones en bases de datos y mucho más.

<Info>
  Esta integración requiere una URL de webhook de N8N desde la configuración de tu flujo de trabajo.
</Info>

## Comenzando

<Steps>
  <Step title="Open the Webhook Section">
    En el panel de control de Dodo Payments, navega a <b>Webhooks → + Agregar Endpoint</b> y expande el menú desplegable de integraciones.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/OBONg3OSDVHCK_pv/images/integrations/n8n.png?fit=max&auto=format&n=OBONg3OSDVHCK_pv&q=85&s=1477d1a9fdb4446ae4db5c976e7d6fb8" alt="Add Endpoint and integrations dropdown" style={{ maxHeight: '500px', width: 'auto' }} width="2870" height="1482" data-path="images/integrations/n8n.png" />
    </Frame>
  </Step>

  <Step title="Select N8N">
    Elige la tarjeta de integración <b>N8N</b>.
  </Step>

  <Step title="Create Webhook in N8N">
    En N8N, crea un nuevo flujo de trabajo y añade un nodo <b>Webhook</b> como desencadenante. Configúralo como un webhook POST y copia la URL del webhook.
  </Step>

  <Step title="Paste Webhook URL">
    Pega la URL del webhook de N8N en la configuración del endpoint.
  </Step>

  <Step title="Configure Transformation">
    Edita el código de transformación para formatear los datos para tu flujo de trabajo de N8N.
  </Step>

  <Step title="Test & Create">
    Prueba con cargas útiles de muestra y haz clic en <b>Create</b> para activar la integración.
  </Step>

  <Step title="Activate Workflow">
    En N8N, activa tu flujo de trabajo para comenzar a recibir eventos del webhook.
  </Step>

  <Step title="Done!">
    🎉 Los eventos de pago ahora activarán automáticamente tus flujos de trabajo de N8N.
  </Step>
</Steps>

## Ejemplos de Código de Transformación

### Carga Útil Básica del Webhook

```javascript basic_webhook.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.payload = {
      event_type: webhook.eventType,
      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",
      timestamp: webhook.payload.timestamp
    };
  }
  return webhook;
}
```

### Manejador de Eventos de Suscripción

```javascript subscription_webhook.js icon="js" expandable theme={null}
function handler(webhook) {
  const s = webhook.payload.data;
  switch (webhook.eventType) {
    case "subscription.active":
      webhook.payload = {
        event_type: "subscription_started",
        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,
        timestamp: webhook.payload.timestamp
      };
      break;
    case "subscription.cancelled":
      webhook.payload = {
        event_type: "subscription_cancelled",
        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,
        timestamp: webhook.payload.timestamp
      };
      break;
  }
  return webhook;
}
```

### Manejador de Alertas de Disputa

```javascript dispute_webhook.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType.startsWith("dispute.")) {
    const d = webhook.payload.data;
    webhook.payload = {
      event_type: webhook.eventType,
      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",
      timestamp: webhook.payload.timestamp
    };
  }
  return webhook;
}
```

## Casos de Uso Populares de N8N

<AccordionGroup>
  <Accordion title="Email Notifications">
    * Envía correos de Gmail/Outlook para confirmaciones de pago
    * Crea secuencias de correo en Mailchimp/ConvertKit
    * Envía notificaciones a Slack/Discord mediante webhooks
    * Crea registros en Google Sheets automáticamente
    * Envía mensajes de Telegram/WhatsApp
  </Accordion>

  <Accordion title="CRM Updates">
    * Añade contactos a HubSpot/Salesforce
    * Crea oportunidades en Pipedrive/Close
    * Actualiza registros de clientes en Airtable
    * Registra actividades en Monday.com
    * Sincroniza datos con bases de datos PostgreSQL/MySQL
  </Accordion>

  <Accordion title="Task Management">
    * Crea tareas en Asana/Trello
    * Añade elementos pendientes en Notion
    * Crea eventos en Google Calendar
    * Envía notificaciones SMS mediante Twilio
    * Crea incidencia en GitHub para disputas
  </Accordion>

  <Accordion title="Data Processing">
    * Transforma y enriquece los datos de pago
    * Almacena eventos en bases de datos (PostgreSQL, MongoDB)
    * Agrega métricas y análisis
    * Genera informes y exportaciones
    * Activa flujos de trabajo complejos de varios pasos
  </Accordion>
</AccordionGroup>

## Consejos

* Mantén la estructura de la carga útil simple para facilitar el análisis de nodos en N8N
* Usa nombres de campo consistentes en todos los eventos
* Incluye marcas de tiempo para la sincronización y programación de flujos de trabajo
* Prueba tu flujo de trabajo con datos de ejemplo antes de activarlo
* Usa el nodo IF de N8N para lógica condicional y enrutamiento
* Aprovecha el nodo Code de N8N para transformaciones de datos personalizadas
* Usa el nodo Switch para enrutar diferentes tipos de eventos a diferentes caminos
* Configura flujos de trabajo de error para manejar entregas de webhook fallidas

## Solución de Problemas

<AccordionGroup>
  <Accordion title="Workflow not triggering">
    * Verifica que la URL del webhook sea correcta y accesible
    * Comprueba que el flujo de trabajo esté activado en N8N
    * Asegúrate de que el nodo webhook esté configurado con el método POST
    * Prueba la entrega del webhook en el historial de ejecución de N8N
    * Verifica que la configuración de firewall/red permita webhooks entrantes
    * Revisa la configuración de autenticación del webhook en N8N si está establecida
  </Accordion>

  <Accordion title="Data not mapping correctly">
    * Comprueba los nombres de campo en las configuraciones de los nodos de N8N
    * Verifica que los tipos de datos coincidan con los formatos esperados en los nodos
    * Utiliza la función de prueba de N8N para inspeccionar los datos entrantes
    * Asegúrate de que el código de transformación devuelva JSON válido
    * Revisa la configuración del formato de respuesta del nodo webhook
    * Usa el nodo Set para renombrar o reestructurar campos
  </Accordion>

  <Accordion title="Workflow execution errors">
    * Revisa los registros de ejecución en N8N para obtener mensajes de error detallados
    * Comprueba la configuración de conexión de los nodos y las credenciales
    * Verifica que todos los campos obligatorios estén presentes en la carga útil
    * Prueba nodos individuales con datos de muestra
    * Habilita flujos de trabajo de errores para capturar y manejar fallos
    * Comprueba los límites de velocidad y cuotas de API para los servicios conectados
  </Accordion>
</AccordionGroup>
