Zum Inhalt springen
megapromotingLassen Sie uns sprechen

Expertise · Online-Shops

Ein Shop, in dem der Katalog in Echtzeit gelesen wird, nicht einmal kopiert und dann vergessen.

Wir bauen Shops und darüber die Schicht, die meist fehlt: Der Agent, der dem Kunden antwortet, liest Preis und Bestand direkt aus dem Shop, im Moment der Frage, und weigert sich, einen nicht veröffentlichten Preis zu erfinden.

Bereits gebautSe poate verifica din exterior chiar acum, fără să ne întrebi pe noi. Punctul nostru de catalog livrat unui distribuitor răspunde 200 și spune „154 rezultate”; interfața publică a magazinului lui, interogată direct, întoarce antetul `x-wp-total: 154`. Aceeași cifră, două surse independente, verificat pe 06.09.2026. A doua implementare e integrată în platforma de asistenți: serviciul `storeCatalog.service.js` plus trei unelte pe care agentul le poate chema. Rezerva care trebuie spusă: acest al doilea traseu stă pe o ramură de dezvoltare (`feat/store-catalog-global`, `481cfa0`) și nu e încă unificat în trunchi — deci e livrat pentru clienții pe care i-am conectat, nu pornit implicit pentru toți.

Die meisten „Katalogintegrationen“ sind in Wirklichkeit ein Export. Jemand lädt die Produkte einmal herunter, klebt sie in eine Datei, und von da an liest der Agent, der mit dem Kunden spricht, ein altes Foto des Shops. Es funktioniert tadellos bis zur ersten Preisänderung oder zum ersten ausverkauften Produkt — und dann liegt er überzeugend falsch, was schlimmer ist als Schweigen.

Wir lesen den Shop im Moment der Frage. Für WooCommerce-Shops gibt es eine öffentliche Schnittstelle — Store API — die Produkte, Preise und Verfügbarkeit ohne Schlüssel, ohne Konto, ohne installiertes Plugin zurückgibt. Die Adresse ist `/wp-json/wc/store/v1/products`, wir fragen sie mit 100 Produkten pro Seite und einer maximalen Wartezeit von 20 Sekunden an und erfahren aus dem Antwort-Header, wie viele Seiten es gibt, statt zu raten. Die erste Seite holen wir allein, den Rest parallel.

Der Teil, der eine korrekte Integration von einer trennt, die nur korrekt aussieht, ist die Übersetzung des Preises. Die Store API gibt nicht „129,90“ zurück; sie gibt eine Zeichenkette von Ziffern in kleinsten Einheiten und separat, wie viele Dezimalstellen die Währung hat, zurück. Wer aus Gewohnheit durch 100 teilt, liegt bei jeder Währung falsch, die nicht zwei Dezimalstellen hat. Noch wichtiger: Ein Preis von null bedeutet nicht kostenlos, sondern nicht veröffentlicht. Bei uns wird null zu „Preis auf Anfrage — wird von den Kollegen bestätigt“, und der Agent erhält die klare Anweisung, nichts zu erfinden. Das sieht man im öffentlichen Antwort des Katalog-Endpunkts, gerade jetzt.

Über den Katalog kommen die anderen Teile, jedes mit seinem tatsächlichen Zustand: Warenkorb und Senden der Bestellung an das Verwaltungssystem des Restaurants oder Geschäfts, Zahlung über die MAIB-Schnittstelle für Händler oder über Stripe, Wiederherstellung abgebrochener Warenkörbe, Verfolgung des Bestellstatus mit Synchronisierung alle 15 Minuten. Wo wir keine funktionale Integration haben — und es gibt solche Fälle — steht weiter unten genau, welche.

Was dazugehört

Die Arbeit, nach Bestandteilen

Katalog in Echtzeit gelesen, ohne Schlüssel und ohne Plugin

Für WooCommerce verwenden wir Store API, die öffentliche Shop-Schnittstelle: `/wp-json/wc/store/v1/products`, 100 Produkte pro Seite, maximale Wartezeit 20 Sekunden, eine eigene Client-ID im Header und ausschließlich die Annahme des Codes 200. Die Anzahl der Seiten lesen wir aus dem Header `x-wp-totalpages`, und die Gesamtzahl der Produkte aus `x-wp-total` — wir paginieren nicht, bis es auffällt. Die erste Seite wird allein geholt, der Rest parallel, mit einer Obergrenze von 30 Seiten. Im Shop wird nichts installiert und uns werden keine Händler-Keys gegeben.

