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

> Kích hoạt các workflow n8n từ các sự kiện webhook của Dodo Payments và kết nối thanh toán với các ứng dụng mà n8n tích hợp, trên n8n tự lưu trữ hoặc n8n cloud.

## Giới thiệu

Tích hợp n8n sẽ khởi chạy một workflow n8n mỗi khi có sự kiện thanh toán xảy ra, giúp bạn kết nối Dodo Payments với bất kỳ ứng dụng nào mà n8n tích hợp. Workflow có thể gửi email, cập nhật bảng tính, tạo tác vụ, ghi dữ liệu vào cơ sở dữ liệu và nhiều hơn nữa.

<Info>
  Tích hợp này yêu cầu URL webhook từ một node Webhook trong workflow n8n của bạn.
</Info>

## Bắt đầu

<Steps>
  <Step title="Open the Webhook Section">
    Trong trang tổng quan Dodo Payments, hãy đi đến **Developer → Webhooks** và nhấp vào **Add endpoint**.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/DL_ADtkdH7ph5YST/images/integrations/n8n.png?fit=max&auto=format&n=DL_ADtkdH7ph5YST&q=85&s=a8e16de0eed2c9a1188ebd16e08d2d97" alt="Add endpoint dialog with n8n selected in the Integration dropdown" style={{ maxHeight: '500px', width: 'auto' }} width="1536" height="1428" data-path="images/integrations/n8n.png" />
    </Frame>
  </Step>

  <Step title="Select n8n">
    Trong danh sách **Integration**, chọn **n8n**.
  </Step>

  <Step title="Create Webhook in n8n">
    Trong n8n, tạo một workflow và thêm node **Webhook** làm trigger. Đặt **HTTP Method** thành `POST`, sau đó sao chép **Production URL**. URL kiểm thử chỉ nhận sự kiện trong khi n8n đang lắng nghe một sự kiện kiểm thử.
  </Step>

  <Step title="Paste Webhook URL">
    Dán URL production của n8n vào trường **Endpoint URL**.
  </Step>

  <Step title="Configure Transformation">
    Chỉnh sửa code bên dưới **Transformation code** để định dạng dữ liệu cho workflow n8n của bạn. Bắt đầu từ các ví dụ bên dưới.
  </Step>

  <Step title="Test & Create">
    Trong **Test this code**, chạy phép chuyển đổi với một payload mẫu, sau đó nhấp vào **Create endpoint**.
  </Step>

  <Step title="Publish the Workflow">
    Trong n8n, publish workflow của bạn. n8n chỉ đăng ký URL webhook production khi workflow được publish.
  </Step>

  <Step title="Done">
    Các sự kiện thanh toán hiện sẽ kích hoạt workflow n8n của bạn.
  </Step>
</Steps>

## Ví Dụ Mã Biến Đổi

Mỗi ví dụ chuyển một sự kiện Dodo Payments thành một đối tượng JSON nhỏ mà các node n8n có thể đọc trực tiếp.

### Payload Webhook cơ bản

Ví dụ này gửi số tiền thanh toán, currency, khách hàng và phương thức thanh toán khi một khoản thanh toán thành công.

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

### Trình xử lý sự kiện Subscription

Ví dụ này gửi một sự kiện `subscription_started` hoặc `subscription_cancelled`, để một workflow có thể phân nhánh dựa trên `event_type`.

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

### Trình xử lý cảnh báo Dispute

Ví dụ này gửi mọi sự kiện `dispute.*` và đặt `urgent` thành `true` khi một dispute được mở.

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

## Các trường hợp sử dụng N8N phổ biến

Đây là những workflow phổ biến mà merchant xây dựng dựa trên các sự kiện Dodo Payments.

