Zum Hauptinhalt springen

Einführung

Führen Sie serverlose Funktionen und Hintergrundjobs automatisch aus, wenn Zahlungsevents auftreten. Verarbeiten Sie Zahlungen, senden Sie Benachrichtigungen, aktualisieren Sie Datenbanken und führen Sie komplexe Workflows mit der zuverlässigen Funktionsausführungsplattform von Inngest aus.
Diese Integration erfordert Ihre Inngest-Webhook-URL aus der Funktionskonfiguration.

Erste Schritte

1

Webhook-Bereich öffnen

Navigieren Sie in Ihrem Dodo Payments-Dashboard zu Webhooks → + Endpoint hinzufügen und erweitern Sie das Dropdown-Menü für Integrationen.
Endpoint hinzufügen und Dropdown-Menü für Integrationen
2

Inngest auswählen

Wählen Sie die Integrationskarte Inngest aus.
3

Inngest-Funktion erstellen

Erstellen Sie in Inngest eine neue Funktion und kopieren Sie die Webhook-URL aus der Funktionskonfiguration.
4

Webhook-URL einfügen

Fügen Sie die Inngest-Webhook-URL in die Endpoint-Konfiguration ein.
5

Transformation konfigurieren

Bearbeiten Sie den Transformationscode, um Ereignisse für Ihre Inngest-Funktion zu formatieren.
6

Testen & Erstellen

Testen Sie mit Beispielpayloads und klicken Sie auf Erstellen, um die Integration zu aktivieren.
7

Fertig!

🎉 Zahlungsevents werden nun automatisch Ihre Inngest-Funktionen auslösen.

Transformationscode-Beispiele

Basis-Ereignispayload

basic_event.js
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.payload = {
      name: "payment.succeeded",
      data: {
        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"
      },
      user: {
        email: p.customer.email
      },
      ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
    };
  }
  return webhook;
}

Abonnement-Ereignis-Handler

subscription_event.js
function handler(webhook) {
  const s = webhook.payload.data;
  switch (webhook.eventType) {
    case "subscription.active":
      webhook.payload = {
        name: "subscription.started",
        data: {
          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
        },
        user: {
          email: s.customer.email
        },
        ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
      };
      break;
    case "subscription.cancelled":
      webhook.payload = {
        name: "subscription.cancelled",
        data: {
          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
        },
        user: {
          email: s.customer.email
        },
        ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
      };
      break;
  }
  return webhook;
}

Streitfall-Ereignis-Handler

dispute_event.js
function handler(webhook) {
  if (webhook.eventType.startsWith("dispute.")) {
    const d = webhook.payload.data;
    webhook.payload = {
      name: webhook.eventType,
      data: {
        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"
      },
      user: {
        email: d.customer?.email || "unknown"
      },
      ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
    };
  }
  return webhook;
}

Häufige Inngest-Anwendungsfälle

  • Bestätigungs-E-Mails senden
  • Kundenakten aktualisieren
  • Rückerstattungen bearbeiten
  • Rechnungen erstellen
  • Bestände aktualisieren
  • Neue Abonnenten begrüßen
  • Stornierungen bearbeiten
  • Erinnerungen an Erneuerungen senden
  • Abrechnungszyklen aktualisieren
  • Fehlgeschlagene Zahlungen bearbeiten
  • Umsatzkennzahlen aktualisieren
  • Kundenverhalten verfolgen
  • Berichte erstellen
  • Daten mit Analyseplattformen synchronisieren
  • Abwanderungsraten berechnen

Tipps

  • Verwenden Sie beschreibende Ereignisnamen für eine bessere Funktionsorganisation
  • Fügen Sie Benutzerkontext für die Funktionsausführung hinzu
  • Setzen Sie korrekte Zeitstempel für die Ereignisreihenfolge
  • Strukturieren Sie Daten konsistent über Ereignisse hinweg
  • Nutzen Sie die Wiederholungs- und Fehlerbehandlungsfunktionen von Inngest

Fehlersuche

  • Überprüfen Sie, ob die Webhook-URL korrekt und aktiv ist
  • Stellen Sie sicher, dass die Inngest-Funktion bereitgestellt und aktiv ist
  • Stellen Sie sicher, dass die Ereignisnamen mit den Funktionsauslösern übereinstimmen
  • Überprüfen Sie die Protokolle der Inngest-Funktion auf Fehler
  • Überprüfen Sie, ob die Payload-Struktur den Erwartungen von Inngest entspricht
  • Stellen Sie sicher, dass die Ereignisnamen korrekt formatiert sind
  • Stellen Sie sicher, dass alle erforderlichen Felder enthalten sind
  • Testen Sie mit dem Webhook-Testtool von Inngest