Zum Inhalt springen
FrankKi
Deutsch/English
App laden

SaaS-Batch-Versender-Transkript

Dieses Transkript ist in sich geschlossen: mit jedem frischen Test-Token aus /dashboard/tokens Ende-zu-Ende reproduzierbar. Es wird kein Preset, kein Adressbuch-Eintrag und keine vorherige Konfiguration vorausgesetzt, jede Voraussetzung wird inline oder als früherer Schritt in genau diesem Transkript angelegt.

  1. Setup: eine Mahnwesen-SaaS-Plattform holt sich einen frischen Test-Token in /dashboard/tokens und lässt ihren nächtlichen Job für überfällige Rechnungen gegen die Sandbox laufen, statt gegen ein von Hand konfiguriertes Preset. Die Empfänger sind inline angegeben, keine Preset- und keine Adressbuch-Voraussetzung (Finding 12).
  2. Tool-Aufruf
    mcp_health
  3. Ergebnis
    {
      "status": "ok",
      "code": "OK",
      "message": "Verbindung geprüft.",
      "data": {
        "healthy": true,
        "isTest": true
      },
      "requestId": "req_6b0e2a19"
    }
  4. Schritt 1: ein Dry-Run über den ganzen Stapel. Jeder Eintrag wird vollständig geprüft (Pflichtangaben, Adresse, Content-Filter), aber nichts wird berechnet und nichts versendet.
  5. Tool-Aufruf
    order_send_batch
    {
      "dryRun": true,
      "items": [
        {
          "clientOrderId": "mahnung-re-10231",
          "subject": "Zahlungserinnerung RE-10231",
          "content": "Sehr geehrte(r) Michael Bauer,\n\nfür die oben genannte Rechnung ist der Zahlungseingang bislang nicht bei uns eingegangen. Bitte begleichen Sie den offenen Betrag innerhalb von 10 Tagen.\n\nMit freundlichen Grüßen",
          "recipientName": "Michael Bauer",
          "recipientStreet": "Ahornweg 12",
          "recipientZip": "50667",
          "recipientCity": "Köln",
          "recipientCountry": "DE"
        },
        {
          "clientOrderId": "mahnung-re-10245",
          "subject": "Zahlungserinnerung RE-10245",
          "content": "Sehr geehrte(r) Sabine Keller,\n\nfür die oben genannte Rechnung ist der Zahlungseingang bislang nicht bei uns eingegangen. Bitte begleichen Sie den offenen Betrag innerhalb von 10 Tagen.\n\nMit freundlichen Grüßen",
          "recipientName": "Sabine Keller",
          "recipientStreet": "Feldstraße 4",
          "recipientZip": "20095",
          "recipientCity": "Hamburg",
          "recipientCountry": "DE"
        },
        {
          "clientOrderId": "mahnung-re-10250",
          "subject": "Zahlungserinnerung RE-10250",
          "content": "Sehr geehrte(r) Jan Novak,\n\nfür die oben genannte Rechnung ist der Zahlungseingang bislang nicht bei uns eingegangen. Bitte begleichen Sie den offenen Betrag innerhalb von 10 Tagen.\n\nMit freundlichen Grüßen",
          "recipientName": "Jan Novak",
          "recipientStreet": "Hauptstraße 77",
          "recipientZip": "70173",
          "recipientCity": "Stuttgart",
          "recipientCountry": "DE"
        }
      ]
    }
  6. Ergebnis
    {
      "status": "ok",
      "code": "OK",
      "message": "Dry-Run abgeschlossen.",
      "data": {
        "items": [
          {
            "clientOrderId": "mahnung-re-10231",
            "ok": true,
            "status": "would_send",
            "orderStatus": "would_send",
            "orderId": null,
            "isReplay": false,
            "costCents": null,
            "dryRunWouldHaveCost": 349,
            "fulfillmentProvider": "letterxpress",
            "einlieferungsbelegPending": true
          },
          {
            "clientOrderId": "mahnung-re-10245",
            "ok": true,
            "status": "would_send",
            "orderStatus": "would_send",
            "orderId": null,
            "isReplay": false,
            "costCents": null,
            "dryRunWouldHaveCost": 349,
            "fulfillmentProvider": "letterxpress",
            "einlieferungsbelegPending": true
          },
          {
            "clientOrderId": "mahnung-re-10250",
            "ok": true,
            "status": "would_send",
            "orderStatus": "would_send",
            "orderId": null,
            "isReplay": false,
            "costCents": null,
            "dryRunWouldHaveCost": 349,
            "fulfillmentProvider": "letterxpress",
            "einlieferungsbelegPending": true
          }
        ],
        "summary": {
          "total": 3,
          "byStatus": {
            "would_send": 3
          },
          "costEuros": 0,
          "dryRunWouldHaveCostEuros": 10.47
        }
      },
      "requestId": "req_ba201d5c"
    }
  7. dryRunWouldHaveCost pro Eintrag und dryRunWouldHaveCostEuros in der summary zeigen genau, was ein Live-Stapel kosten würde, während costEuros im Dry-Run bei 0 bleibt.
  8. Schritt 2: derselbe Stapel, diesmal als echter Sandbox-Versand (kein dryRun). Der volle Sechs-Gate-Send-Core läuft pro Eintrag, genau wie live.
  9. Tool-Aufruf
    order_send_batch
    {
      "items": [
        {
          "clientOrderId": "mahnung-re-10231",
          "subject": "Zahlungserinnerung RE-10231",
          "content": "Sehr geehrte(r) Michael Bauer,\n\nfür die oben genannte Rechnung ist der Zahlungseingang bislang nicht bei uns eingegangen. Bitte begleichen Sie den offenen Betrag innerhalb von 10 Tagen.\n\nMit freundlichen Grüßen",
          "recipientName": "Michael Bauer",
          "recipientStreet": "Ahornweg 12",
          "recipientZip": "50667",
          "recipientCity": "Köln",
          "recipientCountry": "DE"
        },
        {
          "clientOrderId": "mahnung-re-10245",
          "subject": "Zahlungserinnerung RE-10245",
          "content": "Sehr geehrte(r) Sabine Keller,\n\nfür die oben genannte Rechnung ist der Zahlungseingang bislang nicht bei uns eingegangen. Bitte begleichen Sie den offenen Betrag innerhalb von 10 Tagen.\n\nMit freundlichen Grüßen",
          "recipientName": "Sabine Keller",
          "recipientStreet": "Feldstraße 4",
          "recipientZip": "20095",
          "recipientCity": "Hamburg",
          "recipientCountry": "DE"
        },
        {
          "clientOrderId": "mahnung-re-10250",
          "subject": "Zahlungserinnerung RE-10250",
          "content": "Sehr geehrte(r) Jan Novak,\n\nfür die oben genannte Rechnung ist der Zahlungseingang bislang nicht bei uns eingegangen. Bitte begleichen Sie den offenen Betrag innerhalb von 10 Tagen.\n\nMit freundlichen Grüßen",
          "recipientName": "Jan Novak",
          "recipientStreet": "Hauptstraße 77",
          "recipientZip": "70173",
          "recipientCity": "Stuttgart",
          "recipientCountry": "DE"
        }
      ]
    }
  10. Ergebnis
    {
      "status": "ok",
      "code": "OK",
      "message": "Stapel verarbeitet.",
      "data": {
        "items": [
          {
            "clientOrderId": "mahnung-re-10231",
            "ok": true,
            "status": "sent",
            "orderStatus": "paid",
            "orderId": "a1e9c7d2-8f31-4b0a-9c6e-2d7a5f9b1001",
            "isReplay": false,
            "costCents": 349,
            "fulfillmentProvider": "letterxpress",
            "einlieferungsbelegPending": true
          },
          {
            "clientOrderId": "mahnung-re-10245",
            "ok": true,
            "status": "sent",
            "orderStatus": "paid",
            "orderId": "b2f0d8e3-9042-4c1b-ad7f-3e8b6a0c2002",
            "isReplay": false,
            "costCents": 349,
            "fulfillmentProvider": "letterxpress",
            "einlieferungsbelegPending": true
          },
          {
            "clientOrderId": "mahnung-re-10250",
            "ok": true,
            "status": "sent",
            "orderStatus": "paid",
            "orderId": "c3a1e9f4-a153-4d2c-be80-4f9c7b1d3003",
            "isReplay": false,
            "costCents": 349,
            "fulfillmentProvider": "letterxpress",
            "einlieferungsbelegPending": true
          }
        ],
        "summary": {
          "total": 3,
          "byStatus": {
            "sent": 3
          },
          "costEuros": 10.47
        }
      },
      "requestId": "req_1f6d9e77"
    }
  11. summary.costEuros zeigt wieder den echten Preis, den der Stapel live gekostet hätte. Jeder Auftrag trägt is_test:true und jede Ledger-Zeile bucht 0 Cent, es wird also nichts wirklich abgebucht.
  12. Schritt 3: Replay-Nachweis. Ein erneuter Aufruf von order_send_batch mit DENSELBEN clientOrderId-Werten (wie ein Cron-Retry nach einem Absturz) löst nie einen doppelten Versand aus.
  13. Tool-Aufruf
    order_send_batch
    {
      "items": [
        {
          "clientOrderId": "mahnung-re-10231",
          "subject": "Zahlungserinnerung RE-10231",
          "content": "Sehr geehrte(r) Michael Bauer,\n\nfür die oben genannte Rechnung ist der Zahlungseingang bislang nicht bei uns eingegangen. Bitte begleichen Sie den offenen Betrag innerhalb von 10 Tagen.\n\nMit freundlichen Grüßen",
          "recipientName": "Michael Bauer",
          "recipientStreet": "Ahornweg 12",
          "recipientZip": "50667",
          "recipientCity": "Köln",
          "recipientCountry": "DE"
        },
        {
          "clientOrderId": "mahnung-re-10245",
          "subject": "Zahlungserinnerung RE-10245",
          "content": "Sehr geehrte(r) Sabine Keller,\n\nfür die oben genannte Rechnung ist der Zahlungseingang bislang nicht bei uns eingegangen. Bitte begleichen Sie den offenen Betrag innerhalb von 10 Tagen.\n\nMit freundlichen Grüßen",
          "recipientName": "Sabine Keller",
          "recipientStreet": "Feldstraße 4",
          "recipientZip": "20095",
          "recipientCity": "Hamburg",
          "recipientCountry": "DE"
        },
        {
          "clientOrderId": "mahnung-re-10250",
          "subject": "Zahlungserinnerung RE-10250",
          "content": "Sehr geehrte(r) Jan Novak,\n\nfür die oben genannte Rechnung ist der Zahlungseingang bislang nicht bei uns eingegangen. Bitte begleichen Sie den offenen Betrag innerhalb von 10 Tagen.\n\nMit freundlichen Grüßen",
          "recipientName": "Jan Novak",
          "recipientStreet": "Hauptstraße 77",
          "recipientZip": "70173",
          "recipientCity": "Stuttgart",
          "recipientCountry": "DE"
        }
      ]
    }
  14. Ergebnis
    {
      "status": "ok",
      "code": "OK",
      "message": "Stapel verarbeitet.",
      "data": {
        "items": [
          {
            "clientOrderId": "mahnung-re-10231",
            "ok": true,
            "status": "skipped",
            "orderStatus": "paid",
            "orderId": "a1e9c7d2-8f31-4b0a-9c6e-2d7a5f9b1001",
            "isReplay": true,
            "costCents": 349,
            "fulfillmentProvider": "letterxpress",
            "einlieferungsbelegPending": true
          },
          {
            "clientOrderId": "mahnung-re-10245",
            "ok": true,
            "status": "skipped",
            "orderStatus": "paid",
            "orderId": "b2f0d8e3-9042-4c1b-ad7f-3e8b6a0c2002",
            "isReplay": true,
            "costCents": 349,
            "fulfillmentProvider": "letterxpress",
            "einlieferungsbelegPending": true
          },
          {
            "clientOrderId": "mahnung-re-10250",
            "ok": true,
            "status": "skipped",
            "orderStatus": "paid",
            "orderId": "c3a1e9f4-a153-4d2c-be80-4f9c7b1d3003",
            "isReplay": true,
            "costCents": 349,
            "fulfillmentProvider": "letterxpress",
            "einlieferungsbelegPending": true
          }
        ],
        "summary": {
          "total": 3,
          "byStatus": {
            "skipped": 3
          },
          "costEuros": 0
        }
      },
      "requestId": "req_9c02fa48"
    }
  15. isReplay:true und status:"skipped" pro Eintrag, dieselbe orderId wie zuvor, costEuros in der summary wieder bei 0. Genau das ist die Integrationstest-Geschichte, die ein Tier-4-SaaS-Entwickler braucht, Ende-zu-Ende reproduzierbar mit einem einzigen frischen Test-Token, ohne Preset, ohne Vorbereitung.

Verwendete Tools

Jedes Tool hier ist in der Tool-Referenz vollständig dokumentiert (Felder, Scope, dryRun).

Anderes Transkript ansehen: Steuerberater

Vertrauen und Live-Status

Maschinenlesbare Servicefakten und der aktuelle Betriebsstatus der Partner-Schnittstelle stehen jederzeit offen zur Verfügung, ohne Login.