# Tunneling: esempio di una live chat su AIsuru

## Tunneling: esempio di una live chat

In questa sezione vedremo come implementare una live chat usando gli intenti dinamici e il tunneling. Questo esempio ci permetterà di esplorare nel dettaglio sia il funzionamento del tunneling che la struttura delle chiamate degli intenti dinamici.

#### Il caso della live chat

Una live chat è un esempio perfetto per illustrare il tunneling poiché richiede:

* Una conversazione continuativa con un servizio esterno;
* Il mantenimento del contesto tra i messaggi;
* La gestione in tempo reale delle risposte.

#### Struttura dell'intento dinamico

Per implementare la live chat, configuriamo l'intento dinamico con:

* Nome: "LIVE\_CHAT";
* Frasi di attivazione: "Voglio parlare con un operatore", "Live chat", ecc.;
* Webhook: URL del servizio che gestisce la live chat.

Quando l'utente attiva l'intento, il webhook riceve una richiesta con questa struttura:

```json
{
  "intentName": "LIVE_CHAT",
  "utterance": "Voglio parlare con un operatore",
  "slotValues": {},
  "currentTag": "string",
  "currentTagAuthenticated": true,
  "contextVars": {},
  "memoriID": "string",
  "sessionID": "string",
  "culture": "it-IT"
}
```

#### Avvio del tunneling

Il webhook risponde attivando il tunneling per prendere il controllo della conversazione:

```json
{
  "emission": "Ti sto mettendo in contatto con un operatore. Attendi un momento...",
  "conclusive": true,
  "tunneling": true
  }
}
```

Da questo momento:

1. Ogni messaggio dell'utente viene inviato direttamente al webhook;
2. L'Agente non elabora più i messaggi ma li inoltra al servizio di chat;
3. Le risposte dell'operatore arrivano attraverso il webhook (che le passa all'Agente con l'emission).

#### Gestione della conversazione

Durante la chat, ogni messaggio dell'utente genera una richiesta al webhook:

```json
{
  "intentName": "LIVE_CHAT",
  "utterance": "Ho un problema con il mio ordine",
  "sessionID": "string",
  "culture": "it-IT"
}
```

Il webhook risponde mantenendo attivo il tunneling:

```json
{
  "emission": "Operatore: Certo, mi dica il numero del suo ordine",
  "tunneling": true,
  "conclusive": true
}
```

#### Chiusura della chat

Quando l'operatore chiude la chat, il webhook invia una risposta che termina il tunneling:

```json
{
  "emission": "La chat è stata chiusa. Grazie per aver utilizzato il nostro servizio di assistenza!",
  "tunneling": false,
  "conclusive": true
}
```

L'Agente riprende il normale controllo della conversazione.

{% hint style="info" %}
Il flag `tunneling` determina chi gestisce la conversazione: se `true`, il webhook ha il controllo; se `false`, l'Agente riprende il controllo.
{% endhint %}

L'esempio della live chat dimostra come il tunneling permetta di creare interazioni complesse mantenendo un'architettura pulita e gestibile. Gli stessi principi si possono applicare a molti altri scenari che richiedono una conversazione continuativa con un sistema esterno.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.aisuru.com/avanzate/integrazioni/intenti-dinamici/tunneling-esempio-di-una-live-chat-su-aisuru.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
