Saltar al contenido principal

Introducción

Envía correos electrónicos transaccionales profesionales automáticamente cuando ocurren eventos de pago y suscripción. Entrega confirmaciones de pago, actualizaciones de suscripción y notificaciones de fallos a través de Keplars sin necesidad de un servidor intermedio. Dodo Payments llama a la API de Keplars directamente usando un manejador de transformación JavaScript.
Esta integración requiere tu clave API de Keplars para autenticación. Encuéntrala en el panel de Keplars bajo Settings → API Keys, y verifica un dominio o dirección de remitente bajo Domains.

Comenzando

1

Open the Webhook Section

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

Select Keplars

Elige la tarjeta de integración Keplars.
Selecciona la tarjeta de integración Keplars
3

Enter API Key

Proporciona tu clave API de Keplars. Se envía como un token Bearer en cada solicitud.
Ingresa la URL de la API de Keplars, la clave API y suscríbete a eventos
4

Configure Transformation

Edita el código de transformación para dar formato a los correos electrónicos para Keplars. Reemplaza la dirección de remitente y los IDs de plantilla provisionales con los tuyos.
5

Test & Create

Prueba con cargas útiles de muestra y haz clic en Crear para activar el envío de correos electrónicos.
6

Done!

🎉 Los eventos de pago ahora activarán automáticamente los correos electrónicos transaccionales a través de Keplars.

Ejemplos de Código de Transformación

Cada manejador establece webhook.url al punto de envío de alta prioridad de Keplars y reescribe webhook.payload en una solicitud de Keplars (la clave API se envía automáticamente como un token Bearer). Reemplaza payments@mail.yourdomain.com con tu remitente verificado e your-keplars-*-template-id con tus IDs de plantilla reales.
to debe ser un arreglo, incluso para un solo destinatario. Al usar template_id, no envíes también subject o body. La plantilla los proporciona.

Correo de Confirmación de Pago

payment_succeeded.js
function handler(webhook) {
  if (webhook.eventType !== "payment.succeeded") return webhook;

  const data = webhook.payload.data || {};
  const paymentDate = new Date(webhook.payload.timestamp).toLocaleDateString("en-US", {
    year: "numeric", month: "long", day: "numeric",
  });

  webhook.url = "https://api.keplars.com/api/v1/send-email/high";
  webhook.payload = {
    to: [data.customer?.email],
    from: "payments@mail.yourdomain.com",
    template_id: "your-keplars-payment-success-template-id",
    params: {
      customer_name: data.customer?.name,
      amount: ((data.total_amount || 0) / 100).toFixed(2),
      currency: data.currency || "USD",
      payment_id: data.payment_id,
      payment_method: data.payment_method,
      payment_date: paymentDate,
    },
  };
  return webhook;
}

Notificación de Fallo de Pago

payment_failed.js
function handler(webhook) {
  if (webhook.eventType !== "payment.failed") return webhook;

  const data = webhook.payload.data || {};
  const paymentDate = new Date(webhook.payload.timestamp).toLocaleDateString("en-US", {
    year: "numeric", month: "long", day: "numeric",
  });

  webhook.url = "https://api.keplars.com/api/v1/send-email/high";
  webhook.payload = {
    to: [data.customer?.email],
    from: "payments@mail.yourdomain.com",
    template_id: "your-keplars-payment-failed-template-id",
    params: {
      customer_name: data.customer?.name,
      amount: ((data.total_amount || 0) / 100).toFixed(2),
      currency: data.currency || "USD",
      payment_id: data.payment_id,
      error_message: data.error_message || "Your payment could not be processed.",
      payment_date: paymentDate,
    },
  };
  return webhook;
}

Correo de Bienvenida a Suscripción

subscription_active.js
function handler(webhook) {
  if (webhook.eventType !== "subscription.active") return webhook;

  const data = webhook.payload.data || {};
  const nextBilling = data.next_billing_date
    ? new Date(data.next_billing_date).toLocaleDateString("en-US", {
        year: "numeric", month: "long", day: "numeric",
      })
    : "";

  webhook.url = "https://api.keplars.com/api/v1/send-email/high";
  webhook.payload = {
    to: [data.customer?.email],
    from: "payments@mail.yourdomain.com",
    template_id: "your-keplars-subscription-active-template-id",
    params: {
      customer_name: data.customer?.name,
      subscription_id: data.subscription_id,
      product_id: data.product_id,
      amount: ((data.recurring_pre_tax_amount || 0) / 100).toFixed(2),
      currency: data.currency || "USD",
      billing_interval: data.payment_frequency_interval || "month",
      next_billing_date: nextBilling,
    },
  };
  return webhook;
}

Correo de Cancelación de Suscripción

subscription_cancelled.js
function handler(webhook) {
  if (webhook.eventType !== "subscription.cancelled") return webhook;

  const data = webhook.payload.data || {};
  const cancellationDate = new Date(webhook.payload.timestamp).toLocaleDateString("en-US", {
    year: "numeric", month: "long", day: "numeric",
  });

  webhook.url = "https://api.keplars.com/api/v1/send-email/high";
  webhook.payload = {
    to: [data.customer?.email],
    from: "payments@mail.yourdomain.com",
    template_id: "your-keplars-subscription-cancelled-template-id",
    params: {
      customer_name: data.customer?.name,
      subscription_id: data.subscription_id,
      cancellation_date: cancellationDate,
    },
  };
  return webhook;
}

Consejos

  • Usa un dominio de remitente verificado o una dirección para mejor entregabilidad.
  • Crea una plantilla dedicada de Keplars por tipo de evento para que cada correo electrónico se mantenga dentro de la marca y del mensaje.
  • Personaliza cada correo electrónico pasando datos del cliente como nombre, monto e ID de pago a través de params.
  • Prueba primero en modo sandbox. Los envíos en sandbox se capturan en la Bandeja de Prueba de Keplars en lugar de ser entregados.

Solución de Problemas

  • Verifica que tu clave API sea correcta y esté activa en Keplars bajo Settings → API Keys.
  • Verifica que tu dominio o dirección de remitente esté verificado.
  • Dodo Payments muestra la respuesta de error de Keplars sin procesar en el registro de entrega del webhook. Veríficalo para más detalles.
  • El template_id en tu manejador debe coincidir con una plantilla activa en tu cuenta de Keplars. Verifica el ID (y que esté activo) en el panel.
  • Cada manejador verifica webhook.eventType y regresa temprano si no coincide. Asegúrate de que los eventos correctos estén suscritos en el endpoint del webhook de Dodo Payments.
Última modificación el 18 de junio de 2026