SDK React
SDK ElevenAgents : déployez des agents vocaux interactifs et personnalisés en quelques minutes.
Consultez la présentation d’ElevenAgents pour comprendre le fonctionnement d’ElevenAgents.
Installation
Installez le package dans votre projet via votre gestionnaire de packages.
Vous effectuez une mise à niveau depuis une version antérieure ? Exécutez npx skills add elevenlabs/packages pour installer la compétence
elevenlabs:sdk-migration pour votre agent de codage IA, qui automatise les modifications d’importation,
l’encapsulation par ConversationProvider et les mises à jour de l’API.
@elevenlabs/react réexporte tout le contenu de @elevenlabs/client, vous n’avez donc pas besoin d’installer
les deux packages.
Utilisation
Voici un exemple minimal fonctionnel qui se connecte à un agent et permet à l’utilisateur de démarrer et de terminer une conversation vocale :
Les sections ci-dessous expliquent chaque élément en détail.
ConversationProvider
Tous les hooks de conversation doivent être utilisés dans un ConversationProvider. Encapsulez votre application, ou le sous-arbre concerné, avec ce fournisseur.
Propriétés du fournisseur
Le fournisseur accepte les mêmes options que useConversation, notamment les callbacks, outils client, remplacements et l’emplacement du serveur. Vous pouvez ainsi les configurer au niveau du fournisseur plutôt que dans chaque consommateur de hook.
État de mise en sourdine contrôlé
Le fournisseur prend en charge les propriétés isMuted et onMutedChange pour gérer un état de mise en sourdine contrôlé, ce qui vous permet de conserver cet état en externe, par exemple entre les sessions.
useConversation
Un hook React pratique qui combine tous les hooks granulaires dans une seule valeur de retour. Nécessite un ConversationProvider parent.
Pour de meilleures performances de rendu, utilisez plutôt les hooks granulaires.
useConversation déclenche un nouveau rendu à chaque changement d’état, tandis que les hooks granulaires ne
déclenchent un nouveau rendu que lorsque leur partie spécifique de l’état change.
Initialiser une conversation
Notez qu’ElevenAgents nécessite l’accès au microphone pour les conversations vocales. Envisagez d’expliquer cet accès et de l’autoriser dans l’interface de votre application avant le début de la conversation.
Options
Le hook peut être initialisé avec des options. Vous pouvez également les transmettre au niveau de ConversationProvider.
Les options incluent :
- clientTools : définition d’objet pour les outils client pouvant être appelés par l’agent. Voir ci-dessous pour plus de détails.
- overrides : définition d’objet pour les remplacements des paramètres de conversation. Voir ci-dessous pour plus de détails.
- textOnly : indique si la conversation doit fonctionner en mode texte uniquement. Voir ci-dessous pour plus de détails.
- serverLocation : spécifie l’emplacement du serveur (
"us","eu-residency","in-residency","global"). La valeur par défaut est"us".
Présentation des callbacks
- onConnect : gestionnaire appelé lorsque la connexion de la conversation est établie.
- onDisconnect : gestionnaire appelé lorsque la connexion de la conversation est terminée.
- onMessage : gestionnaire appelé lorsqu’un nouveau message est reçu. Il peut s’agir de transcriptions provisoires ou finales de la voix de l’utilisateur, de réponses générées par un LLM ou d’un message de débogage lorsqu’une option de débogage est activée.
- onError : gestionnaire appelé lorsqu’une erreur se produit.
- onAudio : gestionnaire appelé lorsque des données audio sont reçues.
- onModeChange : gestionnaire appelé lorsque le mode de conversation change (parole/écoute).
- onStatusChange : gestionnaire appelé lorsque l’état de la connexion change.
- onCanSendFeedbackChange : gestionnaire appelé lorsque la possibilité d’envoyer des commentaires change.
- onDebug : gestionnaire appelé lorsque des informations de débogage sont disponibles.
- onUnhandledClientToolCall : gestionnaire appelé lorsqu’un appel d’outil client non géré est rencontré.
- onVadScore : gestionnaire appelé lorsque le score de détection d’activité vocale change.
- onAudioAlignment : gestionnaire appelé lorsque des données d’alignement audio sont reçues, fournissant des informations de synchronisation au niveau des caractères pour la parole de l’agent.
- onAgentChatResponsePart : gestionnaire appelé avec le texte de réponse de l’agent au fur et à mesure de sa génération, sous forme d’événements de début, delta et fin. Toujours envoyé en mode texte uniquement ; pour les conversations vocales, activez
agent_chat_response_partdans la configurationclient_eventsde l’agent.
Outils client
Les outils client permettent à l’agent d’appeler des fonctionnalités côté client. Ils peuvent déclencher des actions dans le client, comme ouvrir une fenêtre modale ou effectuer un appel API pour le compte de l’utilisateur.
La définition des outils client est un objet de fonctions. Elle doit être identique à votre configuration dans l’interface ElevenLabs, où vous pouvez nommer et décrire différents outils, ainsi que configurer les paramètres transmis par l’agent.
Si la fonction renvoie une valeur, elle est transmise à l’agent en tant que réponse.
L’outil doit être explicitement configuré pour bloquer la conversation dans l’interface ElevenLabs afin que l’agent puisse attendre la réponse et y réagir. Sinon, l’agent suppose que l’opération a réussi et poursuit la conversation.
Pour une approche plus idiomatique à React pour l’enregistrement des outils client, consultez useConversationClientTool.
Remplacements de conversation
Vous pouvez remplacer différents paramètres de la conversation et les définir dynamiquement selon d’autres interactions utilisateur.
Nous prenons en charge le remplacement de plusieurs paramètres. Ces paramètres sont facultatifs et permettent de personnaliser l’expérience de conversation.
Les paramètres suivants sont disponibles :
Texte uniquement
Si votre agent est configuré pour fonctionner en mode texte uniquement, c’est-à-dire qu’il n’envoie ni ne reçoit de messages audio, vous pouvez utiliser cet indicateur pour employer une version plus légère de la conversation. Dans ce cas, l’utilisateur ne sera pas invité à autoriser le microphone et aucun contexte audio ne sera créé.
État contrôlé
Vous pouvez contrôler directement certains aspects de l’état de la conversation via les options du hook :
Résidence des données
Vous pouvez spécifier la région de serveur ElevenLabs à laquelle vous connecter. Pour en savoir plus, consultez le guide sur la résidence des données.
Méthodes
startSession
La méthode startSession établit la connexion et commence à utiliser le microphone pour communiquer avec l’agent ElevenLabs Agents. La méthode accepte un objet d’options, dans lequel signedUrl, conversationToken ou agentId est requis.
Vous pouvez obtenir l’ID de l’agent via l’interface ElevenLabs.
Nous vous recommandons également de transmettre vos propres ID d’utilisateurs finaux pour associer les conversations à vos utilisateurs.
Le type de connexion est automatiquement déduit du mode de conversation. Les conversations vocales
utilisent WebRTC et les conversations en texte uniquement utilisent WebSocket par défaut. Vous pouvez toujours spécifier explicitement
connectionType si nécessaire.
Pour les agents publics, c’est-à-dire les agents sans authentification activée, seul agentId est requis.
Si la conversation nécessite une autorisation, utilisez l’API REST pour générer des liens signés pour une connexion WebSocket ou un jeton de conversation pour une connexion WebRTC.
startSession renvoie une promesse résolue avec un conversationId. Cette valeur est un ID de conversation globalement unique que vous pouvez utiliser pour identifier des conversations distinctes.
Connexion WebSocket
Connexion WebRTC
endSession
Méthode permettant de terminer manuellement la conversation. Elle déconnecte et met fin à la conversation.
setVolume
Définit le volume de sortie de la conversation. Accepte un objet avec un champ volume compris entre 0 et 1.
sendUserMessage
Envoie un message texte à l’agent.
Peut être utilisé pour permettre à l’utilisateur de saisir le message au lieu d’utiliser le microphone. Contrairement à sendContextualUpdate, ce message sera traité comme un message utilisateur et invitera l’agent à prendre son tour dans la conversation.
sendContextualUpdate
Envoie à l’agent des informations contextuelles qui ne déclencheront pas de réponse.
sendFeedback
Fournit un retour sur la qualité de la conversation. Cela contribue à améliorer les performances de l’agent.
sendUserActivity
Informe l’agent de l’activité de l’utilisateur afin d’éviter les interruptions. Utile lorsque l’utilisateur utilise activement l’application et que l’agent doit interrompre sa parole, par exemple lorsque l’utilisateur écrit dans un chat.
L’agent interrompt sa parole pendant environ 2 secondes après réception de ce signal.
changeInputDevice
Change le périphérique d’entrée audio pendant une conversation vocale active. Cette méthode est disponible uniquement pour les conversations vocales.
changeOutputDevice
Change le périphérique de sortie audio pendant une conversation vocale active. Cette méthode est disponible uniquement pour les conversations vocales.
Le changement de périphérique fonctionne uniquement pour les conversations vocales. Si aucun deviceId spécifique n’est fourni,
le navigateur utilisera sa sélection de périphérique par défaut. Vous pouvez lister les périphériques disponibles avec l’API
MediaDevices.enumerateDevices().
getId
Renvoie l’ID de la conversation actuelle.
getInputVolume / getOutputVolume
Méthodes qui renvoient les niveaux actuels de volume d’entrée/sortie, sur une échelle de 0 à 1.
getInputByteFrequencyData / getOutputByteFrequencyData
Méthodes qui renvoient des Uint8Array contenant les données actuelles de fréquence d’entrée/sortie. Consultez AnalyserNode.getByteFrequencyData pour plus d’informations.
Ces méthodes sont disponibles uniquement pour les conversations vocales. En mode WebRTC, l’audio est codé en dur pour
utiliser pcm_48000, ce qui signifie que toute visualisation utilisant les données renvoyées peut présenter des motifs différents
de ceux des connexions WebSocket.
sendMCPToolApprovalResult
Envoie le résultat d’approbation pour les appels d’outils MCP (Model Context Protocol).
Valeurs de retour
En plus des méthodes ci-dessus, useConversation renvoie l’état réactif suivant :
- status : l’état actuel de la connexion (
"disconnected","connecting","connected"). - isSpeaking : indique si l’agent parle actuellement.
- isListening : indique si l’agent écoute actuellement.
- mode : le mode actuel de la conversation (
"speaking"ou"listening"). - isMuted : indique si le microphone est actuellement en sourdine.
- setMuted : fonction permettant de couper/rétablir le son du microphone.
- canSendFeedback : indique si des commentaires peuvent être envoyés pour la conversation actuelle.
- message : le dernier message de la conversation.
Hooks granulaires
Pour de meilleures performances de rendu, utilisez ces hooks plutôt que useConversation. Chaque hook s’abonne uniquement à sa partie spécifique de l’état, de sorte que les composants ne sont mis à jour que lorsque les données qu’ils utilisent changent.
Tous les hooks granulaires nécessitent un ConversationProvider parent.
useConversationControls
Renvoie les méthodes d’action permettant de contrôler la conversation. Ce hook ne provoque pas de nouveaux rendus, car il fournit uniquement des références de fonctions stables.
useConversationStatus
Renvoie l’état actuel de la connexion et un message d’état facultatif.
useConversationInput
Renvoie l’état de mise en sourdine et une fonction de définition pour activer ou désactiver le microphone.
useConversationMode
Renvoie l’état de parole/d’écoute de l’agent.
useConversationFeedback
Renvoie la disponibilité des commentaires et une méthode pour les envoyer.
useRawConversation
Renvoie l’instance brute de conversation. Il s’agit d’une solution de contournement pour les cas d’usage avancés où vous avez besoin d’un accès direct à l’objet VoiceConversation ou TextConversation sous-jacent.
useConversationClientTool
Un hook pour enregistrer dynamiquement des outils client depuis des composants React. Les outils sont automatiquement désenregistrés lorsque le composant est démonté.
Cela est utile lorsque le gestionnaire d’un outil a besoin d’accéder à l’état ou aux propriétés du composant, qui ne sont pas disponibles au niveau du fournisseur.
Le hook utilise toujours la dernière valeur de fermeture du gestionnaire, vous n’avez donc pas à vous soucier d’un état obsolète.