Der Preis korrekt übersetzt, und null als nicht veröffentlicht behandelt

Die Store API gibt den Preis als Zeichenkette in Mindesteinheiten zurück, plus die Anzahl der Dezimalstellen der Währung. Wir teilen durch zehn hoch diese Zahl, nicht fest durch 100 — sonst ist jede Währung mit einer anderen Anzahl von Dezimalstellen falsch, und niemand merkt es. Null wird zu `null`, und in der Antwort erscheint „Preis auf Anfrage — wird von Kolleg:innen bestätigt“, zusammen mit der expliziten Anweisung an den Agenten, nichts zu erfinden und die Bestätigung einer Kollegin oder eines Kollegen anzufordern. Der Preis geht gleichzeitig in zwei Formen hinaus: als fertig anzeigbarer Text für die Oberfläche und als Zahl für die Logik im Hintergrund.

Drei Werkzeuge, die der Agent aufrufen kann

In der Assistentenplattform ist der Katalog als drei eingebaute Werkzeuge exponiert — Suche nach Wörtern, Treffer auf ein Gerät oder einen Anwendungsfall, und Abruf eines Produkts nach Kennung. Der Agent sieht sie unter den Namen `catalog_cauta`, `catalog_potrivire` und `catalog_produs`, jeweils mit seinen deklarierten Parametern. Wenn die Plattform des Shops nicht die erwartete ist oder die Adresse fehlt, verweigert das Werkzeug ausdrücklich, statt eine leere Liste zurückzugeben, die als „wir haben das Produkt nicht“ interpretiert würde.

Bindewörter verderben das Ergebnis nicht

Die wörtliche Suche nach „Wasserfilter“ passt auf alles, was „de“ enthält. Im gelieferten Katalog-Endpunkt und in der Suche des Sprach-Widgets entfernen wir die Stoppwörter — `si`, `sau`, `de`, `din`, `la`, `cu`, `pe`, `in`, `pentru` — und wenn nach dem Entfernen nichts Nützliches übrig bleibt, greifen wir auf Wörter mit mehr als zwei Buchstaben zurück. Die Teilübereinstimmung hat einen Schwellenwert: Ein Produkt gelangt nur dann in die Ergebnisse, wenn es mindestens die Hälfte der verbleibenden Wörter erreicht.

Wenn der Shop keine Oberfläche hat, lesen wir die Seite

Nicht jeder Shop hat eine Store API. Für den Rest haben wir einen Extraktor, der die Listen-Seiten öffnet und ihre Produktkarten liest, mit im Code festgeschriebenem Budget: maximal 20 Listen-Seiten, 200 Produkte, 24 Detailseiten, 50.000 Zeichen HTML pro Seite, 5 Sekunden pro Anfrage und eine Frist von 45 Sekunden für den gesamten Vorgang. Er liest zuerst die strukturierten Produktdaten von der Seite, dann die Karten, dann die Sharing-Metadaten — in dieser Reihenfolge, weil die erste Quelle die ist, die der Shop absichtlich geschrieben hat.

Frische mit geschriebenen Grenzen, nicht mit Hoffnung

Der Katalog wird 10 Minuten pro Shop im Speicher gehalten, und gleichzeitige Anfragen für denselben Shop werden zu einer einzigen zusammengeführt, damit zehn Kund:innen, die im selben Moment fragen, nicht zehn Downloads erzeugen. Auf dem öffentlichen Katalogpunkt trägt die Antwort auch Cache-Anweisung für das Verteilungsnetz: 5 Minuten frisch, weitere 10 Minuten alt serviert, während im Hintergrund aktualisiert wird. Die Anzahl der zurückgegebenen Ergebnisse ist auf 20 begrenzt, mit dem Standardwert 6.

Bestellung, Warenkorb und Anbindung an das Verwaltungssystem

Der Warenkorb, das Absenden der Bestellung und die Übergabe an das Verwaltungssystem des Kunden sind getrennte Funktionen, kein Formular. Es gibt auch die Wiederherstellung verlassener Warenkörbe, die Bestellung per Gespräch und die Verfolgung des Bestellstatus, mit zwei geplanten Aufgaben, die alle 15 Minuten laufen — eine synchronisiert das Ergebnis der Bestellungen, die andere ergänzt die Status aus dem Verwaltungssystem über ein Fenster von zwei Tagen zurück und einen Tag voraus.

