Passer au contenu principal

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.
Ce guide suppose que vous avez accès à la section Integrations du tableau de bord Dodo Payments.

Commencer

1

Open the Webhook Section

Dans votre tableau de bord Dodo Payments, ouvrez Webhooks → + Add Endpoint et développez le menu déroulant pour afficher les intégrations.
Add Endpoint and integrations dropdown
2

Select Discord

Choisissez la carte Discord puis cliquez sur Connect your Discord workspace.
3

Authorize the Bot

Accordez les autorisations demandées afin que le bot puisse publier des messages dans le canal sélectionné.
4

Edit Transformation Code

Adaptez le mapping charge utile → intégration à vos besoins — ou commencez avec les modèles ci-dessous.
5

Test & Create

Utilisez des charges utiles d’exemple pour prévisualiser l’intégration, puis cliquez sur Create.
6

Done!

🎉 Votre canal Discord recevra désormais des mises à jour en direct de Dodo Payments.

Exemples de code de transformation

Embed de paiement minimal

payment_embed.js
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

subscription_embed.js
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

dispute_embed.js
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

  • Confirmez que le bot a accès au canal.
  • Vérifiez que la transformation renvoie un objet JSON avec embeds.
  • 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.