Zum Inhalt springen
megapromotingLassen Sie uns sprechen

Lösungen · Transport & Logistik

Wenn der Kunde fragt, wo das Paket ist, rät der Agent nicht: Er ruft den Kurier an, fragt ihn und kehrt mit der Antwort zurück.

Sprachgestützte Disposition, als Mechanismus gebaut, nicht als Versprechen: eine Tabelle mit expliziten Zuständen, drei Versuche im Abstand von zwei Minuten, das Anrufergebnis strukturiert geschrieben und ein Filter, der die Nummer des Fahrers aus allem entfernt, was das Modell erreicht, damit sie dem Kunden nicht angesagt werden kann.

Bereits gebautMecanismul de dispecerizare e scris și migrat în platforma noastră vocală: tabela `courier_calls` cu șapte stări posibile, trei încercări implicite, pauză de 120.000 ms între ele și rezultatul apelului păstrat structurat, plus cinci funcții de server care o folosesc — inițierea apelului către curier, verificarea rezultatului, mătura pentru apelurile rămase agățate, identificarea celui care sună înapoi și webhookul de după apel. A doua implementare e filtrul de ieșire scris pentru un client din transport, care elimină recursiv câmpurile de contact ale șoferului din rezultatul uneltei, păstrând numerele dispeceratului. Rezerva, spusă înainte să întrebi: partea de telefon trece printr-o gazdă SIP, iar gazda prin care merg liniile noastre de test nu răspunde la data scrierii — nu-ți dăm un număr de demonstrație pe care nu l-am putea ridica în fața ta.

In einem Transport- oder Lieferunternehmen sind die meisten eingehenden Anrufe dieselbe Frage, von verschiedenen Menschen gestellt: Wo ist die Ware, wann kommt sie an, warum ist sie nicht angekommen. Die Antwort steht nicht in einem Dokument und nicht in einem System — sie steckt im Kopf des Fahrers, der fährt. Der Disponent stellt die Verbindung her: Er nimmt den Anruf des Kunden entgegen, ruft den Fahrer an, kommt zum Kunden zurück. Diese Arbeit beschäftigt einen ganzen Menschen und wird hundertmal am Tag erledigt, mit denselben drei Sätzen.

Wir haben genau diese Kette gebaut, als Mechanismus mit Zuständen, nicht als Marketingfunktion. Ein Agent spricht mit dem Kunden. Wenn er eine Antwort braucht, die er nicht hat, ruft er eine Funktion auf, die einen zweiten Anruf startet — an den Kurier — verknüpft mit der Konversation, aus der er hervorgegangen ist. Dieser Anruf hat seine eigene Zeile in einer Tabelle, mit Status, der durch `calling`, `in_progress`, `retrying`, `completed`, `failed`, `no_answer`, `timeout` läuft, mit der Nummer des Versuchs, mit maximal drei Versuchen und einer Pause von zwei Minuten dazwischen. Das Ergebnis wird strukturiert geschrieben: die Zusammenfassung dessen, was der Kurier gesagt hat, die voraussichtliche Zeit, die Position.

Der leicht zu übersehende Teil, den wir als Anforderung und nicht als Vorsichtsmaßnahme behandeln: Die Telefonnummer des Fahrers darf den Kunden nicht erreichen. Das ist keine Anweisung, die im Prompt des Agenten steht, denn eine Anweisung in einem Prompt kann umgangen werden. Es ist ein Filter, der das Ergebnis des Werkzeugs rekursiv durchläuft und die Kontaktdaten des Fahrers entfernt, bevor dieses Ergebnis das Modell erreicht — wobei die Nummern der Disposition erhalten bleiben. Was entfernt wurde, kann nicht angesagt werden, unabhängig davon, wie der Agent gefragt wird.

Und die wichtigste Grenze ist eine der Infrastruktur, nicht der Intelligenz: Ein Sprachagent am Telefon hängt von einem SIP-Host zwischen Ihrem Betreiber und der Plattform ab. Wenn dieser Host ausfällt, gehen die Anrufe nicht durch, und die Signatur des Fehlers ist erkennbar — abgelaufene Anfrage, leere Anruf-ID, Dauer null. Der Host, über den unsere Testleitungen laufen, antwortet zum Zeitpunkt des Schreibens dieser Seite nicht. Im Web ist der Sprachweg heute überprüfbar; am Telefon ist der erste Schritt jeder Arbeit, festzustellen, auf welchem Host Ihre Nummern eingehen.

