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

# Boucles

> Envoyez des e-mails transactionnels et gérez la communication client via des Boucles basées sur les événements de Dodo Payments.

## Introduction

Envoyez des e-mails transactionnels et gérez automatiquement la communication client lorsque des événements de paiement se produisent. Livrez des confirmations de paiement, des mises à jour d'abonnement et des notifications importantes grâce à l'infrastructure d'e-mail de Boucles.

<Info>
  Cette intégration nécessite votre clé API Loops pour l’authentification.
</Info>

## Prise en main

<Steps>
  <Step title="Open the Webhook Section">
    Dans votre tableau de bord Dodo Payments, accédez à <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/loops.png?fit=max&auto=format&n=slbAEdrLLwKHfaRf&q=85&s=2d66cf4c1f562427613d7b2704dcc8a3" alt="Ajouter un point de terminaison et menu déroulant des intégrations" style={{ maxHeight: '500px', width: 'auto' }} width="1656" height="940" data-path="images/integrations/loops.png" />
    </Frame>
  </Step>

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

  <Step title="Enter API Key">
    Saisissez votre clé API Loops dans la configuration.
  </Step>

  <Step title="Configure Transformation">
    Modifiez le code de transformation pour formater les e-mails destinés à l’API de Loops.
  </Step>

  <Step title="Test & Create">
    Testez avec des charges utiles d’exemple et cliquez sur <b>Create</b> pour activer l’envoi des e-mails.
  </Step>

  <Step title="Done!">
    🎉 Les événements de paiement déclencheront désormais automatiquement des e-mails transactionnels via Loops.
  </Step>
</Steps>

## Exemples de code de transformation

### E-mail de confirmation de paiement

```javascript payment_confirmation.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.url = "https://api.loops.so/v1/events/send";
    webhook.payload = {
      eventName: "payment_confirmation",
      email: p.customer.email,
      properties: {
        customer_name: p.customer.name,
        payment_id: p.payment_id,
        amount: (p.total_amount / 100).toFixed(2),
        currency: p.currency || "USD",
        payment_method: p.payment_method || "unknown",
        payment_date: new Date(webhook.payload.timestamp).toLocaleDateString()
      }
    };
  }
  return webhook;
}
```

### E-mail de bienvenue d'abonnement

```javascript subscription_welcome.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "subscription.active") {
    const s = webhook.payload.data;
    webhook.url = "https://api.loops.so/v1/events/send";
    webhook.payload = {
      eventName: "subscription_welcome",
      email: s.customer.email,
      properties: {
        customer_name: s.customer.name,
        subscription_id: s.subscription_id,
        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
      }
    };
  }
  return webhook;
}
```

### Notification d'échec de paiement

```javascript payment_failure.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.failed") {
    const p = webhook.payload.data;
    webhook.url = "https://api.loops.so/v1/events/send";
    webhook.payload = {
      eventName: "payment_failed",
      email: p.customer.email,
      properties: {
        customer_name: p.customer.name,
        payment_id: p.payment_id,
        amount: (p.total_amount / 100).toFixed(2),
        error_message: p.error_message || "Payment processing failed",
        retry_link: `https://yourdomain.com/retry-payment/${p.payment_id}`
      }
    };
  }
  return webhook;
}
```

## Conseils

* Utilisez des noms d'événements descriptifs pour une meilleure organisation des modèles d'e-mail
* Incluez des propriétés client pertinentes pour la personnalisation
* Configurez des modèles d'e-mail dans le tableau de bord Loops pour chaque événement
* Utilisez une nomenclature de propriété cohérente à travers les événements
* Testez la livraison des e-mails avant de passer en production

## Dépannage

<AccordionGroup>
  <Accordion title="Emails not being sent">
    * Vérifiez que la clé API est correcte et active
    * Vérifiez que les noms d’événements correspondent à vos modèles Loops
    * Assurez-vous que les adresses e-mail des destinataires sont valides
    * Passez en revue les limites d’envoi et les quotas de Loops
  </Accordion>

  <Accordion title="Transformation errors">
    * Validez que la structure JSON correspond au format de l’API Loops
    * Vérifiez que tous les champs requis sont présents
    * Assurez-vous que les noms d’événements sont correctement formatés
    * Vérifiez les autorisations de la clé API
  </Accordion>
</AccordionGroup>
