Nutze die Lifecycle-Oberfläche, wenn Memories Datensätze spiegeln, die deiner Datenbank gehören – CRM-Zeilen, Profilfelder, Tickets. Anders als das anfüge-nur save haben diese Memories eine durable Identität und Versionshistorie, sodass Korrekturen und Deletes aus der Source of Truth genau einmal, in Reihenfolge angewendet werden, egal wie chaotisch die Zustellung ist.
Das Identitätsmodell
Eine source-owned Memory wird durch (endUserId, source, externalId) identifiziert. version muss immer dann steigen, wenn sich der Quelldatensatz ändert.
Zustellgarantien
Mutationen sind synchron, und die Regeln sind einfach:
- Dieselbe Version + Payload erneut senden liefert dieselbe durable Quittung. Nach einem Crash erneut zu senden ist sicher – das ist die Crash-Recovery-Story.
- Eine andere Payload für eine bestehende Version liefert
409. Versionen sind immutable.
- Eine verzögerte ältere Version liefert
409 und überschreibt niemals neueren Inhalt oder lässt eine gelöschte Memory wiederauferstehen.
Deletes folgen derselben Versionierung:
Der Delete ist durable: Retries konvergieren zur ursprünglichen Quittung, und verzögerte Upserts mit niedrigeren Versionen können die Memory nicht neu anlegen.
Bootstrapping mit einer Outbox
Spiegele bestehende Datensätze in großen Mengen per lifecycleBatch – bis zu 100 Items und 1 MiB aggregierter Content pro Call. Es gibt keinen serverseitigen Import-Job; eine clientseitige Outbox, die nach einem Crash erneut sendet, ist die vollständige Resume-Story:
result.success bedeutet nur „der Batch wurde verarbeitet” – prüfe stets die Ergebnisse pro Item. Markiere eine Zeile bei success oder stale_source_version als erledigt (beides heißt, dass die Version bereits durable ist), und sende dann den nächsten Batch.
Zurücklesen
GET /api/v1/memories/{externalId} liefert die Memory und ihre zuletzt angewandte Quittung – nützlich, um Konvergenz nach einer Migration zu verifizieren.