Was dazugehört

Was sich konkret in Transport & Logistik ändert

Der Agent, der mit dem Kunden spricht, kann einen zweiten Anruf starten

Wenn die Antwort nicht in den Informationen enthalten ist, die der Agent hat, ruft der Agent eine Serverfunktion auf, die den Kurier anruft. Der Anruf beim Kurier behält die Verbindung mit der Konversation, aus der er ausgegangen ist, über einen Bezeichner der übergeordneten Konversation — also ist jederzeit bekannt, für wen angerufen wurde und warum. Der Kontext der Bestellung wird als Struktur aus Ihrem Bestellsystem übermittelt, nicht diktiert.

Der Anruf beim Kurier hat Zustände, nicht nur „angerufen worden“

Sieben Zustände, als Einschränkung in der Datenbank geschrieben: `calling`, `in_progress`, `retrying`, `completed`, `failed`, `no_answer`, `timeout`. Plus die Nummer des aktuellen Versuchs. Der Unterschied zwischen „nicht geantwortet“ und „das System ist ausgefallen“ ist in den Daten sichtbar, nicht aus Protokollen erraten — und das zählt, wenn morgen jemand fragt, warum der Kunde keine Antwort erhalten hat.

Die Wiederholungsversuche sind konfiguriert, nicht improvisiert

Standardmäßig: drei Versuche, mit 120.000 Millisekunden — zwei Minuten — dazwischen, beide als Standardwerte in der Tabelle und in der Prozesskonfiguration eingetragen. Ein Fahrer, der auf einer Strecke ohne Signal fährt, antwortet nicht beim ersten Mal. Ein System, das nur einmal anruft und dann Fehler meldet, ist genau in dem Fall nutzlos, für den es gebaut wurde.

Das Ergebnis des Anrufs wird strukturiert zurückgegeben, nicht als Geschichte

Was der Kurier gesagt hat, wird als Zusammenfassung, geschätzte Zeit und Position in einem strukturierten Feld gespeichert, das mit der Zeile des Anrufs verknüpft ist. Von dort aus kann es weitergehen: zum Agenten, der mit dem Kunden spricht, zur Disposition, zu Ihrem System. Ein Webhook nach dem Anruf und eine Sweep-Funktion für hängengebliebene Anrufe vervollständigen die Kette, damit ein verpasster Anruf nicht für immer im Zustand `calling` bleibt.

Die Nummer des Fahrers kann nicht diktiert werden, weil sie das Modell nicht erreicht

Der Ausgabefilter durchläuft rekursiv das Ergebnis des Werkzeugs und entfernt die Kontaktfelder des Fahrers, wobei die Nummern der Disposition erhalten bleiben. Es ist im Code geschrieben, punktuell auf die Integration angewendet, bei der das Problem auftritt. Der Grund ist einfach: Die Oberfläche des Anbieters gab die Nummern der Fahrer in der Antwort zurück, und die Firmenpolitik verbot dem Agenten, sie den Kunden mitzuteilen. Eine Anweisung im Prompt hätte man mit einer gut formulierten Frage umgehen können; ein entferntes Feld kann nicht umgangen werden.

Wer zurückruft, wird an der Nummer erkannt

Der Kurier, der mit einem Rückruf zurückkommt, wird von einer dedizierten Funktion identifiziert, also gelangt er nicht in den allgemeinen Kundenfluss und hört nicht zuerst das Menü. Es scheint ein Detail zu sein; es ist der Unterschied zwischen einem System, das die Fahrer nutzen, und einem, das sie umgehen, indem sie direkt die Disposition anrufen, was die gesamte Arbeit zunichtemacht.

Die Übergabe an die Disposition, griffbereit für den Sprecher

Blindtransfer mit `##` und assistierter Transfer mit `*2`, mit Ankunftskontext im Anrufplan, der interne vierstellige Durchwahlen von externen Nummern unterscheidet. Wenn der Kunde hartnäckig einen Menschen verlangt — und im Transport verlangt er das, weil seine Ware verspätet ist —, darf der Transfer nicht über ein Menü laufen.

Der Agent kann unterbrochen werden, und das wird mit Zahlen geregelt

