Viele Anfragen zu einem Gebrauchtteil sind dieselben drei Fragen: Passt es an mein Fahrzeug, was kostet der Versand, in welchem Zustand ist es. Sie kommen abends und am Wochenende, und wer bis Montag wartet, kauft woanders. Ein Formular nimmt die Frage auf, beantwortet sie aber nicht.
Der Website-Kanal ist als Browser-Gateway gebaut, nicht als Hub-Aufruf mit versteckter Zugangskennung: Das Widget weist sich mit einem Kanalschlüssel aus, der sich jederzeit wechseln lässt. Ihr API-Schlüssel bleibt auf dem Server, wo er hingehört.
| Fläche | Rollen |
|---|---|
| Verkaufsagent | Teilehandel, Fahrzeughandel, Plattform und Marktplatz |
Was dieser Fall voraussetzt
- Ein eingerichtetes Profil. Der Agent antwortet nach seiner Anweisung; ohne Profil gibt es keinen Ton, keine Regeln und keine Befugnisse.
- Ein Website-Kanal mit erlaubten Ursprüngen.
allowedOriginslegt fest, von welchen Adressen das Widget sprechen darf — das ist der Schutz gegen Fremdnutzung des Kanalschlüssels. Beim Einrichten des Widgets und beim Beginn eines Gesprächs muss der Origin der Anfrage einer dieser Ursprünge sein, sonst antwortet das Gateway mitorigin_not_allowed. - Das Besuchertoken.
GET /web/channelgibt es aus; das Gateway erwartet es in der KopfzeileX-Agent-Visitorzurück. - Eine Stelle, an der Übergaben landen.
needsHumanohne Posteingang ist eine Warnung, die niemand liest.
Der Ablauf
Die Tabelle nennt je Stufe den zuständigen Aufruf und das, was danach vorliegt. Die Begründung, warum die Stufe nicht übersprungen werden kann, steht darunter.
| Stufe | Aufruf | Was danach vorliegt |
|---|---|---|
| Widget einrichten | GET /web/channel | title, greeting, accentColor, locale und maxMessageChars für die Oberfläche |
| Gespräch beginnen | POST /web/conversations | conversationId und gleich die erste Antwort, dazu needsHuman und owner |
| Weiter antworten | POST /web/conversations/{conversationId}/messages | Je Zug eine Antwort mit seq; dieselbe clientMessageId liefert die gespeicherte Antwort |
| Gespräch schliessen | POST /web/conversations/{conversationId}/close | Ein beendetes Gespräch, das im Posteingang nachvollziehbar bleibt |
Warum jede Stufe nötig ist
- Das Widget einrichten.
GET /web/channellieferttitle,greeting,accentColor,locale,pollIntervalSecondsundmaxMessageChars. Die Oberfläche wird also nicht im Skript hart verdrahtet, sondern aus dem Kanal geladen — eine Änderung am Begrüßungstext braucht keinen neuen Seitenaufbau. - Das Gespräch beginnen.
POST /web/conversationsnimmt die erste Nachricht an und führt gleich den ersten Zug aus. Zurück kommenconversationId,seqund die Antwort, dazuneedsHumanundowner. Ein zweiter Aufruf für die erste Antwort wäre eine vermeidbare Wartezeit. - Weiter antworten.
POST /web/conversations/{conversationId}/messagesführt jeden weiteren Zug aus. DieclientMessageIdist dabei wichtiger, als sie aussieht: Wird eine Nachricht mit derselbenclientMessageIderneut abgeschickt, liefert der Aufruf die gespeicherte Antwort, statt noch einmal zu laufen. - Das Gespräch schliessen.
POST /web/conversations/{conversationId}/closebeendet es. Geschlossen heißt nicht gelöscht — der Verlauf bleibt im Posteingang nachvollziehbar, und genau das braucht man bei einer Beschwerde.
curl -X POST \
-H 'X-Agent-Channel-Key: <KANALSCHLUESSEL>' \
-H 'X-Agent-Visitor: <BESUCHERTOKEN>' \
-H 'Content-Type: application/json' \
-d '{"message":"Passt der Scheinwerfer an einen Golf 7 Facelift?","clientMessageId":"m-1"}' \
'https://api.tapinomahub.com/agent/api/index.php/web/conversations'Was am Ende vorliegt
Am Ende beantwortet die Website die wiederkehrenden Fragen selbst und gibt die übrigen mit Verlauf an einen Kollegen weiter. Der Besucher wartet nicht bis Montag, und der Kollege beginnt nicht bei null.
Wo das in der Dokumentation steht
Die verbindlichen Feldlisten, Fehlercodes und Beispielantworten stehen im OpenAPI-Vertrag dieser Fläche unter docs.tapinomahub.com (tapinoma-agent). Alle Anwendungsfälle nach Fläche und Rolle geordnet: Übersicht der Anwendungsfälle.
Quellen und Rechtsgrundlagen
Häufige Fragen
Kommt mein API-Schlüssel in den Browser?
Nein. Das Widget weist sich mit einem Kanalschlüssel aus, der nur für diesen Kanal gilt und sich wechseln lässt. Der API-Schlüssel bleibt serverseitig.
Was passiert, wenn ein Fremder den Kanalschlüssel kopiert?
Dafür gibt es die erlaubten Ursprünge und die Möglichkeit, den Kanalschlüssel zu wechseln. Zusätzlich lassen sich Züge je Besucher und Gespräche je Stunde begrenzen.
Kann ich die Begrüßung ändern, ohne die Seite neu zu bauen?
Ja. Das Widget lädt Titel, Begrüßung und Akzentfarbe aus dem Kanal. Eine Änderung am Kanal wirkt beim nächsten Laden.
