Passer au contenu principal

Introduction

Tenez votre équipe commerciale informée avec des notifications de paiement en temps réel dans Microsoft Teams. L’intégration fournit des événements de paiement sous forme de cartes adaptatives riches—parfait pour les environnements d’entreprise où Teams est l’outil de collaboration principal.
Ce guide suppose que vous avez un accès administrateur pour créer des webhooks dans votre espace de travail Microsoft Teams.

Commencer

1

Ouvrir la section Webhook

Dans votre tableau de bord Dodo Payments, accédez à Webhooks → + Ajouter un point de terminaison et développez le menu déroulant des intégrations.
Ajouter un point de terminaison et menu déroulant des intégrations
2

Sélectionner Microsoft Teams

Choisissez la carte d’intégration Microsoft Teams.
3

Créer un Webhook Teams

Dans Teams, allez dans votre canal → ⋯ → Connecteurs → Webhook entrant → Configurer. Copiez l’URL du webhook.
4

Coller l'URL du Webhook

Collez l’URL du webhook Teams dans la configuration du point de terminaison.
5

Personnaliser la transformation

Modifiez le code de transformation pour formater les messages en tant que cartes adaptatives pour Teams.
6

Tester & Créer

Testez avec des charges utiles d’exemple et cliquez sur Créer pour activer.
7

Terminé !

🎉 Votre canal Teams recevra désormais des mises à jour de Dodo Payments sous forme de cartes adaptatives.

Exemples de code de transformation

Carte de paiement de base

payment_card.js
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.payload = {
      type: "message",
      attachments: [{
        contentType: "application/vnd.microsoft.card.adaptive",
        content: {
          type: "AdaptiveCard",
          body: [
            {
              type: "TextBlock",
              text: "✅ Payment Successful",
              weight: "Bolder",
              size: "Medium"
            },
            {
              type: "FactSet",
              facts: [
                { title: "Amount", value: `$${(p.total_amount / 100).toFixed(2)}` },
                { title: "Customer", value: p.customer.email },
                { title: "Payment ID", value: p.payment_id }
              ]
            }
          ]
        }
      }]
    };
  }
  return webhook;
}

Gestion des abonnements

subscription_card.js
function handler(webhook) {
  const s = webhook.payload.data;
  switch (webhook.eventType) {
    case "subscription.active":
      webhook.payload = {
        type: "message",
        attachments: [{
          contentType: "application/vnd.microsoft.card.adaptive",
          content: {
            type: "AdaptiveCard",
            body: [
              {
                type: "TextBlock",
                text: "📄 Subscription Activated",
                weight: "Bolder",
                color: "Good"
              },
              {
                type: "FactSet",
                facts: [
                  { title: "Customer", value: s.customer.email },
                  { title: "Product", value: s.product_id },
                  { title: "Amount", value: `$${(s.recurring_pre_tax_amount / 100).toFixed(2)}/${s.payment_frequency_interval}` },
                  { title: "Next Billing", value: new Date(s.next_billing_date).toLocaleDateString() }
                ]
              }
            ]
          }
        }]
      };
      break;
    case "subscription.cancelled":
      webhook.payload = {
        type: "message",
        attachments: [{
          contentType: "application/vnd.microsoft.card.adaptive",
          content: {
            type: "AdaptiveCard",
            body: [
              {
                type: "TextBlock",
                text: "⚠️ Subscription Cancelled",
                weight: "Bolder",
                color: "Warning"
              },
              {
                type: "FactSet",
                facts: [
                  { title: "Customer", value: s.customer.email },
                  { title: "Product", value: s.product_id },
                  { title: "Cancelled At", value: new Date(s.cancelled_at).toLocaleDateString() }
                ]
              }
            ]
          }
        }]
      };
      break;
  }
  return webhook;
}

Alertes de litige

dispute_card.js
function handler(webhook) {
  if (webhook.eventType.startsWith("dispute.")) {
    const d = webhook.payload.data;
    const color = d.dispute_status === "won" ? "Good" : d.dispute_status === "lost" ? "Attention" : "Warning";
    const title = d.dispute_status === "won" ? "🏆 Dispute Won" : d.dispute_status === "lost" ? "❌ Dispute Lost" : "🚨 Dispute Update";
    
    webhook.payload = {
      type: "message",
      attachments: [{
        contentType: "application/vnd.microsoft.card.adaptive",
        content: {
          type: "AdaptiveCard",
          body: [
            {
              type: "TextBlock",
              text: title,
              weight: "Bolder",
              color: color
            },
            {
              type: "FactSet",
              facts: [
                { title: "Payment ID", value: d.payment_id },
                { title: "Amount", value: `$${(d.amount / 100).toFixed(2)}` },
                { title: "Status", value: d.dispute_status },
                { title: "Stage", value: d.dispute_stage }
              ]
            }
          ]
        }
      }]
    };
  }
  return webhook;
}

Conseils

  • Utilisez des cartes adaptatives pour un formatage riche et interactif
  • Choisissez des couleurs appropriées : Bon (vert), Avertissement (jaune), Attention (rouge)
  • Gardez les ensembles de faits concis et lisibles
  • Testez avec le testeur de webhook Teams avant de déployer

Dépannage

  • Vérifiez que l’URL du webhook est correcte et active
  • Assurez-vous que la transformation renvoie un JSON de carte adaptative valide
  • Assurez-vous que le webhook a la permission de publier dans le canal
  • Validez le schéma de la carte adaptative dans le testeur de webhook Teams
  • Vérifiez que tous les champs requis sont présents
  • Assurez-vous que les valeurs de couleur sont valides (Bon, Avertissement, Attention, Par défaut)