Online-Bestellungen müssen ins ERP für die Rechnungsstellung und ins Lager für die Auslieferung. An einem normalen Tag ist das kein Problem. An einem Kampagnentag sind es tausende Bestellungen pro Minute – und jede kann scheitern, weil das ERP langsam ist, die Lager-API down ist oder die Verbindung abreißt.
Eine Bestellung zu verlieren heißt: Geld und Vertrauen verlieren. Dieselbe Bestellung zweimal zu verarbeiten ist genauso schlimm. Und sobald das Volumen anzieht, beginnt die simple „Senden und Hoffen“-Integration, die letztes Jahr noch lief, lautlos Dinge zu verlieren.
dataflows behandelt jede Bestellung als durablen Workflow. Sie wird zuerst in deiner eigenen Datenbank gespeichert, geht also nie verloren. Dann wird sie ans ERP und ans Lager geschickt – mit Wiederholungen, falls eines der Systeme beschäftigt ist.
Jede Bestellung wird genau einmal verarbeitet, auch wenn der Shop den Webhook zweimal sendet. Ist das ERP down, wartet der Workflow und versucht es erneut, statt einfach zu scheitern. Ist etwas dauerhaft kaputt, landet es im Dashboard – das Team kann es beheben, ohne die Bestellung zu verlieren.
// Bestell-Sync-Workflow
export const orderSync = defineWorkflow({
id: 'order-sync',
trigger: shop.onOrderCreated(),
async run({ event, step }) {
const order = event.payload
const isNew = await step.run('persist', () =>
db.orders.insertIfMissing(order)
)
if (!isNew) return { status: 'skipped' }
await step.run('sync-erp', {
retries: 5,
backoff: 'exponential'
}, () =>
erp.createSalesOrder(order)
)
await step.run('sync-warehouse', () =>
warehouse.reserveStock(order)
)
await step.run('mark-synced', () =>
db.orders.update(order.id, { status: 'synced' })
)
return { status: 'synced' }
}
})