Zahlungen: was funktioniert und was nicht

Funktional und im Code: die MAIB-Oberfläche für Händler — Token, dann Zahlungsanfrage, mit den aus der Datenbank gelesenen Zugangsdaten jedes Shops und der explizit aktivierten Funktion — und Stripe, mit in Mindesteinheiten umgerechneter Summe und verbuchter Zahlung im Register. Was NICHT funktional ist, damit es keine Überraschungen gibt: Paynet, Netopia und mobilPay haben keine Implementierung, und der Code verweigert ausdrücklich, wenn sie angefordert werden. Der Moldindconbank-Pfad ist ein Gerüst, das ohne Zugangsdaten einen Fehler zurückgibt. Wir nehmen sie im Projekt als Arbeit, nicht als vorhandene Integration.

Der Agent erfindet nicht, wenn das Netzwerk ausfällt

Wenn die Abfrage des Shops fehlschlägt, gibt das Werkzeug keine leere Liste zurück — es gibt eine Nachricht zurück, die dem Agenten sagt, keine Antwort über den Katalog zu formulieren. Der Unterschied ist wichtig: Eine leere Liste wird zu „wir haben nichts“, und falsch gesagt „wir haben nichts“ kostet einen Auftrag ebenso sicher wie ein falscher Preis.

Wie es aussieht

Der Weg, Schritt für Schritt.

01

Die Prüfung des Shops, vor jedem Versprechen

Wir fragen die öffentliche Oberfläche mit nur einer Anfrage ab, mit einer maximalen Wartezeit von 15 Sekunden, und lesen aus dem Header, wie viele Produkte sie hat. Aus dieser Antwort wissen wir, ob der Live-Pfad möglich ist, wie viele Produkte vorhanden sind und wie vollständig die Preisinformation ist. Wenn der Shop nicht antwortet, sagen wir das vor dem Angebot, nicht während der Implementierung.

02

Anbindung des Katalogs und erster Durchgang durch die Preise

Wir liefern die Verbindung sowie einen Durchgang durch die Produkte mit Nullpreis oder fehlendem Preis — es sind fast immer echte Produkte, keine Fehler, und die Art, wie der Agent sie behandelt, ist eine Entscheidung des Shops, nicht unsere. Wir liefern auch den exakten Text, mit dem der Agent sich weigert, einen nicht veröffentlichten Preis anzugeben.

03

Die Werkzeuge des Agenten und ihre Grenzen

Wir richten die Suche, die Zuordnung und das Abrufen eines Produkts ein, jeweils mit der gemeinsam festgelegten maximalen Anzahl an Ergebnissen. Hier werden auch die shop-eigenen Synonyme eingetragen — wie der Kunde ein Produkt nennt im Vergleich dazu, wie der Katalog es nennt. Ohne diesen Schritt ist die Suche technisch korrekt und praktisch nutzlos.

04

Die Bestellung, die Zahlung und die Verbindung mit der Verwaltung

Sie werden in dieser Reihenfolge erstellt, und jedes Teil wird erst nach Prüfung des tatsächlichen Zugriffs auf das System am anderen Ende eingebaut. Für Zahlungen wird nur von einem Anbieter ausgegangen, für den wir eine funktionierende Implementierung haben; der Rest wird als neue Arbeit mit dem zuvor genannten Risiko behandelt, nicht als Häkchen im Angebot.

05

Die Übergabe mit der Liste der fehlenden Punkte

Wir übergeben die Adressen, Konfigurationen, die im Code festgelegten Grenzen und die Liste dessen, was nicht abgedeckt ist. Zum Beispiel: Der gelieferte öffentliche Katalogendpunkt hat keine maximale Wartezeit für die Anfrage an den Shop — wenn der Shop sehr langsam antwortet, verlängert sich die Anfrage. Das ist ein echter Mangel, wir nehmen ihn in die Übergabeliste und in den Reparaturplan auf, nicht in eine interne Notiz.

Un centru. În jur, ce intră în el — pe trasee separate.CENTRUL SE SPRIJINĂ PE CE E ÎN JURUL LUI
Magazinul, agentul care răspunde, sistemul de gestiune și furnizorul de plată — patru sisteme separate, cu o singură sursă de adevăr pentru preț: magazinul, citit în momentul întrebării.

