Schnittstelle
Alles, was im Dashboard geht, geht auch per REST – dieselben Endpunkte nutzt der Telefonassistent.
Wer hat’s geändert?
Sende bei schreibenden Aufrufen den Header X-Actor: voice_ai (alternativ ?actor=voice_ai). Das Dashboard zeigt die Änderung dann als „Telefonassistent“ an und hebt den betroffenen Datensatz sofort hervor.
Beispiel
curl -X POST http://localhost:3000/api/tickets \
-H "Content-Type: application/json" \
-H "X-Actor: voice_ai" \
-d '{"customerNumber":"234242","subject":"Rückruf gewünscht",
"description":"Kunde möchte Bestellung ORD-1001 ändern.",
"priority":"high","orderId":"ORD-1001"}'Kunden
Kundenerkennung per Anrufernummer, Kundendaten und Bestellhistorie.
- GET
/api/customers/by-phone/{phone}Kunde anhand der Telefonnummer finden (tolerant gegenüber Formatierung), inkl. aktiver Bestellungen.
- GET
/api/customers/{customerNumber}Kundendaten (6-stellige Kundennummer) inkl. aktiver Bestellungen.
- GET
/api/customers/{customerNumber}/ordersVollständige Bestellhistorie.
- GET
/api/customers?q=Kunden suchen (Name, E-Mail, Kundennummer, Telefon, Ort).
- POST
/api/customersNeuen Kunden anlegen.
{ "firstName", "lastName", "email", "phone"?, "street"?, "zip"?, "city"?, "country"?, "notes"? } - PATCH
/api/customers/{customerNumber}Kundendaten ändern (z. B. neue Adresse oder Telefonnummer).
{ "phone"?, "email"?, "street"?, "zip"?, "city"?, "notes"?, … }
Bestellungen
- GET
/api/orders?status=&customerNumber=&q=Bestellungen auflisten und filtern.
- GET
/api/orders/{orderId}Bestelldetails inkl. Positionen, Sendungsverlauf und Retouren.
- POST
/api/ordersBestellung anlegen – als Bestandskunde (customerNumber) oder Gast.
{ "customerNumber"?, "customerName"?, "phone"?, "items": "RS-RUN:1:43,FB-CLASSIC:2" | [{ "sku", "quantity", "size"? }], "deliveryType": "shipping" | "pickup", "storeId"? (pickup), "address"? (shipping) } - PATCH
/api/orders/{orderId}Bestellung ändern: Menge, Adresse, Versandstatus, Sendungsnummer, Liefertermin.
{ "amount"? | "items"?: [{ "sku", "quantity" }], "address"?, "shippingStatus"?, "trackingNumber"?, "carrier"?, "estimatedDelivery"?, "status"?, "note"? } - POST
/api/orders/{orderId}/cancelBestellung stornieren (nur solange sie noch nicht versendet ist).
{ "reason"? }
Retouren
- POST
/api/orders/{orderId}/returnsRetoure zu einer Bestellung anmelden; Rücksendelabel geht per E-Mail raus.
{ "quantity", "reason", "sku"? } - GET
/api/orders/{orderId}/returnsRetouren einer Bestellung.
- GET
/api/returns?status=&q=Alle Retouren.
- GET
/api/returns/{returnId}Retourendetails und Status.
- PATCH
/api/returns/{returnId}Status setzen.
{ "status": "registered" | "label_sent" | "received" | "refunded" | "rejected" }
Support-Tickets
- GET
/api/tickets?status=&priority=&customerNumber=&orderId=&open=true&q=Tickets auflisten und filtern.
- GET
/api/tickets/{ticketId}Ticket inkl. Nachrichtenverlauf.
- POST
/api/ticketsTicket eröffnen, z. B. für einen Rückrufwunsch oder ein Anliegen, das der Assistent nicht selbst lösen kann.
{ "customerNumber"?, "customerName"?, "phone"?, "email"?, "subject", "description", "category"?: "order"|"delivery"|"return"|"product"|"billing"|"other", "priority"?: "low"|"normal"|"high"|"urgent", "orderId"? } - PATCH
/api/tickets/{ticketId}Status, Priorität, Kategorie, Zuständigkeit ändern.
{ "status"?, "priority"?, "category"?, "assignee"?, "subject"?, "orderId"? } - POST
/api/tickets/{ticketId}/messagesNachricht oder interne Notiz anhängen; setzt geschlossene Tickets wieder auf offen.
{ "body", "authorName"?, "internal"?: true, "status"? }
Produkte, Filialen & Reservierungen
- GET
/api/products?q=laufschuheProduktsuche (auch POST /api/products/search mit { "query" }) inkl. Verfügbarkeit je Filiale und online.
- GET
/api/products/{sku}Ein Produkt.
- GET
/api/storesFilialen mit Öffnungszeiten und Services; /api/stores/{storeId} für eine Filiale.
- POST
/api/reservationsClick & Collect: Artikel in einer Filiale reservieren (reduziert den Filialbestand).
{ "sku", "storeId", "quantity"?, "customerName"? | "customerNumber"?, "phone"?, "size"? } - GET
/api/reservations/{reservationId}Reservierung abfragen.
- PATCH
/api/reservations/{reservationId}Status setzen.
{ "status": "picked_up" | "cancelled" | "expired" }
Live & Aktivität
- GET
/api/eventsServer-Sent-Events-Stream: jede Änderung als Ereignis, so wie das Dashboard sie empfängt.
- GET
/api/activity?limit=&entityType=&entityId=&sinceId=Aktivitätsprotokoll (persistiert).
- GET
/api/healthStatus von Anwendung und Datenbank.