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}/orders

    Vollständige Bestellhistorie.

  • GET
    /api/customers?q=

    Kunden suchen (Name, E-Mail, Kundennummer, Telefon, Ort).

  • POST
    /api/customers

    Neuen 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/orders

    Bestellung 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}/cancel

    Bestellung stornieren (nur solange sie noch nicht versendet ist).

    { "reason"? }

Retouren

  • POST
    /api/orders/{orderId}/returns

    Retoure zu einer Bestellung anmelden; Rücksendelabel geht per E-Mail raus.

    { "quantity", "reason", "sku"? }
  • GET
    /api/orders/{orderId}/returns

    Retouren 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/tickets

    Ticket 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}/messages

    Nachricht oder interne Notiz anhängen; setzt geschlossene Tickets wieder auf offen.

    { "body", "authorName"?, "internal"?: true, "status"? }

Produkte, Filialen & Reservierungen

  • GET
    /api/products?q=laufschuhe

    Produktsuche (auch POST /api/products/search mit { "query" }) inkl. Verfügbarkeit je Filiale und online.

  • GET
    /api/products/{sku}

    Ein Produkt.

  • GET
    /api/stores

    Filialen mit Öffnungszeiten und Services; /api/stores/{storeId} für eine Filiale.

  • POST
    /api/reservations

    Click & 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/events

    Server-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/health

    Status von Anwendung und Datenbank.