# Asistent

16 rute, cu exemplu de cerere pentru fiecare.

Adresa de bază: `https://app.ilustromania.com/nucleu`

## Modulul `asistent`

### GET /v1/asistent/acces

Acces: `sesiune`

**Are omul asistent?**

Răspunde doar da/nu dacă shell-ul arată asistentul omului din sesiune.

Răspuns 200:

| Câmp | Tip | Obligatoriu | Detalii |
| --- | --- | --- | --- |
| `acces` | `boolean` | da | — |

```bash
curl https://app.ilustromania.com/nucleu/v1/asistent/acces \
  -H "Cookie: __Host-sesiune=$JETON_SESIUNE"
```

Răspuns 200 (exemplu din schemă):

```json
{
  "acces": true
}
```

### GET /v1/asistent/conversatii

Acces: `sesiune`

**Conversațiile mele cu asistentul**

Lista conversațiilor omului cu asistentul.

Răspuns 200:

| Câmp | Tip | Obligatoriu | Detalii |
| --- | --- | --- | --- |
| `conversatii` | `object[]` | da | — |
| `conversatii[].id` | `string` | da | UUID |
| `conversatii[].titlu` | `string` | da | cel mult 200 caractere |
| `conversatii[].actualizatLa` | `string` | da | moment ISO 8601 |

```bash
curl https://app.ilustromania.com/nucleu/v1/asistent/conversatii \
  -H "Cookie: __Host-sesiune=$JETON_SESIUNE"
```

Răspuns 200 (exemplu din schemă):

```json
{
  "conversatii": [
    {
      "id": "3f0c2a8e-6b1d-4c3a-9e2f-1a2b3c4d5e6f",
      "titlu": "text",
      "actualizatLa": "2026-11-12T09:30:00.000Z"
    }
  ]
}
```

### DELETE /v1/asistent/conversatii/{id}

Acces: `sesiune`

**Șterge o conversație**

Șterge o conversație a omului cu asistentul; 404 negăsită.

Parametri de cale:

| Nume | Tip | Descriere |
| --- | --- | --- |
| `id` | `string` | identificatorul resursei |

```bash
curl -X DELETE https://app.ilustromania.com/nucleu/v1/asistent/conversatii/{id} \
  -H "Cookie: __Host-sesiune=$JETON_SESIUNE"
```

### PATCH /v1/asistent/conversatii/{id}

Acces: `sesiune`

**Redenumește o conversație**

Schimbă titlul unei conversații cu asistentul.

Parametri de cale:

| Nume | Tip | Descriere |
| --- | --- | --- |
| `id` | `string` | identificatorul resursei |

Corpul cererii (JSON):

| Câmp | Tip | Obligatoriu | Detalii |
| --- | --- | --- | --- |
| `titlu` | `string` | da | între 1 și 200 caractere |

```bash
curl -X PATCH https://app.ilustromania.com/nucleu/v1/asistent/conversatii/{id} \
  -H "Cookie: __Host-sesiune=$JETON_SESIUNE" \
  -H "Content-Type: application/json" \
  -d '{
    "titlu": "text"
  }'
```

### GET /v1/asistent/conversatii/{id}/mesaje

Acces: `sesiune`

**Mesajele unei conversații**

Istoricul mesajelor unei conversații a omului cu asistentul.

Parametri de cale:

| Nume | Tip | Descriere |
| --- | --- | --- |
| `id` | `string` | identificatorul resursei |

Răspuns 200:

