> For the complete documentation index, see [llms.txt](https://docs.aisuru.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.aisuru.com/frontend/ripresa-delle-sessioni.md).

# Ripresa della sessione

La funzionalità di ripresa delle sessioni consente agli utenti di continuare le conversazioni precedenti senza perdere il contesto, migliorando significativamente l'esperienza utente.

### Come funziona

Quando viene fornito un `sessionID`, AIsuru verifica automaticamente se la sessione è ancora valida:

* **Sessione valida**: recupera lo storico della conversazione e ripopola la chat, mostrando l'ultimo messaggio dell'Agente;
* **Sessione non valida**: crea una nuova sessione e mostra il messaggio di benvenuto.

⏰ **Importante**: le sessioni scadono dopo **1 ora** di inattività.

### Ottenere il sessionID

#### Dall'interfaccia di AIsuru

Il modo più semplice per trovare un ID sessione:

1. Vai alla sezione \<img src="../.gitbook/assets/conversazioni.svg" alt="" data-size="line"> **Conversazioni** del tuo Agente;
2. Fai clic su \<img src="../.gitbook/assets/URL.svg" alt="" data-size="line"> **Apri** per la conversazione desiderata;
3. Nella sezione **"Informazioni sulla sessione"**, troverai l'**ID sessione.**

#### Tramite JavaScript

Per ottenere programmaticamente l'ID di una sessione attiva:

```javascript
javascript// Current sessionconst sessionID = getMemoriState().sessionID;// For a widget with a specific integrationIDconst sessionID = getMemoriState("my-integration-id").sessionID;
```

### Implementazione

#### Web Component

```html
html<memori-client  memoriName="MyMemori"  ownerUserName="user"  tenantID="aisuru.com"  sessionID="session-uuid-to-resume"></memori-client>
```

#### Componente React

```tsx
tsx<Memori  memoriName="MyMemori"  ownerUserName="user"  tenantID="aisuru.com"  sessionID="session-uuid-to-resume"/>
```

### Casi d'uso comuni

#### Salvare e riprendere le sessioni

```javascript
javascript// Save sessionIDdocument.addEventListener('MemoriNewDialogState', (e) => {  const sessionID = e.detail.sessionID;  localStorage.setItem('memori-session', sessionID);});// Resume saved sessionconst savedSessionID = localStorage.getItem('memori-session');// Use savedSessionID in the component's sessionID attribute
```

#### Integrazione con l'autenticazione utente

```javascript
javascript// Associate session with logged-in userconst userSessionKey = `memori-session-${userId}`;localStorage.setItem(userSessionKey, sessionID);// Resume session for specific userconst userSessionID = localStorage.getItem(userSessionKey);
```

### Integrazione avanzata via API

#### 1. Recupero dei log della chat (cronologia)

Esistono due modi per recuperare i messaggi passati, a seconda che tu conosca già la sessione specifica o voglia mostrare all'utente un elenco cronologico.

**A. Recupera una sessione specifica**

Usalo se hai già un ID sessione e vuoi caricare i messaggi associati.

**Endpoint:** `GET /memori/v2/SessionChatLogs/{sessionID}/{chatLogSessionID}`

**Nota:** passando lo stesso ID in entrambi i parametri, l'API restituirà i log di quella specifica sessione.

**B. Elenco cronologico paginato**

Usalo per mostrare all'utente una cronologia delle sue conversazioni passate.

* **Endpoint:** `POST /memori/v2/UserChatLogsByTokenPaged`
* **Parametri del payload (`ChatLogFilters`):**

| Parametro                | Tipo    | Descrizione                                                      |
| ------------------------ | ------- | ---------------------------------------------------------------- |
| `loginToken`             | Stringa | Token di autenticazione dell'utente.                             |
| `memoriID`               | Stringa | ID Memori univoco (Engine).                                      |
| `from`                   | Numero  | Indice iniziale per la paginazione.                              |
| `howMany`                | Numero  | Numero di elementi da recuperare.                                |
| `dateFrom`/ `dateTo`     | Stringa | Intervallo di tempo (formato `yyyyMMddHHmmssfff`).               |
| `minimumMessagesPerChat` | Numero  | (Facoltativo) Numero minimo di messaggi da includere nella chat. |
| `showChatsWithNoHistory` | Boolean | (Facoltativo) Includi le sessioni aperte ma senza messaggi.      |

#### 2. Analisi della risposta (JSON)

Indipendentemente dall'endpoint utilizzato, la struttura dei log segue questo schema:

```json
{
  "chatLogs": [
    {
      "chatLogID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "sessionID": "session-uuid-1111-2222",
      "lines": [
        {
          "text": "Hello, how can I help you?",
          "inbound": false,
          "emitter": "assistant"
        },
        {
          "text": "I'd like info about product X",
          "inbound": true,
          "emitter": "user"
        }
      ]
    }
  ]
}
```

> **Integrazione dell'interfaccia utente:** usa `inbound: true` per i messaggi dell'utente e `inbound: false` per i messaggi dell'assistente.

#### 3. Apertura di una nuova sessione (ripresa)

Dopo aver identificato la conversazione da proseguire, devi aprire una nuova sessione operativa iniettando il contesto passato.

**Endpoint:** `POST /memori/v2/Session`

#### Opzioni di continuazione

Nel corpo della richiesta, puoi scegliere **uno** dei due parametri di ancoraggio:

1. `continueFromChatLogID`: usa l'ID del blocco di log ottenuto nel passaggio 1;
2. `continueFromSessionID`: usa l'ID della sessione precedente.

> La sessione dura 5 minuti.

**Esempio di corpo JSON:**

```json
{
  "memoriID": "YOUR-AGENT-ID",
  "continueFromChatLogID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "initialContextVars": {
    "LANG": "en"
  },
  "additionalInfo": {
    "language": "en",
    "timeZoneOffset": "-120"
  }
}
```

**Risultato:** il backend restituirà un **nuovo** `sessionID`. Da questo momento in poi, tutti i messaggi successivi devono usare questo nuovo ID.

***

### Note tecniche

* **Identificazione dell'ID:** l'`chatLogID` identifica l'intera istantanea della conversazione. **Non** passare l'ID di un singolo messaggio (`line`) nel campo di continuazione;
* **Variabili di contesto:** usa `initialContextVars` per passare dati come la lingua o il percorso URL corrente; questi aiutano il motore a fornire risposte contestualizzate fin dal primo messaggio della sessione ripresa;
* **Client SDK:** per una tipizzazione forte dei parametri `ChatLogFilters`, consigliamo di usare il pacchetto ufficiale `@memori.ai/memori-api-client`.

### Vantaggi

* **Continuità dell'esperienza**: gli utenti possono riprendere le conversazioni interrotte da dove le avevano lasciate;
* **Mantenimento del contesto**: l'Agente ricorda le informazioni della conversazione precedente;
* **Gestione automatica**: AIsuru gestisce automaticamente le sessioni scadute o non valide;
* **Flessibilità**: compatibile con tutti i layout e le configurazioni.
