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

# Moulin à vent

> Déclenchez des workflows et des scripts de Moulin à vent en fonction des événements de Dodo Payments pour une automatisation personnalisée.

## Introduction

Exécutez des workflows et des scripts personnalisés dans Moulin à vent lorsque des événements de paiement se produisent. Effectuez des opérations sur la base de données, envoyez des notifications, traitez des données et automatisez une logique commerciale complexe avec le puissant moteur de workflow de Moulin à vent.

<Info>
  Cette intégration nécessite votre URL webhook Windmill depuis la configuration de votre flux de travail.
</Info>

## Prise en main

<Steps>
  <Step title="Open the Webhook Section">
    Dans votre tableau de bord Dodo Payments, naviguez vers <b>Webhooks → + Ajouter un point de terminaison</b> et développez le menu déroulant des intégrations.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/slbAEdrLLwKHfaRf/images/integrations/windmill.png?fit=max&auto=format&n=slbAEdrLLwKHfaRf&q=85&s=695fe639c086c3d899efae177d646591" alt="Ajouter un point de terminaison et menu déroulant des intégrations" style={{ maxHeight: '500px', width: 'auto' }} width="1678" height="954" data-path="images/integrations/windmill.png" />
    </Frame>
  </Step>

  <Step title="Select Windmill">
    Choisissez la carte d’intégration <b>Windmill</b>.
  </Step>

  <Step title="Create Windmill Workflow">
    Dans Windmill, créez un nouveau flux de travail et copiez l’URL du webhook depuis la configuration du déclencheur.
  </Step>

  <Step title="Paste Webhook URL">
    Collez l’URL du webhook Windmill dans la configuration du point de terminaison.
  </Step>

  <Step title="Configure Transformation">
    Modifiez le code de transformation pour formater les événements pour votre flux de travail Windmill.
  </Step>

  <Step title="Test & Create">
    Testez avec des charges utiles d’exemple et cliquez sur <b>Créer</b> pour activer l’intégration.
  </Step>

  <Step title="Done!">
    🎉 Les événements de paiement déclencheront désormais automatiquement vos flux de travail Windmill.
  </Step>
</Steps>

## Exemples de code de transformation

### Charge utile de workflow de base

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

### Gestionnaire de workflow d'abonnement

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

### Gestionnaire de workflow de litige

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

## Cas d'utilisation courants de Moulin à vent

<AccordionGroup>
  <Accordion title="Database Operations">
    * Mettre à jour les dossiers clients dans PostgreSQL/MySQL
    * Enregistrer les événements de paiement dans des entrepôts de données
    * Synchroniser les données avec des systèmes externes
    * Mettre à jour les niveaux de stock
    * Suivre les métriques analytiques
  </Accordion>

  <Accordion title="Business Logic">
    * Calculer les métriques de revenu
    * Traiter les remboursements et ajustements
    * Gérer le cycle de vie des abonnements
    * Générer des rapports et des exports
    * Valider les données de paiement
  </Accordion>

  <Accordion title="External Integrations">
    * Envoyer des données aux plateformes analytiques
    * Mettre à jour les systèmes CRM
    * Lancer des campagnes email
    * Créer des événements calendaires
    * Envoyer des notifications SMS
  </Accordion>
</AccordionGroup>

## Conseils

* Structurer les données de charge utile pour un traitement facile des workflows
* Inclure toutes les métadonnées pertinentes pour la logique commerciale
* Utiliser des noms de champs cohérents à travers les événements
* Inclure des horodatages pour le timing des workflows
* Tirer parti de la gestion des erreurs intégrée de Moulin à vent

## Dépannage

<AccordionGroup>
  <Accordion title="Workflows not triggering">
    * Vérifier que l’URL du webhook est correcte et active
    * Vérifier que le flux de travail Windmill est publié et actif
    * S’assurer que la structure du payload correspond aux attentes du flux de travail
    * Examiner les journaux d’exécution Windmill pour détecter les erreurs
  </Accordion>

  <Accordion title="Data processing issues">
    * Vérifier la correspondance des paramètres d’entrée du flux de travail
    * Confirmer que les types de données correspondent aux formats attendus
    * Tester le flux de travail avec des données d’exemple
    * Examiner les journaux d’exécution des scripts Windmill
  </Accordion>
</AccordionGroup>
