SDK React
SDK ElevenAgents: implementa in pochi minuti agenti vocali interattivi e personalizzati.
Consulta la panoramica di ElevenAgents per una spiegazione di come funziona ElevenAgents.
Installazione
Installa il pacchetto nel tuo progetto tramite il package manager.
Stai effettuando l’aggiornamento da una versione precedente? Esegui npx skills add elevenlabs/packages per installare la
skill elevenlabs:sdk-migration per il tuo agente di coding IA, che automatizza le modifiche agli import,
il wrapping di ConversationProvider e gli aggiornamenti delle API.
@elevenlabs/react riesporta tutto da @elevenlabs/client, quindi non devi installare
entrambi i pacchetti.
Utilizzo
Ecco un esempio minimo funzionante che si connette a un agente e consente all’utente di avviare e terminare una conversazione vocale:
Le sezioni seguenti spiegano ogni parte nel dettaglio.
ConversationProvider
Tutti gli hook della conversazione devono essere usati all’interno di un ConversationProvider. Avvolgi la tua app (o il sottoalbero pertinente) con questo provider.
Proprietà del provider
Il provider accetta le stesse opzioni di useConversation, inclusi callback, strumenti client, override e posizione del server, così puoi configurarli a livello di provider anziché in ogni consumer dell’hook.
Stato di disattivazione audio controllato
Il provider supporta le proprietà isMuted e onMutedChange per la gestione controllata dello stato di disattivazione audio, consentendoti di renderlo persistente esternamente, ad esempio tra le sessioni.
useConversation
Un pratico hook React che combina tutti gli hook granulari in un singolo valore restituito. Richiede un ConversationProvider antenato.
Per prestazioni di rendering migliori, valuta invece l’uso degli hook granulari.
useConversation attiva un nuovo rendering a ogni modifica dello stato, mentre gli hook granulari eseguono
un nuovo rendering solo quando cambia la loro specifica porzione di stato.
Inizializzare una conversazione
Tieni presente che ElevenAgents richiede l’accesso al microfono per le conversazioni vocali. Valuta di spiegare il motivo e consentire l’accesso nell’interfaccia della tua app prima dell’avvio della conversazione.
Opzioni
L’hook può essere inizializzato facoltativamente con delle opzioni. Puoi passarle anche a livello di ConversationProvider.
Le opzioni includono:
- clientTools - definizione dell’oggetto per gli strumenti client che possono essere richiamati dall’agente. Per i dettagli, vedi sotto.
- overrides - definizione dell’oggetto per gli override delle impostazioni della conversazione. Per i dettagli, vedi sotto.
- textOnly - indica se la conversazione deve essere eseguita in modalità solo testo. Per i dettagli, vedi sotto.
- serverLocation - specifica la posizione del server (
"us","eu-residency","in-residency","global"). Il valore predefinito è"us".
Panoramica dei callback
- onConnect - gestore chiamato quando viene stabilita la connessione della conversazione.
- onDisconnect - gestore chiamato quando la connessione della conversazione termina.
- onMessage - gestore chiamato quando viene ricevuto un nuovo messaggio. Può trattarsi di trascrizioni provvisorie o finali della voce dell’utente, risposte prodotte da LLM o messaggi di debug quando è abilitata un’opzione di debug.
- onError - gestore chiamato quando si verifica un errore.
- onAudio - gestore chiamato quando vengono ricevuti dati audio.
- onModeChange - gestore chiamato quando cambia la modalità della conversazione (conversazione/ascolto).
- onStatusChange - gestore chiamato quando cambia lo stato della connessione.
- onCanSendFeedbackChange - gestore chiamato quando cambia la possibilità di inviare feedback.
- onDebug - gestore chiamato quando sono disponibili informazioni di debug.
- onUnhandledClientToolCall - gestore chiamato quando viene rilevata una chiamata a uno strumento client non gestita.
- onVadScore - gestore chiamato quando cambia il punteggio del rilevamento dell’attività vocale.
- onAudioAlignment - gestore chiamato quando vengono ricevuti dati di allineamento audio, che forniscono informazioni sui tempi a livello di carattere per il parlato dell’agente.
- onAgentChatResponsePart - gestore chiamato con il testo della risposta dell’agente durante la generazione, come eventi di avvio, delta e arresto. Viene sempre inviato in modalità solo testo; per le conversazioni vocali, abilita
agent_chat_response_partnella configurazioneclient_eventsdell’agente.
Strumenti client
Gli strumenti client consentono all’agente di richiamare funzionalità lato client. Puoi usarli per attivare azioni nel client, come aprire una finestra modale o effettuare una chiamata API per conto dell’utente.
La definizione degli strumenti client è un oggetto di funzioni e deve essere identica alla configurazione nella UI di ElevenLabs, dove puoi assegnare nome e descrizione ai diversi strumenti, oltre a configurare i parametri passati dall’agente.
Se la funzione restituisce un valore, questo viene passato all’agente come risposta.
Perché l’agente attenda la risposta e reagisca a essa, lo strumento deve essere impostato esplicitamente per bloccare la conversazione nella UI di ElevenLabs. In caso contrario, l’agente presume che l’operazione sia riuscita e prosegue la conversazione.
Per un approccio più idiomatico in React alla registrazione degli strumenti client, consulta useConversationClientTool.
Override della conversazione
Puoi scegliere di sovrascrivere varie impostazioni della conversazione e impostarle dinamicamente in base ad altre interazioni dell’utente.
Supportiamo l’override di varie impostazioni. Sono facoltative e puoi usarle per personalizzare l’esperienza di conversazione.
Sono disponibili le seguenti impostazioni:
Solo testo
Se il tuo agente è configurato per essere eseguito in modalità solo testo, ovvero non invia né riceve messaggi audio, puoi usare questo flag per usare una versione più leggera della conversazione. In questo caso non verranno richiesti i permessi per il microfono e non verrà creato alcun contesto audio.
Stato controllato
Puoi controllare direttamente alcuni aspetti dello stato della conversazione tramite le opzioni dell’hook:
Residenza dei dati
Puoi specificare a quale regione del server ElevenLabs connetterti. Per maggiori informazioni, consulta la guida alla residenza dei dati.
Metodi
startSession
Il metodo startSession stabilisce la connessione e avvia l’uso del microfono per comunicare con l’agente ElevenLabs Agents. Il metodo accetta un oggetto di opzioni, per cui è obbligatorio signedUrl, conversationToken o agentId.
Puoi ottenere l’ID dell’agente dalla UI di ElevenLabs.
Ti consigliamo inoltre di passare i tuoi ID utente finali per associare le conversazioni ai tuoi utenti.
Il tipo di connessione viene dedotto automaticamente in base alla modalità della conversazione. Le conversazioni vocali
usano WebRTC e quelle solo testo usano WebSocket per impostazione predefinita. Se necessario, puoi comunque specificare esplicitamente
connectionType.
Per gli agenti pubblici, ovvero gli agenti senza autenticazione abilitata, è richiesto solo agentId.
Se la conversazione richiede autorizzazione, usa l’API REST per generare link firmati per una connessione WebSocket o un token di conversazione per una connessione WebRTC.
startSession restituisce una promise che risolve un conversationId. Il valore è un ID di conversazione univoco a livello globale che puoi usare per identificare conversazioni separate.
Connessione WebSocket
Connessione WebRTC
endSession
Un metodo per terminare manualmente la conversazione. Disconnette e termina la conversazione.
setVolume
Imposta il volume di output della conversazione. Accetta un oggetto con un campo volume compreso tra 0 e 1.
sendUserMessage
Invia un messaggio di testo all’agente.
Puoi usarlo per consentire all’utente di digitare il messaggio anziché usare il microfono. A differenza di sendContextualUpdate, verrà trattato come un messaggio utente e inviterà l’agente a intervenire nella conversazione.
sendContextualUpdate
Invia all’agente informazioni contestuali che non attiveranno una risposta.
sendFeedback
Fornisci feedback sulla qualità della conversazione. Questo aiuta a migliorare le prestazioni dell’agente.
sendUserActivity
Notifica all’agente l’attività dell’utente per evitare interruzioni. È utile quando l’utente sta usando attivamente l’app e l’agente dovrebbe interrompere il parlato, ad esempio quando l’utente sta digitando in una chat.
L’agente interromperà il parlato per circa 2 secondi dopo aver ricevuto questo segnale.
changeInputDevice
Cambia il dispositivo di input audio durante una conversazione vocale attiva. Questo metodo è disponibile solo per le conversazioni vocali.
changeOutputDevice
Cambia il dispositivo di output audio durante una conversazione vocale attiva. Questo metodo è disponibile solo per le conversazioni vocali.
Il cambio di dispositivo funziona solo per le conversazioni vocali. Se non viene fornito uno specifico deviceId, il
browser userà la selezione del dispositivo predefinita. Puoi elencare i dispositivi disponibili usando l’API
MediaDevices.enumerateDevices().
getId
Restituisce l’ID della conversazione corrente.
getInputVolume / getOutputVolume
Metodi che restituiscono i livelli attuali del volume di input/output (scala 0-1).
getInputByteFrequencyData / getOutputByteFrequencyData
Metodi che restituiscono Uint8Array contenenti i dati di frequenza correnti di input/output. Per maggiori informazioni, consulta AnalyserNode.getByteFrequencyData.
Questi metodi sono disponibili solo per le conversazioni vocali. In modalità WebRTC l’audio è configurato in modo fisso per
usare pcm_48000, quindi le visualizzazioni che usano i dati restituiti potrebbero mostrare pattern diversi
dalle connessioni WebSocket.
sendMCPToolApprovalResult
Invia il risultato dell’approvazione per le chiamate di strumenti MCP (Model Context Protocol).
Valori restituiti
Oltre ai metodi sopra indicati, useConversation restituisce il seguente stato reattivo:
- status - lo stato corrente della connessione (
"disconnected","connecting","connected"). - isSpeaking - indica se l’agente sta parlando.
- isListening - indica se l’agente sta ascoltando.
- mode - la modalità corrente della conversazione (
"speaking"o"listening"). - isMuted - indica se il microfono è disattivato.
- setMuted - funzione per disattivare/riattivare il microfono.
- canSendFeedback - indica se è possibile inviare feedback per la conversazione corrente.
- message - l’ultimo messaggio della conversazione.
Hook granulari
Per prestazioni di rendering migliori, usa questi hook anziché useConversation. Ogni hook si sottoscrive solo alla propria specifica porzione di stato, quindi i componenti eseguono un nuovo rendering solo quando cambiano i dati che utilizzano.
Tutti gli hook granulari richiedono un ConversationProvider antenato.
useConversationControls
Restituisce i metodi di azione per controllare la conversazione. Questo hook non provoca nuovi rendering poiché fornisce solo riferimenti a funzioni stabili.
useConversationStatus
Restituisce lo stato corrente della connessione e un messaggio di stato facoltativo.
useConversationInput
Restituisce lo stato di disattivazione dell’audio e un setter per attivare o disattivare il microfono.
useConversationMode
Restituisce lo stato di conversazione/ascolto dell’agente.
useConversationFeedback
Restituisce la disponibilità dei feedback e un metodo per inviarli.
useRawConversation
Restituisce l’istanza della conversazione non elaborata. È una soluzione di emergenza per casi d’uso avanzati in cui ti serve l’accesso diretto all’oggetto VoiceConversation o TextConversation sottostante.
useConversationClientTool
Un hook per registrare dinamicamente strumenti client dai componenti React. Gli strumenti vengono annullati automaticamente quando il componente viene smontato.
È utile quando il gestore di uno strumento richiede l’accesso allo stato o alle proprietà del componente che non sono disponibili a livello di provider.
L’hook usa sempre il valore più recente della closure del gestore, quindi non devi preoccuparti di stati obsoleti.