SDK de React
SDK de ElevenAgents: despliega agentes de voz personalizados e interactivos en minutos.
Consulta la visión general de ElevenAgents para entender cómo funciona ElevenAgents.
Instalación
Instala el paquete en tu proyecto mediante un gestor de paquetes.
¿Estás actualizando desde una versión anterior? Ejecuta npx skills add elevenlabs/packages para instalar la
skill elevenlabs:sdk-migration para tu agente de programación con IA, que automatiza los cambios de importación,
la integración de ConversationProvider y las actualizaciones de la API.
@elevenlabs/react vuelve a exportar todo desde @elevenlabs/client, así que no necesitas instalar
ambos paquetes.
Uso
Aquí tienes un ejemplo mínimo funcional que se conecta a un agente y permite al usuario iniciar y terminar una conversación de voz:
Las secciones siguientes explican cada parte en detalle.
ConversationProvider
Todos los hooks de conversación deben usarse dentro de un ConversationProvider. Envuelve tu aplicación (o el subárbol correspondiente) con este proveedor.
Props del proveedor
El proveedor acepta las mismas opciones que useConversation —incluidos callbacks, herramientas de cliente, anulaciones y ubicación del servidor—, por lo que puedes configurarlas a nivel de proveedor en lugar de hacerlo en cada componente que consume el hook.
Estado de silencio controlado
El proveedor admite las props isMuted y onMutedChange para gestionar el estado de silencio de forma controlada, lo que te permite conservarlo externamente (por ejemplo, entre sesiones).
useConversation
Un práctico hook de React que combina todos los hooks granulares en un único valor de retorno. Requiere un ConversationProvider antecesor.
Para mejorar el rendimiento del renderizado, considera usar los hooks granulares.
useConversation provoca un nuevo renderizado ante cualquier cambio de estado, mientras que los hooks granulares solo
se vuelven a renderizar cuando cambia su parte específica del estado.
Inicializar la conversación
Ten en cuenta que ElevenAgents requiere acceso al micrófono para las conversaciones de voz. Antes de que empiece la conversación, considera explicarlo y permitir el acceso desde la interfaz de tu aplicación.
Opciones
El hook puede inicializarse opcionalmente con opciones. También puedes pasarlas en el nivel de ConversationProvider.
Las opciones incluyen:
- clientTools: definición de objeto para herramientas de cliente que el agente puede invocar. Consulta los detalles a continuación.
- overrides: definición de objeto para anulaciones de la configuración de conversación. Consulta los detalles a continuación.
- textOnly: indica si la conversación debe ejecutarse en modo de solo texto. Consulta los detalles a continuación.
- serverLocation: especifica la ubicación del servidor (
"us","eu-residency","in-residency","global"). El valor predeterminado es"us".
Resumen de callbacks
- onConnect: controlador que se llama cuando se establece la conexión de la conversación.
- onDisconnect: controlador que se llama cuando finaliza la conexión de la conversación.
- onMessage: controlador que se llama cuando se recibe un mensaje nuevo. Pueden ser transcripciones provisionales o finales de la voz del usuario, respuestas generadas por el LLM o mensajes de depuración cuando hay una opción de depuración activada.
- onError: controlador que se llama cuando se produce un error.
- onAudio: controlador que se llama cuando se reciben datos de audio.
- onModeChange: controlador que se llama cuando cambia el modo de conversación (hablando/escuchando).
- onStatusChange: controlador que se llama cuando cambia el estado de la conexión.
- onCanSendFeedbackChange: controlador que se llama cuando cambia la posibilidad de enviar comentarios.
- onDebug: controlador que se llama cuando hay información de depuración disponible.
- onUnhandledClientToolCall: controlador que se llama cuando se encuentra una llamada a una herramienta de cliente sin gestionar.
- onVadScore: controlador que se llama cuando cambia la puntuación de detección de actividad de voz.
- onAudioAlignment: controlador que se llama cuando se reciben datos de alineación de audio, que proporcionan información de tiempos a nivel de carácter para el habla del agente.
- onAgentChatResponsePart: controlador que se llama con el texto de respuesta del agente a medida que se genera, mediante eventos de inicio, delta y finalización. Se envía siempre en modo de solo texto; para conversaciones de voz, activa
agent_chat_response_parten la configuración declient_eventsdel agente.
Herramientas de cliente
Las herramientas de cliente permiten que el agente invoque funcionalidades del lado del cliente. Puedes utilizarlas para activar acciones en el cliente, como abrir un modal o realizar una llamada a la API en nombre del usuario.
La definición de herramientas de cliente es un objeto de funciones y debe ser idéntica a tu configuración en la interfaz de ElevenLabs, donde puedes nombrar y describir distintas herramientas, así como configurar los parámetros que pasa el agente.
Si la función devuelve un valor, se le pasa al agente como respuesta.
La herramienta debe configurarse explícitamente para bloquear la conversación en la interfaz de ElevenLabs para que el agente espere la respuesta y reaccione a ella. De lo contrario, el agente asumirá que ha tenido éxito y continuará la conversación.
Para un enfoque más idiomático de React para registrar herramientas de cliente, consulta useConversationClientTool.
Anulaciones de conversación
Puedes optar por anular distintos ajustes de la conversación y establecerlos dinámicamente según otras interacciones del usuario.
Admitimos la anulación de distintos ajustes. Son opcionales y pueden usarse para personalizar la experiencia de conversación.
Están disponibles los siguientes ajustes:
Solo texto
Si tu agente está configurado para ejecutarse en modo de solo texto, es decir, no envía ni recibe mensajes de audio, puedes usar esta marca para utilizar una versión más ligera de la conversación. En ese caso, no se le pedirá permiso al usuario para usar el micrófono ni se creará ningún contexto de audio.
Estado controlado
Puedes controlar determinados aspectos del estado de la conversación directamente mediante las opciones del hook:
Residencia de datos
Puedes especificar a qué región de servidor de ElevenLabs conectarte. Para obtener más información, consulta la guía de residencia de datos.
Métodos
startSession
El método startSession establece la conexión y empieza a usar el micrófono para comunicarse con el agente de ElevenLabs Agents. El método acepta un objeto de opciones, en el que se requiere signedUrl, conversationToken o agentId.
Puedes obtener el ID del agente desde la interfaz de ElevenLabs.
También recomendamos pasar tus propios ID de usuarios finales para asociar las conversaciones a tus usuarios.
El tipo de conexión se infiere automáticamente según el modo de conversación. Las conversaciones de voz
usan WebRTC y las conversaciones de solo texto usan WebSocket de forma predeterminada. Aun así, puedes especificar
explícitamente connectionType si lo necesitas.
Para los agentes públicos (es decir, agentes que no tienen la autenticación activada), solo se requiere agentId.
Si la conversación requiere autorización, usa la API REST para generar enlaces firmados para una conexión WebSocket o un token de conversación para una conexión WebRTC.
startSession devuelve una promesa que se resuelve en un conversationId. El valor es un ID de conversación único globalmente que puedes usar para identificar conversaciones independientes.
Conexión WebSocket
Conexión WebRTC
endSession
Un método para terminar manualmente la conversación. El método desconectará y finalizará la conversación.
setVolume
Establece el volumen de salida de la conversación. Acepta un objeto con un campo volume entre 0 y 1.
sendUserMessage
Envía un mensaje de texto al agente.
Puedes usarlo para que el usuario escriba el mensaje en lugar de usar el micrófono. A diferencia de sendContextualUpdate, se tratará como un mensaje del usuario e indicará al agente que tome su turno en la conversación.
sendContextualUpdate
Envía información contextual al agente que no activará una respuesta.
sendFeedback
Proporciona comentarios sobre la calidad de la conversación. Esto ayuda a mejorar el rendimiento del agente.
sendUserActivity
Notifica al agente la actividad del usuario para evitar interrupciones. Es útil cuando el usuario está usando activamente la aplicación y el agente debe dejar de hablar, por ejemplo, cuando el usuario está escribiendo en un chat.
El agente dejará de hablar durante unos 2 segundos después de recibir esta señal.
changeInputDevice
Cambia el dispositivo de entrada de audio durante una conversación de voz activa. Este método solo está disponible para conversaciones de voz.
changeOutputDevice
Cambia el dispositivo de salida de audio durante una conversación de voz activa. Este método solo está disponible para conversaciones de voz.
El cambio de dispositivo solo funciona en conversaciones de voz. Si no se proporciona un deviceId específico, el
navegador usará su selección de dispositivo predeterminada. Puedes enumerar los dispositivos disponibles mediante la
API MediaDevices.enumerateDevices().
getId
Devuelve el ID de la conversación actual.
getInputVolume / getOutputVolume
Métodos que devuelven los niveles de volumen de entrada/salida actuales (escala de 0 a 1).
getInputByteFrequencyData / getOutputByteFrequencyData
Métodos que devuelven Uint8Arrays con los datos de frecuencia de entrada/salida actuales. Consulta AnalyserNode.getByteFrequencyData para obtener más información.
Estos métodos solo están disponibles para conversaciones de voz. En modo WebRTC, el audio está codificado para
usar pcm_48000, lo que significa que cualquier visualización que use los datos devueltos podría mostrar patrones diferentes
a los de las conexiones WebSocket.
sendMCPToolApprovalResult
Envía el resultado de aprobación para llamadas a herramientas MCP (Model Context Protocol).
Valores de retorno
Además de los métodos anteriores, useConversation devuelve el siguiente estado reactivo:
- status: el estado actual de la conexión (
"disconnected","connecting","connected"). - isSpeaking: indica si el agente está hablando actualmente.
- isListening: indica si el agente está escuchando actualmente.
- mode: el modo de conversación actual (
"speaking"o"listening"). - isMuted: indica si el micrófono está silenciado actualmente.
- setMuted: función para silenciar o activar el micrófono.
- canSendFeedback: indica si se pueden enviar comentarios para la conversación actual.
- message: el mensaje más reciente de la conversación.
Hooks granulares
Para mejorar el rendimiento del renderizado, usa estos hooks en lugar de useConversation. Cada hook se suscribe únicamente a su parte específica del estado, de modo que los componentes solo se vuelven a renderizar cuando cambian los datos que consumen.
Todos los hooks granulares requieren un ConversationProvider antecesor.
useConversationControls
Devuelve métodos de acción para controlar la conversación. Este hook no provoca nuevos renderizados, ya que solo proporciona referencias de función estables.
useConversationStatus
Devuelve el estado actual de la conexión y un mensaje de estado opcional.
useConversationInput
Devuelve el estado de silencio y una función de configuración para activar o desactivar el micrófono.
useConversationMode
Devuelve el estado de habla/escucha del agente.
useConversationFeedback
Devuelve la disponibilidad de comentarios y un método para enviarlos.
useRawConversation
Devuelve la instancia de conversación sin procesar. Es una vía de escape para casos de uso avanzados en los que necesitas acceso directo al objeto VoiceConversation o TextConversation subyacente.
useConversationClientTool
Un hook para registrar dinámicamente herramientas de cliente desde componentes de React. Las herramientas se anulan automáticamente al desmontar el componente.
Resulta útil cuando el gestor de una herramienta necesita acceder al estado o las props del componente que no están disponibles en el nivel del proveedor.
El hook siempre usa el valor de cierre más reciente del gestor, así que no tienes que preocuparte por estados obsoletos.