Zum Hauptinhalt springen
connic

Stripe

Von connic
Inbound

Starte einen Agenten bei fehlgeschlagenen Zahlungen, Abo-Änderungen, Zahlungsanfechtungen oder jedem anderen Stripe-Event. connic prüft die Signatur, bevor etwas läuft.

Publisher
Von connic
Modi
Inbound
Einrichtung
Dashboard oder connectors/*.yaml
Dokumentation
Stripe Docs

Erhalte das ganze Event als Eingabe

Der Agent bekommt jedes Event so, wie Stripe es sendet, mit Typ und dem zugehörigen data.object. So kann er sofort auf einen Decline Code oder einen neuen Plan reagieren.

Jeder Event-Typ
Payment Intents, Rechnungen, Abos, Anfechtungen und der Rest des Stripe-Katalogs. Die Verbindung leitet alles weiter, was der Endpoint sendet.
Jeder verknüpfte Agent
Ein Event startet einen Run für jeden Agenten, der mit der Verbindung verknüpft ist, und die Antwort an Stripe enthält die Run-IDs.
Überspring, was ein Agent ignoriert
Wirf in der before()-Middleware StopProcessing für Event-Typen, die ein Agent nicht bearbeitet. Der Run endet dann, bevor das Modell aufgerufen wird.
payment-failed.json
{
  "id": "evt_3Q8812",
  "object": "event",
  "type": "payment_intent.payment_failed",
  "data": {
    "object": {
      "id": "pi_3Q8812",
      "amount": 4900,
      "currency": "eur",
      "customer": "cus_R48812",
      "last_payment_error": {
        "code": "expired_card",
        "message": "Your card has expired."
      }
    }
  }
}
subscription-updated.json
{
  "id": "evt_3Q9120",
  "object": "event",
  "type": "customer.subscription.updated",
  "data": {
    "object": {
      "id": "sub_1Q4102",
      "customer": "cus_R48812",
      "status": "active",
      "plan": { "id": "plan_pro", "amount": 4900, "interval": "month" }
    },
    "previous_attributes": {
      "plan": { "id": "plan_starter" }
    }
  }
}

Nur signierte Events starten einen Run

connic prüft jede Anfrage mit dem Signing Secret deines Endpoints, bevor ein Agent sie sieht.

Zuerst das Signing Secret
Bis du das whsec_ Secret aus Stripe speicherst, bekommt jede Anfrage eine 400, und nichts läuft.
HMAC-SHA256
Der Stripe-Signature Header muss zu einer Signatur über Timestamp und unveränderten Body passen. Fehlt sie oder stimmt sie nicht, antwortet connic mit 401.
Fünf-Minuten-Fenster
Events, die vor mehr als fünf Minuten signiert wurden, lehnt connic ab. Alte Anfragen lassen sich so nicht erneut einspielen.
response-200.json
{
  "status": "ok",
  "event_type": "payment_intent.payment_failed",
  "dispatched_to": 1,
  "run_ids": ["550e8400-e29b-41d4-a716-446655440000"]
}
response-401.json
{
  "error": "Invalid Stripe signature"
}

Halte den Stripe-Trigger im Code

Deklariere ihn in connectors/. Das Signing Secret kommt aus einer Variable und steht deshalb nie in der Datei. Deploye einmal, um die URL zu bekommen, lege den Endpoint in Stripe an und speichere dann sein whsec_ Secret als Variable, auf die die Datei verweist.

connectors/billing-events.yaml
type: stripe
name: Billing events
config:
  webhook_secret: ${STRIPE_WEBHOOK_SECRET}
agents:
  - dunning-agent
update: connectors/billing-events.yaml (stripe)

Wähle die Events in Stripe aus

Du verbindest Stripe einmal im Stripe Dashboard. Welche Events deine Agenten erreichen, änderst du danach dort, ohne Deployment.

Pausierte Verbindung
connic antwortet Stripe mit 200 und startet keinen Run. Events aus dieser Zeit werden nicht gespeichert und nach dem Fortsetzen nicht nachgeholt.
Rate Limits
Anfragen über dem Rate Limit der Verbindung bekommen eine 429 mit einem retry_after-Wert.
  1. Verbindung erstellen

    connic erzeugt die Webhook-URL. Bei einer Verbindung im Code übernimmt das das erste Deployment.

  2. Endpoint in Stripe anlegen

    Füge die URL als Webhook-Endpoint ein und wähle die Events aus, die Stripe senden soll.

  3. Signing Secret speichern

    Kopiere das whsec_ Secret, das Stripe für den Endpoint erzeugt, in die Verbindung.

  4. Events starten Runs

    Jedes geprüfte Event startet die verknüpften Agenten, und jeder Run erscheint mit seinem Trace in Agent Runs.

Wo ein Stripe-Trigger passt

Wähle ein Szenario und sieh, welches Event den Agenten startet, was er bekommt und wohin das Ergebnis geht.

Eine abgelehnte Zahlung startet den Agenten, der dem Kunden eine zum Ablehnungsgrund passende E-Mail schickt.

Abgelehnte Zahlung
Stripe Inbound
dunning-agent
E-Mail an den Kunden
event.json
{
  "id": "evt_3Q8812",
  "object": "event",
  "type": "payment_intent.payment_failed",
  "data": {
    "object": {
      "id": "pi_3Q8812",
      "amount": 4900,
      "currency": "eur",
      "customer": "cus_R48812",
      "last_payment_error": {
        "code": "card_declined",
        "decline_code": "insufficient_funds",
        "message": "Your card has insufficient funds."
      }
    }
  }
}
connector-payload.json
{
  "to": "jana@example.com",
  "subject": "Your payment of 49.00 EUR didn't go through",
  "body": "We'll retry in three days, or pay now with another card."
}

Ein Plan-Upgrade startet den Agenten, der dein Customer-Success-Team in Slack informiert.

Plan-Upgrade
Stripe Inbound
upgrade-notifier
Hinweis in Slack
event.json
{
  "id": "evt_3Q9120",
  "object": "event",
  "type": "customer.subscription.updated",
  "data": {
    "object": {
      "id": "sub_1Q4102",
      "customer": "cus_R48812",
      "status": "active",
      "plan": { "id": "plan_pro", "amount": 4900, "interval": "month" }
    },
    "previous_attributes": {
      "plan": { "id": "plan_starter" }
    }
  }
}
connector-payload.json
{
  "text": "Example GmbH moved from Starter to pro (49 EUR per month).",
  "channel_id": "C01234567"
}

Eine neue Anfechtung startet den Agenten, der Bestell- und Support-Historie zu einem Antwortentwurf für die Buchhaltung zusammenstellt.

Neue Anfechtung
Stripe Inbound
dispute-assistant
Entwurf für die Buchhaltung
event.json
{
  "id": "evt_3Q9455",
  "object": "event",
  "type": "charge.dispute.created",
  "data": {
    "object": {
      "id": "dp_1Q9455",
      "amount": 12900,
      "currency": "eur",
      "charge": "ch_3Q9455",
      "reason": "product_not_received",
      "status": "needs_response"
    }
  }
}
connector-payload.json
{
  "to": "finance@example.com",
  "subject": "Draft response for dispute dp_1Q9455",
  "body": "Order ord_8812 shipped Oct 2 and was signed for on Oct 4."
}

Ein gekündigtes Abo startet den Agenten, der den angegebenen Grund liest und ein Rückgewinnungsangebot in deinem CRM anlegt.

Kündigung
Stripe Inbound
winback-agent
Angebot im CRM
event.json
{
  "id": "evt_3Q9871",
  "object": "event",
  "type": "customer.subscription.deleted",
  "data": {
    "object": {
      "id": "sub_1Q4102",
      "customer": "cus_R48812",
      "status": "canceled",
      "cancellation_details": {
        "reason": "cancellation_requested",
        "feedback": "too_expensive"
      }
    }
  }
}
outbound-payload.json
{
  "run_id": "550e8400-e29b-41d4-a716-446655440000",
  "agent_name": "winback-agent",
  "status": "completed",
  "output": "Offer 20% off pro for three months. Reason given: price.",
  "error": null,
  "started_at": "2026-10-13T09:00:00Z",
  "ended_at": "2026-10-13T09:00:04Z",
  "token_usage": {
    "input_tokens": 905,
    "output_tokens": 41,
    "thinking_tokens": 0,
    "cached_input_tokens": 0,
    "total_tokens": 946
  }
}

FAQ zu Stripe

Füge eine Stripe-Verbindung hinzu, trage ihre URL in Stripe als Webhook-Endpoint mit payment_intent.payment_failed ein und kopiere das Signing Secret des Endpoints in die Verbindung. Jede fehlgeschlagene Zahlung startet dann einen Run mit dem vollständigen Event samt Fehlercode und Customer-ID.

Jedes Event, das dein Stripe-Endpoint abonniert. Die Verbindung leitet alles weiter, was der Endpoint sendet. Die Auswahl änderst du also in Stripe, ohne deinen Agenten anzufassen.

Nein. connic prüft den Stripe-Signature Header per HMAC-SHA256 mit deinem whsec_ Secret und lehnt Events ab, die vor mehr als fünf Minuten signiert wurden. Solange kein Secret gespeichert ist, nimmt die Verbindung keine Events an.

connic antwortet Stripe mit 200 und startet keine Runs. Die Events werden nicht gespeichert und nach dem Fortsetzen nicht nachgeholt.