Chuyển đến nội dung chính

Giới thiệu

Tự động gửi email giao dịch chuyên nghiệp khi xảy ra sự kiện thanh toán và đăng ký. Gửi xác nhận thanh toán, cập nhật đăng ký và thông báo lỗi thông qua Keplars mà không cần máy chủ trung gian. Dodo Payments gọi API Keplars trực tiếp bằng trình xử lý chuyển đổi JavaScript.
Trong tích hợp này, bạn cần khóa API Keplars của mình để xác thực. Tìm thấy nó trong bảng điều khiển Keplars dưới Settings → API Keys, và xác minh một miền hoặc địa chỉ người gửi dưới Domains.

Bắt đầu

1

Open the Webhook Section

Trong bảng điều khiển Dodo Payments, điều hướng đến Webhooks → + Add Endpoint và mở rộng danh sách tích hợp.
2

Select Keplars

Chọn thẻ tích hợp Keplars.
Chọn thẻ tích hợp Keplars
3

Enter API Key

Cung cấp khóa API Keplars của bạn. Nó được gửi dưới dạng mã thông báo Bearer trong mỗi yêu cầu.
Nhập URL API Keplars, khóa API và đăng ký các sự kiện
4

Configure Transformation

Chỉnh sửa mã chuyển đổi để định dạng email cho Keplars. Thay thế địa chỉ người gửi tạm thời và ID mẫu bằng của bạn.
5

Test & Create

Kiểm tra với các tải mẫu và nhấp vào Tạo để kích hoạt gửi email.
6

Done!

🎉 Các sự kiện thanh toán bây giờ sẽ tự động kích hoạt email giao dịch qua Keplars.

Ví dụ về mã chuyển đổi

Mỗi trình xử lý đặt webhook.url cho điểm kết gửi ưu tiên cao của Keplars và viết lại webhook.payload thành một yêu cầu Keplars (khóa API được gửi tự động dưới dạng mã thông báo Bearer). Thay thế payments@mail.yourdomain.com bằng người gửi đã xác minh của bạn và your-keplars-*-template-id bằng các ID mẫu thực tế của bạn.
to phải là một mảng, ngay cả với một người nhận duy nhất. Khi sử dụng template_id, không gửi thêm subject hoặc body. Mẫu sẽ cung cấp chúng.

Email xác nhận thanh toán

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;
}

Thông báo lỗi thanh toán

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;
}

Email chào mừng đăng ký

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;
}

Email hủy bỏ đăng ký

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;
}

Mẹo

  • Sử dụng một miền hoặc địa chỉ người gửi đã xác minh để cải thiện khả năng gửi email.
  • Tạo một mẫu Keplars riêng cho mỗi loại sự kiện để mỗi email luôn phù hợp với thương hiệu.
  • Cá nhân hóa từng email bằng cách chuyển dữ liệu khách hàng như tên, số tiền và ID thanh toán qua params.
  • Thử nghiệm trước trong chế độ sandbox. Các lần gửi trong sandbox được ghi lại trong Hộp thư Kiểm tra Keplars thay vì được gửi đi.

Xử lý sự cố

  • Xác minh khóa API của bạn là chính xác và đang hoạt động trong Keplars dưới Settings → API Keys.
  • Xác minh miền hoặc địa chỉ người gửi của bạn đã được xác minh.
  • Dodo Payments hiển thị phản hồi lỗi thô của Keplars trong nhật ký gửi webhook. Kiểm tra chi tiết tại đó.
  • template_id trong trình xử lý của bạn phải khớp với một mẫu đang hoạt động trong tài khoản Keplars của bạn. Xác minh ID (và rằng nó đang hoạt động) trong bảng điều khiển.
  • Mỗi trình xử lý kiểm tra webhook.eventType và trả về sớm nếu không khớp. Đảm bảo các sự kiện đúng đã được đăng ký trên điểm cuối webhook Dodo Payments.
Lần sửa đổi cuối 18 tháng 6, 2026