Die Daten

Was wir anfassen, wo die Daten liegen und wie lange sie bleiben

Die Fragen, die jede Person mit einem Datenschutzbeauftragten stellt — hier gestellt, bevor er sie stellt.

Katalogdaten
Name, Kurzbeschreibung, aktueller Preis und Listenpreis, Verfügbarkeit, Bild, Kategorie und Produktadresse — alles aus der öffentlichen Oberfläche des Shops gelesen, die es ohnehin jedem Besucher veröffentlicht. Wir kopieren nicht die Datenbank des Shops und fragen keine Händler-Schlüssel an. Sie bleiben beim Kunden; wir lesen sie auf Anfrage.
Wo sie gespeichert werden und wie lange
Der Katalog wird 10 Minuten pro Shop im Prozessspeicher gehalten und geht beim Neustart verloren — bei uns gibt es keine persistente Kopie davon. Am öffentlichen Katalogpunkt hält das Verteilungsnetz ihn weitere 5 Minuten frisch und 10 Minuten als alte Variante, während er aktualisiert wird. Ein eingefrorener Export, wenn er die einzige technische Option ist, wird ausdrücklich als Momentaufnahme mit Datum gekennzeichnet, nicht als lebende Quelle.
Die Gesprächs- und Bestelldaten
Was der Kunde fragt und was er bestellt, läuft über die Gesprächsplattform und, soweit erforderlich, an das Verwaltungssystem des Shops. Wer Zugriff hat, wie lange es aufbewahrt wird und was gelöscht wird, wird projektbezogen festgelegt, mit dem vor dem Start ausgearbeiteten Verzeichnis der Verarbeitungen, nicht nach dem ersten Vorfall.
Die Zahlungszugangsdaten
Die Händlerzugangsdaten liegen in der Datenbank der Plattform, pro Shop, und werden nur gelesen, wenn die Zahlungsfunktion für diesen Shop ausdrücklich aktiviert ist. Sie gelangen nicht auf die öffentliche Seite und nicht in die Unterhaltung. Die Konfiguration des Händlerkontos erfolgt durch den Kontoinhaber, nicht durch uns.
Was wir nicht berühren
Wir übernehmen keine Kartendaten. Wir verlangen keinen Administratorzugriff auf den Shop zum Lesen des Katalogs — die verwendete Oberfläche ist öffentlich. Wenn ein Projekt wirklich privilegierten Zugriff erfordert, wird er separat angefordert, mit schriftlich festgehaltenem Zweck, und nicht „für den Fall der Fälle“ aufbewahrt.

Ein Fall

Ein Katalog mit 154 Produkten, zum Zeitpunkt der Frage gelesen

Die Ausgangslage

Ein Kaffee- und Wassergroßhändler aus Chișinău, mit einem WooCommerce-Shop und Agenten, die Kunden per Text und Telefon antworten. Der Katalog ändert sich häufig; eine einmal kopierte Liste ist nach wenigen Tagen falsch, und ein am Telefon falsch genannter Preis lässt sich nicht zurücknehmen.

Was wir gebaut haben

Wir haben einen separaten Katalog-Endpunkt eingerichtet, der die öffentliche Shop-Oberfläche abfragt: 100 Produkte pro Seite, die Seitenzahl aus dem Header gelesen, die erste Seite einzeln und den Rest parallel geholt, Limit 30 Seiten. Der Preis wird aus kleineren Einheiten nach der vom Shop angegebenen Anzahl an Dezimalstellen umgerechnet; Null wird zu „Preis auf Anfrage — wird von Kollegen bestätigt“, mit einer schriftlichen Anweisung an den Agenten, nichts zu erfinden. Die Suche entfernt Funktionswörter und verlangt, dass ein Produkt mindestens die Hälfte der verbleibenden Wörter trifft, bevor es in den Ergebnissen erscheint. Die Antwort bleibt 10 Minuten im Speicher und 5 Minuten im Verteilnetzwerk, mit weiteren 10 Minuten als alte Version, während sie aktualisiert wird. Sprachagenten rufen ihn als einfachen Web-Endpunkt auf, nicht als spezielle Integration.

Was dabei herauskam

