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

# Keplars

> Senden Sie transaktionale E-Mails über Keplars basierend auf Dodo Payments-Ereignissen.

## Einführung

Senden Sie automatisch professionelle transaktionale E-Mails, wenn Zahlungs- und Abonnementereignisse auftreten. Übermitteln Sie Zahlungsbestätigungen, Abonnement-Updates und Fehlerbenachrichtigungen über Keplars, ohne dass ein Middleware-Server erforderlich ist. Dodo Payments ruft die Keplars API direkt mit einem JavaScript-Transformation Handler auf.

<Info>
  Diese Integration erfordert Ihren Keplars API-Schlüssel zur Authentifizierung. Finden Sie ihn im Keplars-Dashboard unter **Einstellungen → API-Schlüssel**, und verifizieren Sie eine Senderdomain oder -adresse unter **Domains**.
</Info>

## Erste Schritte

<Steps>
  <Step title="Open the Webhook Section">
    Navigieren Sie in Ihrem Dodo Payments-Dashboard zu <b>Webhooks → + Endpunkt hinzufügen</b> und erweitern Sie das Integrations-Dropdown.
  </Step>

  <Step title="Select Keplars">
    Wählen Sie die <b>Keplars</b>-Integrationskarte.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/tM0KgwbOo2xwg7zr/images/integrations/keplars/select.png?fit=max&auto=format&n=tM0KgwbOo2xwg7zr&q=85&s=776a4a2228efa0822b15b13d2baaf5bb" alt="Wählen Sie die Keplars-Integrationskarte" style={{ maxHeight: '500px', width: 'auto' }} width="1040" height="731" data-path="images/integrations/keplars/select.png" />
    </Frame>
  </Step>

  <Step title="Enter API Key">
    Geben Sie Ihren Keplars API-Schlüssel ein. Dieser wird als Bearer-Token bei jeder Anfrage gesendet.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/tM0KgwbOo2xwg7zr/images/integrations/keplars/api-key.png?fit=max&auto=format&n=tM0KgwbOo2xwg7zr&q=85&s=f3e0917155715d0587a6012c1bfd3f26" alt="Geben Sie die Keplars API-URL, den API-Schlüssel ein und abonnieren Sie Ereignisse" style={{ maxHeight: '500px', width: 'auto' }} width="982" height="854" data-path="images/integrations/keplars/api-key.png" />
    </Frame>
  </Step>

  <Step title="Configure Transformation">
    Bearbeiten Sie den Transformation-Code, um E-Mails für Keplars zu formatieren. Ersetzen Sie die Platzhalter-Senderadresse und die Template-IDs durch Ihre eigenen.
  </Step>

  <Step title="Test & Create">
    Testen Sie mit Beispieldaten und klicken Sie auf <b>Erstellen</b>, um das Versenden von E-Mails zu aktivieren.
  </Step>

  <Step title="Done!">
    🎉 Zahlungsevents lösen nun automatisch transaktionale E-Mails über Keplars aus.
  </Step>
</Steps>

## Transformationscode-Beispiele

Jeder Handler setzt `webhook.url` auf den Keplars-Hochprioritäts-Sendepunkt und schreibt `webhook.payload` in eine Keplars-Anfrage um (der API-Schlüssel wird automatisch als Bearer-Token gesendet). Ersetzen Sie `payments@mail.yourdomain.com` mit Ihrem verifizierten Absender und `your-keplars-*-template-id` mit Ihren tatsächlichen Template-IDs.

<Warning>
  `to` muss ein **Array** sein, selbst für einen einzelnen Empfänger. Wenn Sie `template_id` verwenden, senden Sie **nicht** auch `subject` oder `body`. Das Template stellt diese bereit.
</Warning>

### Zahlungsbestätigungs-E-Mail

```javascript payment_succeeded.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType !== "payment.succeeded") return webhook;

  const data = webhook.payload.data || {};
  const paymentDate = new Date(webhook.payload.timestamp).toLocaleDateString("en-US", {
    year: "numeric", month: "long", day: "numeric",
  });

  webhook.url = "https://api.keplars.com/api/v1/send-email/high";
  webhook.payload = {
    to: [data.customer?.email],
    from: "payments@mail.yourdomain.com",
    template_id: "your-keplars-payment-success-template-id",
    params: {
      customer_name: data.customer?.name,
      amount: ((data.total_amount || 0) / 100).toFixed(2),
      currency: data.currency || "USD",
      payment_id: data.payment_id,
      payment_method: data.payment_method,
      payment_date: paymentDate,
    },
  };
  return webhook;
}
```

