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

# Windmühle

> Triggern Sie Windmühlen-Workflows und -Skripte basierend auf Dodo Payments-Ereignissen für benutzerdefinierte Automatisierung.

## Einführung

Führen Sie benutzerdefinierte Workflows und Skripte in Windmühle aus, wenn Zahlungsevents auftreten. Führen Sie Datenbankoperationen durch, senden Sie Benachrichtigungen, verarbeiten Sie Daten und automatisieren Sie komplexe Geschäftslogik mit der leistungsstarken Workflow-Engine von Windmühle.

<Info>
  Diese Integration erfordert Ihre Windmill-Webhook-URL aus Ihrer Workflow-Konfiguration.
</Info>

## Erste Schritte

<Steps>
  <Step title="Open the Webhook Section">
    Navigieren Sie in Ihrem Dodo Payments-Dashboard zu <b>Webhooks → + Endpunkt hinzufügen</b> und erweitern Sie das Dropdown-Menü für Integrationen.

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

  <Step title="Select Windmill">
    Wählen Sie die <b>Windmill</b>-Integrationskarte aus.
  </Step>

  <Step title="Create Windmill Workflow">
    Erstellen Sie in Windmill einen neuen Workflow und kopieren Sie die Webhook-URL aus der Trigger-Konfiguration.
  </Step>

  <Step title="Paste Webhook URL">
    Fügen Sie die Windmill-Webhook-URL in die Endpunktkonfiguration ein.
  </Step>

  <Step title="Configure Transformation">
    Bearbeiten Sie den Transformation-Code, um Ereignisse für Ihren Windmill-Workflow zu formatieren.
  </Step>

  <Step title="Test & Create">
    Testen Sie mit Beispiel-Payloads und klicken Sie auf <b>Erstellen</b>, um die Integration zu aktivieren.
  </Step>

  <Step title="Done!">
    🎉 Zahlungsevents lösen nun automatisch Ihre Windmill-Workflows aus.
  </Step>
</Steps>

## Transformationscode-Beispiele

### Basis-Workflow-Payload

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

### Abonnement-Workflow-Handler

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

### Streitfall-Workflow-Handler

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

## Häufige Anwendungsfälle für Windmühle

<AccordionGroup>
  <Accordion title="Database Operations">
    * Aktualisieren Sie Kundendatensätze in PostgreSQL/MySQL
    * Protokollieren Sie Zahlungsevents in Data Warehouses
    * Synchronisieren Sie Daten mit externen Systemen
    * Aktualisieren Sie Lagerbestände
    * Verfolgen Sie Analysekennzahlen
  </Accordion>

  <Accordion title="Business Logic">
    * Berechnen Sie Umsatzkennzahlen
    * Bearbeiten Sie Rückerstattungen und Anpassungen
    * Verwalten Sie den Lebenszyklus von Abonnements
    * Erstellen Sie Berichte und Exporte
    * Validieren Sie Zahlungsdaten
  </Accordion>

  <Accordion title="External Integrations">
    * Senden Sie Daten an Analyseplattformen
    * Aktualisieren Sie CRM-Systeme
    * Lösen Sie E-Mail-Kampagnen aus
    * Erstellen Sie Kalenderereignisse
    * Senden Sie SMS-Benachrichtigungen
  </Accordion>
</AccordionGroup>

## Tipps

* Strukturieren Sie Payload-Daten für eine einfache Workflow-Verarbeitung
* Fügen Sie alle relevanten Metadaten für die Geschäftslogik hinzu
* Verwenden Sie konsistente Feldbenennungen über Ereignisse hinweg
* Fügen Sie Zeitstempel für die Workflow-Zeitplanung hinzu
* Nutzen Sie die integrierte Fehlerbehandlung von Windmühle

## Fehlersuche

<AccordionGroup>
  <Accordion title="Workflows not triggering">
    * Überprüfen Sie, ob die Webhook-URL korrekt und aktiv ist
    * Prüfen Sie, ob der Windmill-Workflow veröffentlicht und aktiv ist
    * Stellen Sie sicher, dass die Payload-Struktur den Workflow-Erwartungen entspricht
    * Überprüfen Sie Windmill-Ausführungsprotokolle auf Fehler
  </Accordion>

  <Accordion title="Data processing issues">
    * Prüfen Sie die Abbildung der Workflow-Eingabeparameter
    * Vergewissern Sie sich, dass die Datentypen den erwarteten Formaten entsprechen
    * Testen Sie den Workflow mit Beispieldaten
    * Überprüfen Sie die Windmill-Skriptausführungsprotokolle
  </Accordion>
</AccordionGroup>
