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

# Discord

> Envoyez des notifications Dodo Payments en temps réel à vos canaux Discord.

## Introduction

Tenez votre équipe informée là où elle collabore déjà. L'intégration Discord livre des événements de paiement, d'abonnement, de litige et d'autres événements importants directement dans n'importe quel canal de votre choix—sans besoin de polling ou de tableaux de bord.

<Info>
  Ce guide suppose que vous avez accès à la section Integrations du tableau de bord Dodo Payments.
</Info>

## Commencer

<Steps>
  <Step title="Open the Webhook Section">
    Dans votre tableau de bord Dodo Payments, ouvrez <b>Webhooks → + Ajouter un Endpoint</b> et développez le menu déroulant pour révéler les intégrations.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/slbAEdrLLwKHfaRf/images/integrations/discord.png?fit=max&auto=format&n=slbAEdrLLwKHfaRf&q=85&s=dd9359ae214e43ca779c1c0a522f055b" alt="Ajouter Endpoint et menu déroulant des intégrations" style={{ maxHeight: '500px', width: 'auto' }} width="1808" height="938" data-path="images/integrations/discord.png" />
    </Frame>
  </Step>

  <Step title="Select Discord">
    Choisissez la carte <b>Discord</b> puis cliquez sur <b>Connect your Discord workspace</b>.
  </Step>

  <Step title="Authorize the Bot">
    Accordez les autorisations demandées afin que le bot puisse publier des messages dans le canal sélectionné.
  </Step>

  <Step title="Edit Transformation Code">
    Adaptez le mapping charge utile → intégration à vos besoins — ou commencez avec les modèles ci-dessous.
  </Step>

  <Step title="Test & Create">
    Utilisez des charges utiles d'exemple pour prévisualiser l'intégration, puis cliquez sur <b>Create</b>.
  </Step>

  <Step title="Done!">
    🎉 Votre canal Discord recevra désormais des mises à jour en direct de Dodo Payments.
  </Step>
</Steps>

## Exemples de code de transformation

### Embed de paiement minimal

```javascript payment_embed.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.payload = {
      embeds: [{
        title: "✅ Payment Successful",
        description: `**Amount:** $${(p.total_amount / 100).toFixed(2)}\n**Customer:** ${p.customer.email}`,
        color: 0x2ecc71 // green
      }]
    };
  }
  return webhook;
}
```

### Événements d'abonnement

```javascript subscription_embed.js icon="js" expandable theme={null}
function handler(webhook) {
  const s = webhook.payload.data;
  switch (webhook.eventType) {
    case "subscription.active":
      webhook.payload = {
        embeds: [{
          title: "📄 Subscription Activated",
          fields: [
            { name: "Customer", value: s.customer.email, inline: true },
            { name: "Product", value: s.product_id, inline: true },
            { name: "Next Billing", value: new Date(s.next_billing_date).toLocaleDateString(), inline: true }
          ],
          color: 0x2ecc71
        }]
      };
      break;
    case "subscription.cancelled":
      webhook.payload = {
        embeds: [{
          title: "⚠️ Subscription Cancelled",
          fields: [
            { name: "Customer", value: s.customer.email, inline: true },
            { name: "Product", value: s.product_id, inline: true }
          ],
          color: 0xf1c40f
        }]
      };
      break;
  }
  return webhook;
}
```

### Alertes de litige

```javascript dispute_embed.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType.startsWith("dispute.")) {
    const d = webhook.payload.data;
    webhook.payload = {
      embeds: [{
        title: d.dispute_status === "won" ? "🏆 Dispute Won" : d.dispute_status === "lost" ? "❌ Dispute Lost" : "🚨 Dispute Update",
        fields: [
          { name: "Payment ID", value: d.payment_id, inline: true },
          { name: "Amount", value: `$${(d.amount / 100).toFixed(2)}`, inline: true },
          { name: "Status", value: d.dispute_status, inline: true }
        ],
        color: d.dispute_status === "won" ? 0x2ecc71 : d.dispute_status === "lost" ? 0xe74c3c : 0xe67e22
      }]
    };
  }
  return webhook;
}
```

## Conseils

* Préférez les embeds pour un formatage riche et des couleurs.
* Gardez les titres courts ; mettez les détails dans les champs.
* Utilisez des couleurs intuitives : vert (succès), rouge (échec), orange (avertissements).

## Dépannage

<AccordionGroup>
  <Accordion title="No messages in Discord">
    * Confirmez que le bot a accès au canal.
    * Vérifiez que la transformation renvoie un objet JSON avec `embeds`.
  </Accordion>

  <Accordion title="Transformation errors">
    * Validez votre code dans l'éditeur – les erreurs de syntaxe bloqueront la livraison.
    * Assurez-vous que les noms de champs correspondent à la structure de la charge utile du webhook.
  </Accordion>
</AccordionGroup>
