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 benötigt Ihre Inngest-Webhooks-URL aus Ihrer Funktionskonfiguration.

Erste Schritte

1

Open the Webhook Section

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

Select Inngest

Wählen Sie die Integrationskarte Inngest.
3

Create Inngest Function

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

Paste Webhook URL

Fügen Sie die Inngest-Webhooks-URL in die Endpunktkonfiguration ein.
5

Configure Transformation

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

Test & Create

Testen Sie mit Beispiel-Payloads und klicken Sie auf Erstellen, um die Integration zu aktivieren.
7

Done!

🎉 Zahlungsevents lösen nun automatisch Ihre Inngest-Funktionen aus.

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
  • Lagerbestand aktualisieren
  • Neue Abonnenten begrüßen
  • Kündigungen bearbeiten
  • Erinnerungen für Verlängerungen senden
  • Abrechnungszyklen aktualisieren
  • Fehlgeschlagene Zahlungen bearbeiten
  • Umsatzkennzahlen aktualisieren
  • Kundenverhalten verfolgen
  • Berichte erstellen
  • Daten mit Analyseplattformen synchronisieren
  • Kündigungsraten 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 Inngest-Funktionsprotokolle auf Fehler
  • Prüfen Sie, ob die Payload-Struktur den Inngest-Erwartungen entspricht
  • Vergewissern Sie sich, dass die Ereignisnamen richtig formatiert sind
  • Stellen Sie sicher, dass alle erforderlichen Felder enthalten sind
  • Testen Sie mit dem Webhook-Testtool von Inngest