Auf dem OpenAI-Realtime-Pfad: semantische Spracherkennung mit Schwellenwert 0,5, 300 ms Puffer, 500 ms Stille, Unterbrechung standardmäßig erlaubt. Auf dem ElevenLabs-Pfad wird das Unterbrechungsereignis an die Zentrale gesendet, damit sie die Wiedergabe stoppt. `turn_timeout` wird pro Agent festgelegt. In einem Transportanruf, in dem der Gesprächspartner oft in einer lauten Kabine sitzt, machen diese Schwellenwerte die Hälfte der wahrgenommenen Qualität aus.

Was ein Sprachagent im Transport nicht tut

Er entscheidet nicht über die Route und optimiert Lieferungen nicht neu. Er nennt keinen Tarif, wenn er nicht mit der Quelle verbunden ist, die ihn berechnet. Er weiß nicht, wo die Ware ist, wenn es ihm niemand gesagt hat — weder der Kurier noch Ihr System. Und er ersetzt nicht die Disposition: Er übernimmt die wiederkehrenden Anrufe und lässt ihr die Ausnahmen, die genau der Teil sind, für den sie bezahlt wird.

Traseul

Wie eine Anfrage durch das System läuft.

01

Zuerst legen wir fest, auf welchem SIP-Host Ihre Nummern eingehen

Die erste Phase ist nicht das Agentenszenario, sondern die Telefonie: über welchen Trunk die Nummer hereinkommt, wer sie kontrolliert, was passiert, wenn der Host nicht antwortet. Wir liefern eine schriftliche Prüfung des Pfads und, wenn der Pfad nicht sicher ist, sagen wir es, bevor wir etwas darauf aufbauen. Ein hervorragender Agent auf einem Host, der ausfällt, ist ein Agent, der nicht antwortet.

02

Wir schreiben das Dispositionsszenario, mit seinen Ausnahmen

Was der Agent den Kurier fragt, in welcher Reihenfolge, was er tut, wenn der Kurier beim dritten Versuch nicht antwortet, was passiert, wenn die Antwort unklar ist, wann er an den menschlichen Disponenten weiterleitet. Wir liefern das schriftliche Szenario und die Liste der Zustände, in die ein Anruf geraten kann — einschließlich der hässlichen.

03

Wir verbinden die Bestellquelle und setzen die Filter am Ausgang

Der Kontext der Bestellung kommt aus Ihrem System, und bevor das Ergebnis eines Werkzeugs das Modell erreicht, gehen wir die Liste der Felder durch, die nicht herausdürfen. Wir liefern die Integration, die schriftliche Liste der gefilterten Felder und den Nachweis, dass der Filter auf das Ergebnis angewendet wird, nicht auf die Anweisungen.

04

Wir laufen mit einem kleinen Volumen, mit von einem Menschen gelesenen Transkripten

Wir starten auf einem Teil der Anrufe, mit weit konfigurierter Weiterleitung an den Disponenten, und lesen die Transkripte. Von dort aus werden die Abbruchschwellen, `turn_timeout`, die Formulierung der Fragen und die Schwelle, ab der der Agent aufgibt, angepasst. Wir liefern den Bericht dieser Anrufe, mit den Anpassungsentscheidungen, nicht nur den gestarteten Agenten.

1Clientul întreabă2agentul cheamăfuncția de apel3apel către curier, custare proprie4până la treiîncercări, la douăminute5rezultat structurat(rezumat, timpestimat, poziție)6răspuns la client, cunumărul șoferuluifiltrat din drum
Traseul, în 6 pași

Die Daten

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

Die Regeln unterscheiden sich von einer Branche zur anderen. Dies sind die, die in Transport & Logistik gelten.