Geprüft am 06.09.2026, in zwei unabhängigen Anfragen: der Katalog-Endpunkt antwortet mit „154 Ergebnisse“ und listet das erste Produkt mit Preis und Verfügbarkeit sowie das zweite mit „Preis auf Anfrage — wird von Kollegen bestätigt“; direkt abgefragt, gibt die Shop-Oberfläche `x-wp-total: 154` zurück. Dieselbe Zahl aus zwei Quellen, die nichts voneinander wissen — das ist die Verifikation, nicht unsere Behauptung.

Was der Fall nicht sagt

Der gelieferte Katalog-Endpunkt hat keine maximale Wartezeit für die Anfrage an den Shop: wenn der Shop sehr langsam antwortet, wird die Anfrage verlängert, statt sauber abzubrechen. Das ist ein echter Mangel, beim erneuten Lesen des Codes festgestellt, und steht in der Reparaturliste — nicht in der Funktionsliste. Separat: Der oben beschriebene Funktionswörter-Filter ist im gelieferten Endpunkt und in der Suche des Sprach-Widgets aktiv; in der in die Plattform eingebetteten Variante ist er noch nicht portiert, daher liefert dort eine Suche mit vielen Funktionswörtern breitere Ergebnisse.

Fragen

Was uns die Leute fragen, bevor sie anrufen

Was bedeutet „lebender Katalog“ und wie prüfe ich, dass es keine Floskel ist?

Das bedeutet, dass der Agent den Shop zum Zeitpunkt der Frage liest. Geprüft wird das in zwei Anfragen, ohne uns: Unser Katalog-Endpunkt für einen Händler antwortet mit „154 Ergebnisse“, und die öffentliche Oberfläche seines Shops, direkt abgefragt, gibt im Header `x-wp-total: 154` zurück. Dieselbe Zahl, zwei unabhängige Quellen, am selben Datum. Ein einmal kopierter Katalog kann das nicht — er gerät bei der ersten Änderung aus dem Takt.

Muss ich Ihnen Schlüssel oder Zugriff auf den Shop geben?

Für das Lesen des Katalogs in WooCommerce, nein. Die Store API ist die öffentliche Schnittstelle des Shops: dieselben Daten, die jeder Besucher sieht, in einem für Programme lesbaren Format, ohne Händler-Schlüssel und ohne installiertes Plugin. Der Kommentar ist sogar in unserem Code geschrieben, damit er nicht verloren geht. Privilegierten Zugriff verlangen wir nur dort, wo die Funktion ihn tatsächlich braucht — zum Beispiel beim Senden von Bestellungen an das Verwaltungssystem — und dann mit schriftlich festgehaltenem Zweck.

Was passiert mit Produkten ohne Preis?

Sie werden als nicht veröffentlicht behandelt, nicht als kostenlos. In der Shop-Oberfläche kommt ein fehlender Preis als Null zurück, und eine naive Integration zeigt „0 MDL“ an. Bei uns wird Null zu „Preis auf Anfrage — wird von Kollegen bestätigt“, und der Agent erhält die ausdrückliche Anweisung, keine Zahl zu erfinden und die Bestätigung eines Menschen einzuholen. Das ist in der öffentlichen Antwort zu sehen: Das zweite Produkt in der Liste erscheint genau so.

Wie aktuell ist der Preis konkret?

Höchstens 10 Minuten alt auf Plattformebene, pro Shop, und gleichzeitige Anfragen für denselben Shop werden zu einem einzigen Abruf zusammengeführt. Auf dem öffentlichen Katalog-Endpunkt serviert das Verteilnetzwerk 5 Minuten lang die frische Version und weitere 10 Minuten die alte Version, während es im Hintergrund aktualisiert. Die Werte sind projektkonfigurierbar; sie sind als Variablen geschrieben, nicht versteckt.

Mein Shop ist nicht auf WooCommerce. Was machen Sie?

Es hängt davon ab, was er bereitstellt. Wenn er eine eigene Schnittstelle hat, lesen wir sie wie jede andere. Wenn er nichts hat, haben wir einen Extraktor, der die Listenseiten öffnet und die Produktkarten ausliest, mit einem im Code festgeschriebenen Budget: 20 Seiten, 200 Produkte, 5 Sekunden pro Anfrage, 45 Sekunden Zeitlimit. Er liest zuerst die strukturierten Daten auf der Seite, dann die Karten, dann die Sharing-Metadaten. Das ist eine ehrliche Ersatzlösung, keine gleichwertige: Ein Shop, der sein Theme ändert, kann den Extraktor brechen, eine Schnittstelle nicht.

