Anrufer- und Webhook-Verarbeitung verbessern
This commit is contained in:
1 parent
7b3c187985
commit
9e71fe3a11
18 files changed
+1283
-111
No files matched your search
@@ -32,6 +32,11 @@ Kartenadresse. Bestehende Jobs ohne Kartenadresse bleiben lesbar; zum Ergänzen
|
||||
die vollständigen Jobdaten mit `map_url` erneut senden. Eine Schema-Migration ist
|
||||
nicht erforderlich.
|
||||
|
||||
Der Telefonbuchimport über `POST /api/addresses` aktualisiert Name und Beschreibung,
|
||||
erhält aber vorhandene Rollen, Kundenkennungen, Job-Zuordnungen und Sprungadressen.
|
||||
Diese Felder werden nur durch vollständige Adressdaten über die Webhooks ersetzt;
|
||||
so können dort beispielsweise mit `job_ids: []` alte Job-Zuordnungen entfernt werden.
|
||||
|
||||
```
|
||||
SwyxWeb/
|
||||
├── backend/ Spring Boot 4.1 (Java 21, Maven Wrapper)
|
||||
@@ -339,14 +344,21 @@ Die Quittung nennt die vergebene Nummer und die Eingangszeit:
|
||||
{ "id": 1, "receivedAt": "2026-08-24T12:38:01.563742294Z" }
|
||||
```
|
||||
|
||||
**Angenommen wird beliebiges JSON** – Objekt wie Liste. Das aufrufende System muss sich an kein
|
||||
Schema halten; die Startseite zeigt die Nutzlast unverändert. Nur die Kopfzeile eines Eintrags
|
||||
Der generische Webhook nimmt **beliebiges JSON** an – Objekt wie Liste. Ausnahme:
|
||||
`"type":"job"` und `POST /api/webhook/jobs` verlangen ein einzelnes Job-Objekt mit
|
||||
positiver ganzzahliger `id` im Java-Long-Wertebereich und passenden Feldtypen.
|
||||
Ungültige Jobs ergeben **HTTP 400**, werden nicht archiviert und erscheinen nicht im
|
||||
Verlauf oder Ereignisstrom. Die Quittung gültiger Daten bestätigt die Annahme;
|
||||
die MongoDB-Speicherung läuft weiterhin asynchron.
|
||||
|
||||
Die Startseite zeigt angenommene Nutzlasten unverändert. Nur die Kopfzeile eines Eintrags
|
||||
fasst `name` und `number` zusammen, wenn es sie gibt, und zählt sonst Felder bzw. Einträge
|
||||
([summarize](frontend/src/webhook.ts)).
|
||||
|
||||
| Endpunkt | Zweck |
|
||||
|---|---|
|
||||
| `POST /api/webhook` | Nachricht abliefern. `415` bei falschem Content-Type, `400` bei kaputtem JSON, `413` über der Größengrenze, `401` bei falschem Token |
|
||||
| `POST /api/webhook/jobs` | Einen Job abliefern. Zusätzlich `400` bei fehlender/ungültiger `id` oder unpassenden Feldtypen; gilt auch für `"type":"job"` am generischen Webhook |
|
||||
| `GET /api/webhook/events` | Strom für die Startseite (Server-Sent Events) |
|
||||
| `GET /api/webhook/history` | Verlauf, damit ein später geöffneter Bereich die vorigen Nachrichten sieht |
|
||||
| `DELETE /api/webhook/history` | Verlauf leeren – das macht der Knopf „Leeren" |
|
||||
@@ -362,7 +374,9 @@ Zwei Vorkehrungen, damit dabei nichts verloren geht:
|
||||
|
||||
- Das Backend hält die letzten **50 Nachrichten** im Speicher ([WebhookService](backend/src/main/java/de/appcreation/swyxweb/webhook/WebhookService.java)).
|
||||
Beim Wiederverbinden schickt der Browser die `Last-Event-ID` mit, und alles Jüngere wird
|
||||
nachgeliefert. Über einen **Neustart hinaus wird nichts aufgehoben**.
|
||||
nachgeliefert. Nachlieferung und Anmeldung am laufenden Strom sind gegen gleichzeitige
|
||||
POSTs abgesichert; Ereignisse bleiben dabei in Id-Reihenfolge.
|
||||
Über einen **Neustart hinaus wird nichts aufgehoben**.
|
||||
- Alle 25 Sekunden geht ein Kommentar (`:ping`) durch die Leitung, damit ein Reverse Proxy die
|
||||
ruhende Verbindung nicht kappt.
|
||||
|
||||
@@ -570,7 +584,9 @@ docker compose up -d --build
|
||||
```
|
||||
|
||||
Die lokale `.env` enthält die interne Worker-Adresse, `WHISPER_THREADS`
|
||||
(Standard: 4), die LLM-Einstellungen, den SwyxWeb-Port und die SwyxTray-Adresse. Compose liest sie
|
||||
(Standard: 4), die LLM-Einstellungen, den SwyxWeb-Port und die SwyxTray-Adresse
|
||||
einschließlich `APP_WEBSOCKET_PATH` und `APP_WEBSOCKET_SECURE`. Auch `APP_WEBHOOK_TOKEN`
|
||||
und `SPRING_MONGODB_URI` werden an den Container weitergereicht. Compose liest sie
|
||||
automatisch; auch die beiden VS-Code-
|
||||
Backend-Startkonfigurationen laden diese Datei. `.env` ist aus Git und
|
||||
Docker-Build-Kontext ausgeschlossen; [.env.example](.env.example) enthält
|
||||
|
||||
Reference in new issue
Block a user