Die Nummer des Fahrers ist personenbezogene Daten eines Menschen, kein technisches Feld
Ein Kurier oder ein Subunternehmer-Fahrer ist eine natürliche Person. Seine Nummer, seine Position und seine Sprachaufzeichnung sind seine Daten. Deshalb ist der Ausgabefilter keine Sicherheitslaune, sondern an der Quelle angewandte Minimierung: Das Feld erreicht das Modell nicht, also kann es weder in die Konversation noch ins Transkript gelangen.
Was aus einem Anruf aufbewahrt wird
Die Nummer des Anrufers und die angerufene Nummer, der Zeitpunkt, die Dauer, das Ergebnis, die Audioaufnahme, das Transkript und die Nachanalyse. Für nicht angenommene Anrufe gibt es Nummer, Zeitpunkt und den Grund für das Ausbleiben der Antwort — Audio gibt es nicht, weil es nicht entstanden ist. Alles ist dem Arbeitsbereich Ihres Unternehmens zugeordnet; es gibt kein gemeinsames Depot über alle Kunden hinweg.
Die Ankündigung am Anfang des Anrufs ist Ihre Entscheidung, keine Einstellung
Dass der Gesprächspartner mit einem automatischen System spricht, dass der Anruf aufgezeichnet wird und auf welcher Grundlage — das wird gemeinsam mit Ihnen festgelegt und geht ins Szenario ein, in beide Richtungen: sowohl zum Kunden als auch zum Kurier. Ein von einem Agenten angerufener Kurier muss genauso wissen, womit er spricht wie der Kunde.
Löschung auf Anfrage gibt es; automatische Löschung nach Frist noch nicht
Wir sagen das so, wie es ist, weil es der Unterschied zwischen einem Versprechen und einer Funktion ist. Die Löschung auf Anfrage ist implementiert: Eine dedizierte Funktion löscht die Objekte aus dem Dateispeicher, ruft die Löschprozedur in der Datenbank auf und macht die Sitzungen ungültig. Die pro Arbeitsbereich konfigurierbare Aufbewahrung ist nicht implementiert — sie erscheint in einem Design-Dokument, in keiner Migration. Bis es soweit ist, erfolgt die Löschung nach Frist per Prozedur.
Wo die Daten liegen
PostgreSQL über Supabase auf eigener Infrastruktur, mit versionierten Migrationen, von denen ein Teil die zeilenweise Isolierung aktiviert. Die Dateien — Aufzeichnungen, Wissensdokumente, Stimmproben — liegen in separaten Speichern, wobei der Pfad mit der Kennung des Arbeitsbereichs beginnt.

Ein Fall

Ein Anruf mit Zustand, nicht nur mit einem Ergebnis

Die Ausgangslage

In einem Lieferfluss hat die Frage „wo ist meine Bestellung“ in keinem System eine Antwort: Die Antwort liegt beim Kurier. Die einfache Variante — der Agent schreibt dem Kurier eine Nachricht und hofft — scheitert beim ersten Kurier, der fährt und nicht auf das Telefon schaut.

Was wir gebaut haben

Wir haben die Disposition als Tabelle aufgebaut, nicht als Funktion. Jeder Anruf an den Kurier hat eine Zeile mit sieben möglichen Status, der Nummer des Versuchs, maximal drei Versuchen, einer Pause von zwei Minuten dazwischen und dem strukturiert gespeicherten Ergebnis — Zusammenfassung, geschätzte Zeit, Position. Die Zeile behält die Verbindung mit der Kundengesprächs, aus dem sie hervorgegangen ist. Um die Tabelle herum: die Funktion, die den Anruf startet, die, die das Ergebnis prüft, der Besen für die hängen gebliebenen Anrufe, die Identifizierung des zurückrufenden Kuriers und der Webhook nach dem Anruf.

Was dabei herauskam

Es kann jederzeit und aus Daten auf die Fragen geantwortet werden, die eine Disposition täglich erhält: wurde angerufen, wie oft, was wurde geantwortet, warum wurde nicht angerufen. Ein verpasster Anruf bleibt nicht mehr in einem Zwischenstatus blockiert, weil es jemanden gibt, der ihn wegfegt.

Was der Fall nicht sagt

Der Mechanismus ist geschrieben und in die Plattform migriert; der Telefonteil hängt von einem SIP-Host ab, und der, über den unsere Testleitungen laufen, antwortet zum Zeitpunkt des Schreibens nicht. Wir stellen die Disposition nicht als etwas dar, das Sie heute durch einen Anruf bei unserer Nummer ausprobieren können.

Fragen

Was jemand aus Transport & Logistik fragt

Ruft der Agent den Kurier selbst an oder schickt er ihm nur eine Nachricht?

Er ruft an. Es gibt eine Serverfunktion, die den Anruf an den Kurier startet, verknüpft mit der Unterhaltung, aus der er hervorgegangen ist, wobei der Bestellkontext als Struktur übergeben wird. Der Anruf hat seine eigene Zeile in einer Tabelle, mit Status, Versuchsnummer und Ergebnis — also kann man jederzeit die Frage beantworten: „wurde angerufen, und was hat er gesagt“.

