> 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/client-api.md).

# API client

### Panoramica

Un modulo npm che fa da wrapper alle API di backend e engine. Gestisce le chiamate API ed espone i metodi disponibili con parametri e risposte tipizzati. Può essere utilizzato sia sul lato web sia sul lato node/server.

### Architettura API <a href="#architettura_api_464" id="architettura_api_464"></a>

L'API Memori è composta da due componenti principali:

1. **API Engine** ([Swagger](https://engine.memori.ai/swagger/index.html))
   1. Gestisce sessioni e dialoghi;
   2. Gestisce le funzionalità NLP;
   3. Elabora le funzionalità conversazionali.
2. **API Backend (**[Swagger](https://backend.memori.ai/memoriai/swagger/index.html)**)**
   1. Gestisce utenti e asset;
   2. Gestisce le notifiche;
   3. Controlla l'amministrazione del sistema.

### Inizializzazione del client <a href="#inizializzazione_client_479" id="inizializzazione_client_479"></a>

```javascript
import memoriApiClient from "@memori.ai/memori-api-client";
// Initialize with default endpoints
const memori = memoriApiClient(
"https://backend.memori.ai", // API URL
"https://engine.memori.ai" // Engine URL
);
```

### Funzionalità principali <a href="#funzionalit_core_491" id="funzionalit_core_491"></a>

#### **Gestione delle sessioni**

{% code overflow="wrap" %}

```javascript
// Initialize a basic session
const {
  sessionID,
  currentState
} = await memori.initSession({
  memoriID: "your-memori-id",
  birthdate: "1900-01-01T00:00:00.000Z",
});
// Initialize a session with context
const sessionWithContext = await memori.initSession({
  memoriID: "your-memori-id",
  birthdate: "1900-01-01T00:00:00.000Z",
  context: {
    location: "Milan",
    userType: "premium",
    customVariable: "value",
  },
});
```

{% endcode %}

#### **Eventi di dialogo**

```javascript
// Send a text message
const {
  currentState: dialogState
} = await memori.postTextEnteredEvent({
  sessionId: sessionID,
  text: "Hello Memori!",
});
// Change date context
await memori.postDateChangedEvent({
  sessionId: sessionID,
  date: "2024-12-13",
});
// Change location context
await memori.postPlaceChangedEvent({
  sessionId: sessionID,
  place: "Rome",
});
```

### Funzionalità avanzate <a href="#funzionalit_avanzate_536" id="funzionalit_avanzate_536"></a>

#### Gestione dello stato globale <a href="#gestione_dello_stato_globale_538" id="gestione_dello_stato_globale_538"></a>

```javascript
// Get current state
const state = getMemoriState();
const sessionID = getMemoriState().sessionID;
// For multiple widgets
const specificState = getMemoriState("widget-integration-id");
// Read state manually from the DOM
const dialogState = JSON.parse(document.querySelector("div[data-memori-engine-state]") ? .dataset ? .memoriEngineState ? ?"{}");
```

### Listener di eventi <a href="#eventi_listener_555" id="eventi_listener_555"></a>

#### **MemoriNewDialogState**

Puoi ascoltare ogni messaggio usando l'evento `MemoriNewDialogState` e valutarne il contenuto per attivare una reazione

```javascript
// Listen for state changes
document.addEventListener("MemoriNewDialogState", (e) = >{
  const {
    emission,
    context,
    sessionID
  } = e.detail;
  // Log analytics
  logConversation({
    sessionId: sessionID,
    message: emission,
    timestamp: new Date(),
    context: context,
  });
  // Handle specific responses
  if (emission.includes("help")) {
    showHelpPanel();
  }
});
// Handle end of speech
document.addEventListener("MemoriEndSpeak", () = >{
  clearCustomElements();
  checkConversationFlow();
});
```

#### Invio di messaggi <a href="#gestione_invio_messaggi_587" id="gestione_invio_messaggi_587"></a>

```javascript
// Basic message
typeMessage("Hello!");
// Advanced message with options
typeMessage("Show product catalog", true, // wait for previous message
false, // show in chat
"Loading catalog..." // loading text
);
// Don't show the message in chat
typeMessageHidden("analyze_sentiment", true);
```

### Esempio completo di integrazione API <a href="#esempio_completo_di_integrazione_api_605" id="esempio_completo_di_integrazione_api_605"></a>

```javascript
import memoriApiClient from "@memori.ai/memori-api-client";

async function memoriConversation() {
  // Initialize client
  const memori = memoriApiClient("https://backend.memori.ai", "https://engine.memori.ai");

  try {
    // Start session
    const {
      sessionID,
      currentState
    } = await memori.initSession({
      memoriID: "your-memori-id",
      birthdate: "1900-01-01T00:00:00.000Z",
      context: {
        location: "Milan",
        userType: "premium",
      },
    });

    // Send initial message
    const {
      currentState: firstResponse
    } = await memori.postTextEnteredEvent({
      sessionId: sessionID,
      text: "Hello! Tell me about yourself.",
    });
    console.log("Memori says:", firstResponse.emission);

    // Update context
    await memori.postPlaceChangedEvent({
      sessionId: sessionID,
      place: "Rome",
    });

    // Send next message
    const {
      currentState: secondResponse
    } = await memori.postTextEnteredEvent({
      sessionId: sessionID,
      text: "What can you tell me about this location?",
    });
    console.log("Memori says:", secondResponse.emission);

    // Run NLP analysis
    const language = await memori.guessLanguage(sessionID, secondResponse.emission);
    console.log("Response language:", language);

    // Close session
    await memori.closeSession(sessionID);
  } catch(error) {
    console.error("Error:", error.resultMessage);
  }
}
```