### Benachrichtigung über Zahlungsfehler

```javascript payment_failed.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType !== "payment.failed") return webhook;

  const data = webhook.payload.data || {};
  const paymentDate = new Date(webhook.payload.timestamp).toLocaleDateString("en-US", {
    year: "numeric", month: "long", day: "numeric",
  });

  webhook.url = "https://api.keplars.com/api/v1/send-email/high";
  webhook.payload = {
    to: [data.customer?.email],
    from: "payments@mail.yourdomain.com",
    template_id: "your-keplars-payment-failed-template-id",
    params: {
      customer_name: data.customer?.name,
      amount: ((data.total_amount || 0) / 100).toFixed(2),
      currency: data.currency || "USD",
      payment_id: data.payment_id,
      error_message: data.error_message || "Your payment could not be processed.",
      payment_date: paymentDate,
    },
  };
  return webhook;
}
```

### Willkommens-E-Mail zum Abonnement

```javascript subscription_active.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType !== "subscription.active") return webhook;

  const data = webhook.payload.data || {};
  const nextBilling = data.next_billing_date
    ? new Date(data.next_billing_date).toLocaleDateString("en-US", {
        year: "numeric", month: "long", day: "numeric",
      })
    : "";

  webhook.url = "https://api.keplars.com/api/v1/send-email/high";
  webhook.payload = {
    to: [data.customer?.email],
    from: "payments@mail.yourdomain.com",
    template_id: "your-keplars-subscription-active-template-id",
    params: {
      customer_name: data.customer?.name,
      subscription_id: data.subscription_id,
      product_id: data.product_id,
      amount: ((data.recurring_pre_tax_amount || 0) / 100).toFixed(2),
      currency: data.currency || "USD",
      billing_interval: data.payment_frequency_interval || "month",
      next_billing_date: nextBilling,
    },
  };
  return webhook;
}
```

### Kündigungs-E-Mail zum Abonnement

```javascript subscription_cancelled.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType !== "subscription.cancelled") return webhook;

  const data = webhook.payload.data || {};
  const cancellationDate = new Date(webhook.payload.timestamp).toLocaleDateString("en-US", {
    year: "numeric", month: "long", day: "numeric",
  });

  webhook.url = "https://api.keplars.com/api/v1/send-email/high";
  webhook.payload = {
    to: [data.customer?.email],
    from: "payments@mail.yourdomain.com",
    template_id: "your-keplars-subscription-cancelled-template-id",
    params: {
      customer_name: data.customer?.name,
      subscription_id: data.subscription_id,
      cancellation_date: cancellationDate,
    },
  };
  return webhook;
}
```

## Tipps

* Verwenden Sie eine verifizierte Senderdomain oder -adresse für bessere Zustellbarkeit.
* Erstellen Sie ein dediziertes Keplars-Template für jeden Ereignistyp, damit jede E-Mail markenkonform und konsistent bleibt.
* Personalisieren Sie jede E-Mail, indem Sie Kundendaten wie Name, Betrag und Zahlungs-ID über `params` übergeben.
* Testen Sie zuerst im Sandbox-Modus. Sandbox-Sendungen werden im Keplars-Testpostfach erfasst, anstatt zugestellt zu werden.

## Fehlerbehebung

<AccordionGroup>
  <Accordion title="Emails not being sent">
    * Überprüfen Sie, ob Ihr API-Schlüssel in Keplars unter **Einstellungen → API-Schlüssel** korrekt und aktiv ist.
    * Überprüfen Sie, ob Ihre Senderdomain oder -adresse verifiziert ist.
    * Dodo Payments zeigt die rohen Keplars-Fehlerantworten im Webhook-Übertragungsprotokoll an. Überprüfen Sie es auf Details.
  </Accordion>

  <Accordion title="Template not found">
    * Der `template_id` in Ihrem Handler muss mit einem aktiven Template in Ihrem Keplars-Konto übereinstimmen. Überprüfen Sie die ID (und ob sie aktiv ist) im Dashboard.
  </Accordion>

  <Accordion title="Wrong event triggered">
    * Jeder Handler überprüft `webhook.eventType` und kehrt frühzeitig zurück, wenn es nicht übereinstimmt. Stellen Sie sicher, dass die richtigen Ereignisse am Dodo Payments-Webhook-Endpunkt abonniert sind.
  </Accordion>
</AccordionGroup>
