Dokumentationen / API
POST /api/flows/felanmalan
APIStartsideportalenSamtalsflödets enda serverända: äger prompten, validerar turen och fattar beslutet om ärendet får skapas.
källa: apps/portal/src/app/api/flows/felanmalan/route.tsuppdaterad: 2026-08-30
Ansvar
- Hämta identiteten ur sessionen – aldrig ur klientens payload.
- Hålla takgränsen: 40 anrop per användare och femminutersfönster.
- Validera inkommande med zod och sanera fältvärden innan de kan bli ett ärende.
- Välja regelmotor eller modell utifrån AI_PROVIDER, med samma kontrakt åt båda hållen.
- Avgöra själv om allt obligatoriskt finns. Att modellen sätter create räcker aldrig.
Filer
| Sökväg | Roll |
|---|---|
| app/api/flows/felanmalan/route.ts | POST-handlern: takgräns, validering, förankring, turkörning, beslut. |
| ai/faltsignatur.ts | HMAC över fältvärdena, så att klientens förankring bevisligen är serverns egen (ADR-013). |
| ai/faltsignatur.test.ts | Tester på signaturen, inklusive att ett tillagt fält avvisas. |
Kontrakt
Ordningen är inte utbytbar
const user = await getCurrentUser(); // identitet från servern
if (!inomTakgrans(user.userId)) return 429; // takgräns före arbete
const rad = Body.safeParse(await request.json()); // zod på inkommande
const varden = sanera(tur.varden); // styrtecken bort, 500 tecken
farSkapas(flow, tur.create, varden, antalSvar); // serverns beslut- Meddelandehistoriken är begränsad till 60 meddelanden och 2000 tecken per meddelande.
- Turkontraktet garanteras av structured outputs, inte av en instruktion i prompten.
- Ett omtag vid ogiltigt svar, inte en loop – latensen hålls nere och kostnaden förutsägbar.
- Klienten skickar tillbaka fälten så att assistenten kan återge dem ordagrant, men de når prompten bara om serverns egen signatur stämmer (ADR-013). Utan den kontrollen vore fältvärden en väg att mata in uppgifter förbi samtalet.
- Förankringen påverkar aldrig beslutet: allaObligatoriskaIfyllda och farSkapas läser modellens svar, inte klientens.
Beroenden och beslut
Kvarstår
- Takgränsen ligger i minnet och överlever inte omstart eller flera instanser. Flyttar till Redis i fas 4.
- Ingen ärendeadapter: beslutet att skapa fattas, men ingenting skapas (M3).
- Signaturnyckeln lever i processen. Vid omstart eller flera instanser faller förankringen och fälten kan formuleras om igen – M3:s sessionsdata gör den överflödig.