| Câmp | Tip | Obligatoriu | Detalii |
| --- | --- | --- | --- |
| `mesaje` | `object[]` | da | — |
| `mesaje[].id` | `integer` | da | între 0 și 9007199254740991 |
| `mesaje[].rol` | `string` | da | una din: `utilizator`, `asistent` |
| `mesaje[].titlu` | `string` | da | cel mult 200 caractere |
| `mesaje[].text` | `string` | da | cel mult 20000 caractere |
| `mesaje[].carduri` | `object[]` | da | cel mult 20 elemente |
| `mesaje[].carduri[].tip` | `string` | da | una din: `produs`, `vanzari`, `comparatie`, `recenzie`, `reducere` |
| `mesaje[].carduri[].titlu` | `string` | da | între 1 și 200 caractere |
| `mesaje[].carduri[].produsId` | `string` | nu | între 1 și 60 caractere |
| `mesaje[].carduri[].categorie` | `string` | nu | între 1 și 100 caractere |
| `mesaje[].carduri[].marcat` | `string` | nu | între 1 și 60 caractere |
| `mesaje[].carduri[].poza` | `string` | nu | cel mult 500 caractere |
| `mesaje[].carduri[].etichete` | `string[]` | da | cel mult 4 elemente |
| `mesaje[].carduri[].cifre` | `object[]` | da | cel mult 4 elemente |
| `mesaje[].carduri[].stare` | `object` | nu | — |
| `mesaje[].carduri[].link` | `object` | da | — |
| `mesaje[].carduri[].actiune` | `string` | nu | între 1 și 40 caractere |
| `mesaje[].carduri[].motiv` | `string` | nu | cel mult 300 caractere |
| `mesaje[].urmatorul` | `string[]` | da | cel mult 3 elemente |

```bash
curl https://app.ilustromania.com/nucleu/v1/asistent/conversatii/{id}/mesaje \
  -H "Cookie: __Host-sesiune=$JETON_SESIUNE"
```

Răspuns 200 (exemplu din schemă):

```json
{
  "mesaje": [
    {
      "id": 1,
      "rol": "utilizator",
      "titlu": "text",
      "text": "text",
      "carduri": [],
      "urmatorul": []
    }
  ]
}
```

### POST /v1/asistent/feedback

Acces: `sesiune`

**Votează un răspuns**

Omul dă vot unui mesaj al asistentului.

Corpul cererii (JSON):

| Câmp | Tip | Obligatoriu | Detalii |
| --- | --- | --- | --- |
| `mesajId` | `integer` | da | între 0 și 9007199254740991 |
| `vot` | `number \| number` | da | — |

```bash
curl -X POST https://app.ilustromania.com/nucleu/v1/asistent/feedback \
  -H "Cookie: __Host-sesiune=$JETON_SESIUNE" \
  -H "Content-Type: application/json" \
  -d '{
    "mesajId": 1,
    "vot": 1
  }'
```

### POST /v1/asistent/mesaj

Acces: `sesiune`

**Trimite un mesaj asistentului**

Întrebarea omului merge la asistentul AI, cu limită pe utilizator (429); 503 fără furnizor configurat.

```bash
curl -X POST https://app.ilustromania.com/nucleu/v1/asistent/mesaj \
  -H "Cookie: __Host-sesiune=$JETON_SESIUNE" \
  -H "Content-Type: application/json" \
  -d '{ … }'
```

### GET /v1/asistent/stare

Acces: `sesiune`

**Sănătatea asistentului**

Ce furnizori AI sunt configurați, cine a răspuns ultima dată și de ce s-a trecut pe rezervă.

```bash
curl https://app.ilustromania.com/nucleu/v1/asistent/stare \
  -H "Cookie: __Host-sesiune=$JETON_SESIUNE"
```

### POST /v1/asistent/voce/sesiune

Acces: `sesiune`

**Deschide vocea asistentului**

Primește oferta SDP a browserului și întoarce răspunsul SDP al sesiunii vocale (OpenAI Realtime prin WebRTC). Aceleași porți ca la mesaj: sesiune, lista asistentului (403), limita pe zi (429); 503 fără cheie, 502 când furnizorul cade.

```bash
curl -X POST https://app.ilustromania.com/nucleu/v1/asistent/voce/sesiune \
  -H "Cookie: __Host-sesiune=$JETON_SESIUNE" \
  -H "Content-Type: application/json" \
  -d '{ … }'
```

## Modulul `chat`

### GET /v1/chat/conversatii

Acces: `rol:admin`

**Conversațiile din chat**

Conversațiile echipei în care e omul din sesiune.

Răspuns 200:

| Câmp | Tip | Obligatoriu | Detalii |
| --- | --- | --- | --- |
| `conversatii` | `object[]` | da | — |
| `conversatii[].id` | `string` | da | UUID |
| `conversatii[].tip` | `string` | da | una din: `direct`, `grup`, `general` |
| `conversatii[].nume` | `string` | da | — |
| `conversatii[].membri` | `string[]` | da | — |
| `conversatii[].ultimulMesaj` | `object` | da | — |
| `conversatii[].ultimulMesaj.seq` | `integer` | da | între 0 și 9007199254740991 |
| `conversatii[].ultimulMesaj.id` | `string` | da | UUID |
| `conversatii[].ultimulMesaj.conversatieId` | `string` | da | UUID |
| `conversatii[].ultimulMesaj.autorId` | `string` | da | UUID |
| `conversatii[].ultimulMesaj.text` | `string` | da | între 1 și 4000 caractere |
| `conversatii[].ultimulMesaj.creatLa` | `string` | da | moment ISO 8601 |
| `conversatii[].necitite` | `integer` | da | între 0 și 9007199254740991 |

```bash
curl https://app.ilustromania.com/nucleu/v1/chat/conversatii \
  -H "Cookie: __Host-sesiune=$JETON_SESIUNE"
```

Răspuns 200 (exemplu din schemă):

```json
{
  "conversatii": [
    {
      "id": "3f0c2a8e-6b1d-4c3a-9e2f-1a2b3c4d5e6f",
      "tip": "direct",
      "nume": "text",
      "membri": [],
      "ultimulMesaj": {},
      "necitite": 1
    }
  ]
}
```

### POST /v1/chat/conversatii

Acces: `rol:admin`

**Deschide o conversație**

Creează o conversație directă sau un grup (201 grup nou).

```bash
curl -X POST https://app.ilustromania.com/nucleu/v1/chat/conversatii \
  -H "Cookie: __Host-sesiune=$JETON_SESIUNE" \
  -H "Content-Type: application/json" \
  -d '{ … }'
```

### POST /v1/chat/conversatii/{id}/citit

Acces: `rol:admin`

**Marchează conversația citită**

Marchează mesajele citite până la un punct și întoarce totalul necitit.

Parametri de cale:

| Nume | Tip | Descriere |
| --- | --- | --- |
| `id` | `string` | identificatorul resursei |

```bash
curl -X POST https://app.ilustromania.com/nucleu/v1/chat/conversatii/{id}/citit \
  -H "Cookie: __Host-sesiune=$JETON_SESIUNE" \
  -H "Content-Type: application/json" \
  -d '{ … }'
```

### GET /v1/chat/conversatii/{id}/mesaje

Acces: `rol:admin`

**Mesajele unei conversații**

Mesajele conversației, paginate înapoi de la un cursor.

Parametri de cale:

| Nume | Tip | Descriere |
| --- | --- | --- |
| `id` | `string` | identificatorul resursei |

```bash
curl https://app.ilustromania.com/nucleu/v1/chat/conversatii/{id}/mesaje \
  -H "Cookie: __Host-sesiune=$JETON_SESIUNE"
```

### POST /v1/chat/conversatii/{id}/mesaje

Acces: `rol:admin`

**Trimite un mesaj în chat**

Adaugă un mesaj în conversație și anunță fluxul live; limită pe cont (429).

Parametri de cale:

| Nume | Tip | Descriere |
| --- | --- | --- |
| `id` | `string` | identificatorul resursei |

```bash
curl -X POST https://app.ilustromania.com/nucleu/v1/chat/conversatii/{id}/mesaje \
  -H "Cookie: __Host-sesiune=$JETON_SESIUNE" \
  -H "Content-Type: application/json" \
  -d '{ … }'
```

### GET /v1/chat/flux

Acces: `rol:admin`

**Fluxul live al chatului**

Flux SSE cu mesajele noi, reluat după Last-Event-ID sau cursor.

```bash
curl https://app.ilustromania.com/nucleu/v1/chat/flux \
  -H "Cookie: __Host-sesiune=$JETON_SESIUNE"
```

### GET /v1/chat/necitite

Acces: `rol:admin`

**Mesaje necitite**

Totalul mesajelor necitite ale omului.

Răspuns 200:

| Câmp | Tip | Obligatoriu | Detalii |
| --- | --- | --- | --- |
| `total` | `integer` | da | între 0 și 9007199254740991 |

```bash
curl https://app.ilustromania.com/nucleu/v1/chat/necitite \
  -H "Cookie: __Host-sesiune=$JETON_SESIUNE"
```

Răspuns 200 (exemplu din schemă):

```json
{
  "total": 1
}
```
