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

# Zapier

> Kết nối Dodo Payments với 5000+ ứng dụng thông qua webhook của Zapier để có vô hạn khả năng tự động hóa.

## Giới thiệu

Kết nối Dodo Payments với hàng ngàn ứng dụng và dịch vụ thông qua Zapier. Tự động hóa quy trình làm việc bằng cách kích hoạt Zaps khi xảy ra sự kiện thanh toán, từ việc gửi email đến cập nhật bảng tính, tạo nhiệm vụ và nhiều hơn nữa.

<Info>
  Tích hợp này yêu cầu URL webhook của Zapier từ cấu hình Zap của bạn.
</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 Điểm Đầu Cuối</b> và mở rộng danh sách tích hợp.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/slbAEdrLLwKHfaRf/images/integrations/zapier.png?fit=max&auto=format&n=slbAEdrLLwKHfaRf&q=85&s=4f04fe274ed3c2135baaa23e7f3cf566" alt="Add Endpoint and integrations dropdown" style={{ maxHeight: '500px', width: 'auto' }} width="1636" height="944" data-path="images/integrations/zapier.png" />
    </Frame>
  </Step>

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

  <Step title="Create Zap in Zapier">
    Trong Zapier, tạo một Zap mới với "Webhooks by Zapier" làm sự kiện kích hoạt. Sao chép URL webhook.
  </Step>

  <Step title="Paste Webhook URL">
    Dán URL webhook Zapier vào cấu hình endpoint.
  </Step>

  <Step title="Configure Transformation">
    Chỉnh sửa mã biến đổi để định dạng dữ liệu cho luồng công việc Zapier của bạn.
  </Step>

  <Step title="Test & Create">
    Thử nghiệm bằng dữ liệu mẫu và nhấp <b>Create</b> để kích hoạt tích hợp.
  </Step>

  <Step title="Done!">
    🎉 Các sự kiện thanh toán giờ sẽ tự động kích hoạt luồng công việc Zapier của bạn.
  </Step>
</Steps>

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

### Payload Webhook Cơ bản

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

### Bộ xử lý Sự kiện Đăng ký

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

### Bộ xử lý Cảnh báo Tranh chấp

```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 Zapier Phổ Biến

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

  <Accordion title="CRM Updates">
    * Thêm liên hệ vào HubSpot/Salesforce
    * Tạo giao dịch trong Pipedrive/Close
    * Cập nhật hồ sơ khách hàng trong Airtable
    * Ghi lại hoạt động trong Monday.com
  </Accordion>

  <Accordion title="Task Management">
    * Tạo nhiệm vụ trong Asana/Trello
    * Thêm mục việc cần làm trong Notion
    * Tạo sự kiện lịch
    * Gửi thông báo SMS qua Twilio
  </Accordion>
</AccordionGroup>

## Mẹo

* Giữ cấu trúc payload đơn giản để dễ dàng phân tích trong Zapier
* Sử dụng tên trường nhất quán trên tất cả các sự kiện
* Bao gồm dấu thời gian cho thời gian quy trình làm việc
* Kiểm tra Zap của bạn với dữ liệu mẫu trước khi đưa vào hoạt động
* Sử dụng bộ lọc tích hợp của Zapier cho logic điều kiện

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

<AccordionGroup>
  <Accordion title="Zap not triggering">
    * Xác minh URL webhook chính xác và đang hoạt động
    * Kiểm tra Zap đã bật trong Zapier
    * Đảm bảo cấu trúc payload phù hợp với mong đợi của Zapier
    * Kiểm tra việc gửi webhook trong bảng điều khiển Zapier
  </Accordion>

  <Accordion title="Data not mapping correctly">
    * Kiểm tra tên trường trong các bước hành động của Zapier
    * Xác minh kiểu dữ liệu khớp với định dạng mong đợi
    * Sử dụng tính năng thử nghiệm của Zapier để gỡ lỗi ánh xạ
    * Đảm bảo mã biến đổi trả về JSON hợp lệ
  </Accordion>
</AccordionGroup>