Was passiert, wenn der Fahrer nicht antwortet?

Es wird erneut versucht. Standardmäßig dreimal, im Abstand von zwei Minuten, Werte, die in der Tabelle und in der Prozesskonfiguration festgelegt sind. Wenn er auch beim dritten Mal nicht antwortet, bleibt der Anruf im Status `no_answer` — ein vom `failed` unterschiedlicher Status, der bedeutet, dass bei uns etwas schiefgelaufen ist. Diese Unterscheidung ist der Grund, warum sich eine Tabelle lohnt, nicht ein Protokoll.

Kann der Agent dem Kunden die Nummer des Fahrers geben?

Nein, und nicht, weil wir ihm gesagt haben, es nicht zu tun. Die Kontaktdaten des Fahrers werden rekursiv aus dem Ergebnis des Werkzeugs entfernt, bevor dieses Ergebnis das Modell erreicht. Die Nummern der Disposition bleiben. Was das Modell nicht erreicht, kann nicht diktiert werden, egal wie geschickt die Frage formuliert ist.

Kann er sagen, wo sich das Paket gerade befindet?

Er kann sagen, was der Kurier beim letzten Anruf gesagt hat, mit der Uhrzeit dieses Anrufs, oder was er aus Ihrem System liest, wenn es daran angeschlossen ist. Was er nicht tut — und das ist eine Entscheidung, keine Einschränkung — ist, selbst zu schätzen. Eine vom Agenten erfundene Schätzung wird zu einem Versprechen, das der Fahrer an der Tür trägt.

Kann ich jetzt eine Demo-Nummer anrufen?

Nicht heute. Der Telefonteil läuft über einen SIP-Host, und der Host, über den unsere Testleitungen laufen, antwortet zum Zeitpunkt des Schreibens dieser Seite nicht. Wir stellen keine Nummer auf die Website, die wir Ihnen nicht live vorführen könnten. Der Sprachpfad im Web ist eine andere Geschichte: Dort kann man es sofort prüfen.

Spricht er Russisch mit dem Kunden und Rumänisch mit der Disposition?

Die Agentenkonfiguration unterstützt 32 Sprachen, und Rumänisch ist die Standardsprache eines neuen Agenten. Die Sprache wird pro Agent festgelegt, also können der Agent, der mit dem Kunden spricht, und der, der den Kurier anruft, unterschiedlich konfiguriert werden. Wichtig ist: Für die Sprachsynthese in anderen Sprachen als Englisch ist das Standardmodell das schnelle, und die qualitativ bessere Variante ist sichtbar langsamer — der Kompromiss wird bewusst gewählt.

Was passiert, wenn der Kunde ihn unterbricht?

Er stoppt. Die semantische Spracherkennung hat einen Schwellenwert von 0,5, einen Puffer von 300 ms und 500 ms Stille, und die Unterbrechung ist standardmäßig erlaubt; auf dem anderen Pfad wird das Unterbrechungsereignis an die Zentrale gesendet, damit sie die Wiedergabe stoppt. Wenn ein Agent nicht unterbrochen werden kann, ist das kein Tonproblem, sondern eine Konfigurationsfrage — und von zu langen Antworten.

Wie lange werden die Aufzeichnungen der Gespräche mit den Fahrern aufbewahrt?

So lange, wie Sie es festlegen, denn Sie sind der Datenverantwortliche. Was Sie über den heutigen Stand der Plattform wissen müssen: Löschung auf Anfrage ist als Funktion implementiert, und die automatische Löschung nach Frist, pro Arbeitsbereich konfigurierbar, ist es nicht — sie erfolgt per Verfahren. Wir ziehen es vor, dass Sie das von uns erfahren, nicht aus einem Audit.

Ersetzt es den Disponenten?

Nein. Es nimmt ihm den repetitiven Teil ab — dieselbe Frage, derselbe Anruf, dieselbe Antwort — und lässt ihm die Ausnahmen. Die Weiterleitung an ihn bleibt bei einem Code auf der Tastatur, und im Transport sind Ausnahmen häufig: abgelehnte Ware, falsche Adresse, Kunde, der nicht antwortet. Dort braucht es einen Menschen, und es ist besser, wenn es ein Mensch ist, der vorher nicht schon hundertmal auf „Wo ist das Paket?” geantwortet hat.

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