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

# Windmill

> Dodo Payments घटनाओं के आधार पर कस्टम ऑटोमेशन के लिए Windmill वर्कफ़्लो और स्क्रिप्ट को ट्रिगर करें।

## परिचय

भुगतान घटनाओं के होने पर Windmill में कस्टम वर्कफ़्लो और स्क्रिप्ट निष्पादित करें। डेटाबेस संचालन करें, सूचनाएँ भेजें, डेटा संसाधित करें, और Windmill के शक्तिशाली वर्कफ़्लो इंजन के साथ जटिल व्यावसायिक तर्कों को स्वचालित करें।

<Info>
  यह एकीकरण आपके workflow कॉन्फ़िगरेशन से आपका Windmill webhook URL मांगता है।
</Info>

## प्रारंभ करना

<Steps>
  <Step title="Open the Webhook Section">
    अपनी Dodo Payments डैशबोर्ड में, <b>Webhooks → + Add Endpoint</b> पर जाएं और इंटिग्रेशन ड्रॉपडाउन को विस्तार करें।

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

  <Step title="Select Windmill">
    Windmill एकीकरण कार्ड चुनें।
  </Step>

  <Step title="Create Windmill Workflow">
    Windmill में, एक नया workflow बनाएं और trigger configuration से webhook URL कॉपी करें।
  </Step>

  <Step title="Paste Webhook URL">
    Windmill webhook URL को endpoint configuration में पेस्ट करें।
  </Step>

  <Step title="Configure Transformation">
    Transformation code को संपादित करें ताकि आपके Windmill workflow के लिए इवेंट्स सही ढंग से फॉर्मेट हों।
  </Step>

  <Step title="Test & Create">
    नमूना payloads के साथ परीक्षण करें और एकीकरण सक्रिय करने के लिए <b>Create</b> पर क्लिक करें।
  </Step>

  <Step title="Done!">
    🎉 भुगतान घटनाएँ अब स्वचालित रूप से आपके Windmill workflows को ट्रिगर करेंगी।
  </Step>
</Steps>

## रूपांतरण कोड उदाहरण

### बुनियादी वर्कफ़्लो पेलोड

```javascript basic_workflow.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,
      metadata: {
        business_id: p.business_id,
        product_id: p.product_id
      }
    };
  }
  return webhook;
}
```

### सदस्यता वर्कफ़्लो हैंडलर

```javascript subscription_workflow.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,
        customer_id: s.customer.customer_id,
        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,
        customer_id: s.customer.customer_id,
        timestamp: webhook.payload.timestamp
      };
      break;
  }
  return webhook;
}
```

### विवाद वर्कफ़्लो हैंडलर

```javascript dispute_workflow.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",
      business_id: d.business_id,
      timestamp: webhook.payload.timestamp
    };
  }
  return webhook;
}
```

## सामान्य Windmill उपयोग के मामले

<AccordionGroup>
  <Accordion title="Database Operations">
    * PostgreSQL/MySQL में ग्राहक रिकॉर्ड अपडेट करें
    * भुगतान घटनाओं को डेटा वेयरहाउस में लॉग करें
    * बाहरी सिस्टम्स के साथ डेटा सिंक करें
    * इन्वेंटरी स्तर अपडेट करें
    * एनालिटिक्स मेट्रिक्स को ट्रैक करें
  </Accordion>

  <Accordion title="Business Logic">
    * राजस्व मेट्रिक्स की गणना करें
    * रिफंड और समायोजन प्रोसेस करें
    * सब्सक्रिप्शन लाइफसाइकल को हैंडल करें
    * रिपोर्ट और एक्सपोर्ट जनरेट करें
    * भुगतान डेटा को मान्य करें
  </Accordion>

  <Accordion title="External Integrations">
    * डेटा को एनालिटिक्स प्लेटफॉर्म्स को भेजें
    * CRM सिस्टम्स को अपडेट करें
    * ईमेल अभियान ट्रिगर करें
    * कैलेंडर इवेंट्स बनाएं
    * SMS सूचनाएँ भेजें
  </Accordion>
</AccordionGroup>

## सुझाव

* वर्कफ़्लो प्रसंस्करण के लिए पेलोड डेटा को संरचना करें
* व्यावसायिक तर्क के लिए सभी प्रासंगिक मेटाडेटा शामिल करें
* घटनाओं के बीच लगातार फ़ील्ड नामकरण का उपयोग करें
* वर्कफ़्लो समय के लिए टाइमस्टैम्प शामिल करें
* Windmill की अंतर्निहित त्रुटि हैंडलिंग का लाभ उठाएँ

## समस्या निवारण

<AccordionGroup>
  <Accordion title="Workflows not triggering">
    * सुनिश्चित करें कि webhook URL सही और सक्रिय है
    * जांचें कि Windmill workflow प्रकाशित और सक्रिय है
    * सुनिश्चित करें कि payload संरचना workflow की अपेक्षाओं से मेल खाती है
    * त्रुटियों के लिए Windmill निष्पादन लॉग की समीक्षा करें
  </Accordion>

  <Accordion title="Data processing issues">
    * workflow इनपुट पैरामीटर मैपिंग की जांच करें
    * सुनिश्चित करें कि डेटा प्रकार अपेक्षित प्रारूपों से मेल खाते हैं
    * नमूना डेटा के साथ workflow का परीक्षण करें
    * Windmill स्क्रिप्ट निष्पादन लॉग की समीक्षा करें
  </Accordion>
</AccordionGroup>
