Saltar al contenido principal

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.

Introducción

Envía correos electrónicos transaccionales profesionales automáticamente cuando ocurren eventos de pago. Entrega confirmaciones de pago, actualizaciones de suscripción y notificaciones importantes con la infraestructura de correo electrónico confiable de Resend y excelentes tasas de entregabilidad.
Esta integración requiere tu clave API de Resend para la autenticació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.
Agregar Endpoint y menú desplegable de integraciones
2

Select Resend

Elige la tarjeta de integración Resend.
3

Enter API Key

Proporciona tu clave API de Resend en la configuración.
4

Configure Transformation

Edita el código de transformación para formatear los correos para la API de Resend.
5

Test & Create

Prueba con cargas útiles de ejemplo y haz clic en Create para activar el envío de correos.
6

Done!

🎉 Los eventos de pago ahora activarán automáticamente correos transaccionales a través de Resend.

Ejemplos de código de transformación

Correo electrónico de confirmación de pago

payment_confirmation.js
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.url = "https://api.resend.com/emails";
    webhook.payload = {
      from: "payments@yourdomain.com",
      to: [p.customer.email],
      subject: "Payment Confirmation - $" + (p.total_amount / 100).toFixed(2),
      html: `
        <h2>Payment Successful!</h2>
        <p>Hi ${p.customer.name},</p>
        <p>Your payment of $${(p.total_amount / 100).toFixed(2)} has been processed successfully.</p>
        <ul>
          <li><strong>Payment ID:</strong> ${p.payment_id}</li>
          <li><strong>Amount:</strong> $${(p.total_amount / 100).toFixed(2)}</li>
          <li><strong>Date:</strong> ${new Date(webhook.payload.timestamp).toLocaleDateString()}</li>
          <li><strong>Method:</strong> ${p.payment_method || "Unknown"}</li>
        </ul>
        <p>Thank you for your business!</p>
      `,
      text: `Payment Successful! Your payment of $${(p.total_amount / 100).toFixed(2)} has been processed. Payment ID: ${p.payment_id}`
    };
  }
  return webhook;
}

Correo electrónico de bienvenida de suscripción

subscription_welcome.js
function handler(webhook) {
  if (webhook.eventType === "subscription.active") {
    const s = webhook.payload.data;
    webhook.url = "https://api.resend.com/emails";
    webhook.payload = {
      from: "welcome@yourdomain.com",
      to: [s.customer.email],
      subject: "Welcome to Your Subscription!",
      html: `
        <h2>Welcome to Your Subscription!</h2>
        <p>Hi ${s.customer.name},</p>
        <p>Your subscription has been activated successfully.</p>
        <ul>
          <li><strong>Subscription ID:</strong> ${s.subscription_id}</li>
          <li><strong>Product:</strong> ${s.product_id}</li>
          <li><strong>Amount:</strong> $${(s.recurring_pre_tax_amount / 100).toFixed(2)}/${s.payment_frequency_interval}</li>
          <li><strong>Next Billing:</strong> ${new Date(s.next_billing_date).toLocaleDateString()}</li>
        </ul>
        <p>You can manage your subscription anytime from your account dashboard.</p>
      `,
      text: `Welcome! Your subscription is now active. Amount: $${(s.recurring_pre_tax_amount / 100).toFixed(2)}/${s.payment_frequency_interval}`
    };
  }
  return webhook;
}

Notificación de fallo de pago

payment_failure.js
function handler(webhook) {
  if (webhook.eventType === "payment.failed") {
    const p = webhook.payload.data;
    webhook.url = "https://api.resend.com/emails";
    webhook.payload = {
      from: "support@yourdomain.com",
      to: [p.customer.email],
      subject: "Payment Failed - Action Required",
      html: `
        <h2>Payment Failed</h2>
        <p>Hi ${p.customer.name},</p>
        <p>We were unable to process your payment of $${(p.total_amount / 100).toFixed(2)}.</p>
        <ul>
          <li><strong>Payment ID:</strong> ${p.payment_id}</li>
          <li><strong>Amount:</strong> $${(p.total_amount / 100).toFixed(2)}</li>
          <li><strong>Error:</strong> ${p.error_message || "Payment processing failed"}</li>
        </ul>
        <p>Please update your payment method or contact support for assistance.</p>
        <a href="https://yourdomain.com/update-payment">Update Payment Method</a>
      `,
      text: `Payment Failed: We couldn't process your $${(p.total_amount / 100).toFixed(2)} payment. Please update your payment method.`
    };
  }
  return webhook;
}

Consejos

  • Usa dominios de remitente verificados para mejor entregabilidad
  • Incluye versiones tanto en HTML como en texto de los correos electrónicos
  • Personaliza el contenido con datos del cliente
  • Usa líneas de asunto claras y orientadas a la acción
  • Incluye enlaces de cancelación de suscripción para cumplimiento
  • Prueba las plantillas de correo electrónico antes de ponerlas en producción

Solución de problemas

  • Verifica que la clave API sea correcta y esté activa
  • Comprueba que el dominio del remitente esté verificado en Resend
  • Asegúrate de que las direcciones de correo de los destinatarios sean válidas
  • Revisa los límites y cuotas de envío de Resend
  • Valida que la estructura JSON coincida con el formato de la API de Resend
  • Verifica que todos los campos requeridos estén presentes
  • Asegúrate de que el contenido HTML esté correctamente formateado
  • Confirma que la dirección de correo del remitente esté verificada
Last modified on February 27, 2026