Welche Zahlungen können Sie jetzt integrieren?

Funktional und im Code: die MAIB-Schnittstelle für Händler — Token holen, dann Zahlungsanfrage, mit den aus der Datenbank gelesenen Zugangsdaten jedes Shops und der ausdrücklich aktivierten Funktion — sowie Stripe, mit in kleinere Einheiten umgerechneter Summe und gespeicherter Zahlung in der Buchhaltung. Was nicht funktional ist, vor dem Vertrag gesagt: Paynet, Netopia und mobilPay haben keine Implementierung, und der Code lehnt sie ausdrücklich ab, wenn sie angefordert werden; der Moldindconbank-Pfad ist ein Gerüst, das ohne Zugangsdaten einen Fehler zurückgibt. Jede davon kann gebaut werden, geht aber als neue Arbeit mit eigenem Risiko ein.

Kann der Agent ein Produkt erfinden, das Sie nicht haben?

Vielleicht, wenn Sie es nicht daran hindern — und genau darum kümmern wir uns. Drei Hürden: Der unveröffentlichte Preis kommt mit der schriftlichen Anweisung, nichts zu erfinden; die falsche Plattform oder die fehlende Adresse lassen das Tool ausdrücklich ablehnen, statt eine leere Liste zurückzugeben; und ein Netzausfall gibt eine Meldung zurück, die dem Agenten sagt, keine Antwort über den Katalog zu formulieren. Der Unterschied zwischen „leere Liste“ und „ich konnte nicht lesen“ ist der Unterschied zwischen einer verlorenen Bestellung und einer um eine Phrase verschobenen.

Warum ist es wichtig, wer durch 100 teilt?

Weil die Schnittstelle nicht „129,90“ sendet. Sie sendet eine Ziffernfolge in kleineren Einheiten und separat, wie viele Dezimalstellen die Währung hat. Durch 100 zu teilen ist für Währungen mit zwei Dezimalstellen korrekt und stillschweigend falsch für die anderen — niemand bekommt eine Fehlermeldung, nur schlechte Zahlen. Wir teilen durch zehn hoch der vom Shop angegebenen Zahl. Es ist eine Zeile Code, und genau die Art von Zeile, an der man sieht, ob jemand die Dokumentation gelesen oder geraten hat.

Wofür übernehmen Sie keine Verantwortung?

Wir übernehmen keine Kartendaten und konfigurieren das Händlerkonto nicht anstelle des Inhabers. Wir garantieren nicht, dass ein Seitenextraktor einer Theme-Änderung des Shops standhält — deshalb bevorzugen wir die Schnittstelle, wenn es sie gibt. Wir versprechen keine Umsatzsteigerungen; was wir zeigen können, ist, dass die vom Agenten genannte Zahl mit der Zahl im Shop zum selben Datum übereinstimmt. Und wir stellen nichts als Integration dar, was im Code ein Gerüst ist: Die Liste oben sagt, was es ist.

Worauf die obigen Aussagen beruhen (18 Quellen)
  1. Punctul de catalog livrat răspunde 200 și spune „Din catalogul <magazin> (154 rezultate, primele 2)”, cu al doilea produs marcat „preț la cerere — se confirmă de colegi”https://coffywater-ai.vercel.app/api/catalog?limit=2&scurt=1 · 2026-09-06
  2. Interfața publică a aceluiași magazin întoarce `x-wp-total: 154` și `x-wp-totalpages: 154` — aceeași cifră ca punctul de catalog, din sursă independentăhttps://coffywater.md/wp-json/wc/store/v1/products?per_page=1 · 2026-09-06

16 davon sind Code und Dateien aus unseren Repositories. Wir veröffentlichen weder ihren Namen noch die Zeile: zusammen, auf einer einzigen Seite, würden sie zu genau beschreiben, wie Systeme gebaut sind, die nicht nur uns gehören. Wir gehen sie mit Ihnen durch, im Repository, auf Anfrage — die Überprüfung bleibt möglich, sie findet nur in einem Gespräch statt.

Was sollte bei Ihnen besser laufen?

Erzählen Sie uns von Ihrem Prozess. Gemeinsam legen wir fest, was sich zu bauen lohnt, was wir anbinden können und wie wir das Ergebnis prüfen.

Lassen Sie uns sprechen