> ## 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.

# Gửi lại

> Gửi email giao dịch qua Resend dựa trên các sự kiện thanh toán của Dodo với tỷ lệ giao hàng cao.

## Giới thiệu

Gửi email giao dịch chuyên nghiệp tự động khi có sự kiện thanh toán xảy ra. Gửi xác nhận thanh toán, cập nhật đăng ký và thông báo quan trọng với hạ tầng email đáng tin cậy của Resend và tỷ lệ giao hàng xuất sắc.

<Info>
  Tích hợp này yêu cầu Khóa API Resend của bạn để xác thực.
</Info>

## Bắt đầu

<Steps>
  <Step title="Open the Webhook Section">
    Trong bảng điều khiển Dodo Payments của bạn, điều hướng đến <b>Webhooks → + Thêm Endpoint</b> và mở rộng menu thả xuống tích hợp.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/slbAEdrLLwKHfaRf/images/integrations/resend.png?fit=max&auto=format&n=slbAEdrLLwKHfaRf&q=85&s=80191f648ad4a4f4b5e8186668da0791" alt="Thêm Endpoint và menu thả xuống tích hợp" style={{ maxHeight: '500px', width: 'auto' }} width="1668" height="946" data-path="images/integrations/resend.png" />
    </Frame>
  </Step>

  <Step title="Select Resend">
    Chọn thẻ tích hợp <b>Resend</b>.
  </Step>

  <Step title="Enter API Key">
    Cung cấp Khóa API Resend trong cấu hình.
  </Step>

  <Step title="Configure Transformation">
    Chỉnh sửa mã chuyển đổi để định dạng email phù hợp với API của Resend.
  </Step>

  <Step title="Test & Create">
    Thử nghiệm với các payload mẫu và nhấp <b>Create</b> để kích hoạt gửi email.
  </Step>

  <Step title="Done!">
    🎉 Các sự kiện thanh toán giờ đây sẽ tự động kích hoạt email giao dịch qua Resend.
  </Step>
</Steps>

## Ví dụ Mã Biến đổi

### Email Xác nhận Thanh toán

```javascript payment_confirmation.js icon="js" expandable theme={null}
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;
}
```

### Email Chào mừng Đăng ký

```javascript subscription_welcome.js icon="js" expandable theme={null}
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;
}
```

### Thông báo Thất bại Thanh toán

```javascript payment_failure.js icon="js" expandable theme={null}
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;
}
```

## Mẹo

* Sử dụng miền người gửi đã được xác minh để có tỷ lệ giao hàng tốt hơn
* Bao gồm cả phiên bản HTML và văn bản của email
* Cá nhân hóa nội dung với dữ liệu khách hàng
* Sử dụng tiêu đề rõ ràng, hướng hành động
* Bao gồm liên kết hủy đăng ký để tuân thủ
* Kiểm tra mẫu email trước khi đưa vào hoạt động

## Khắc phục sự cố

<AccordionGroup>
  <Accordion title="Emails not being sent">
    * Xác minh Khóa API là chính xác và đang hoạt động
    * Kiểm tra rằng tên miền người gửi đã được xác minh trong Resend
    * Đảm bảo địa chỉ email người nhận hợp lệ
    * Xem lại giới hạn và hạn mức gửi của Resend
  </Accordion>

  <Accordion title="Transformation errors">
    * Xác thực cấu trúc JSON phù hợp định dạng API của Resend
    * Kiểm tra rằng tất cả các trường bắt buộc đều có mặt
    * Đảm bảo nội dung HTML được định dạng đúng
    * Xác minh địa chỉ email người gửi đã được xác thực
  </Accordion>
</AccordionGroup>