<AccordionGroup>
  <Accordion title="Email Notifications">
    * Gửi email Gmail hoặc Outlook để xác nhận thanh toán.
    * Tạo chuỗi email trong Mailchimp hoặc ConvertKit.
    * Gửi thông báo Slack hoặc Discord thông qua webhook.
    * Tạo bản ghi Google Sheets.
    * Gửi tin nhắn Telegram hoặc WhatsApp.
  </Accordion>

  <Accordion title="CRM Updates">
    * Thêm contact vào HubSpot hoặc Salesforce.
    * Tạo deal trong Pipedrive hoặc Close.
    * Cập nhật bản ghi khách hàng trong Airtable.
    * Ghi lại hoạt động trong Monday.com.
    * Đồng bộ dữ liệu với cơ sở dữ liệu PostgreSQL hoặc MySQL.
  </Accordion>

  <Accordion title="Task Management">
    * Tạo tác vụ trong Asana hoặc Trello.
    * Thêm mục việc cần làm trong Notion.
    * Tạo sự kiện trong Google Calendar.
    * Gửi thông báo SMS thông qua Twilio.
    * Tạo issue GitHub cho các dispute.
  </Accordion>

  <Accordion title="Data Processing">
    * Chuyển đổi và bổ sung dữ liệu thanh toán.
    * Lưu trữ sự kiện trong các cơ sở dữ liệu như PostgreSQL hoặc MongoDB.
    * Tổng hợp các chỉ số và dữ liệu phân tích.
    * Tạo báo cáo và bản xuất dữ liệu.
    * Kích hoạt workflow nhiều bước.
  </Accordion>
</AccordionGroup>

## Mẹo

* Giữ cấu trúc payload đơn giản để các node n8n có thể phân tích cú pháp.
* Sử dụng cùng tên trường cho tất cả sự kiện.
* Bao gồm timestamp để tính thời gian và lên lịch cho workflow.
* Kiểm thử workflow bằng dữ liệu mẫu trước khi publish.
* Sử dụng node **IF** cho logic điều kiện và định tuyến.
* Sử dụng node **Code** để tùy chỉnh việc chuyển đổi dữ liệu.
* Sử dụng node **Switch** để định tuyến từng loại sự kiện đến đường dẫn riêng.
* Thiết lập error workflow trong n8n để bắt các lần thực thi thất bại.

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

<AccordionGroup>
  <Accordion title="Workflow Not Triggering">
    * Kiểm tra endpoint sử dụng URL production của n8n và n8n có thể được truy cập từ internet.
    * Kiểm tra workflow đã được publish trong n8n.
    * Kiểm tra **HTTP Method** của node Webhook là `POST`.
    * Kiểm tra các request đến trong tab **Executions** của workflow.
    * Kiểm tra cài đặt firewall và network có cho phép webhook đến hay không.
    * Nếu node Webhook yêu cầu authentication, hãy thêm header tương ứng vào endpoint tại [Custom Headers](/developer-resources/webhooks#custom-headers).
  </Accordion>

  <Accordion title="Data Not Mapping Correctly">
    * Kiểm tra tên trường trong cấu hình node n8n.
    * Kiểm tra các kiểu dữ liệu khớp với định dạng mà node yêu cầu.
    * Sử dụng URL kiểm thử của n8n để kiểm tra dữ liệu đến.
    * Kiểm tra code chuyển đổi trả về JSON hợp lệ.
    * Kiểm tra cài đặt response của node Webhook.
    * Sử dụng node **Edit Fields (Set)** để đổi tên hoặc tái cấu trúc các trường.
  </Accordion>

  <Accordion title="Workflow Execution Errors">
    * Xem lại execution logs trong n8n để biết thông báo lỗi chi tiết.
    * Kiểm tra cài đặt kết nối node và credentials.
    * Kiểm tra tất cả trường bắt buộc có trong payload.
    * Kiểm thử từng node bằng dữ liệu mẫu.
    * Bật error workflow để bắt và xử lý lỗi.
    * Kiểm tra rate limits và API quotas của các dịch vụ được kết nối.
  </Accordion>
</AccordionGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.