SDK de Kotlin
SDK de ElevenAgents: implementa agentes de voz interactivos y personalizados en minutos para aplicaciones Android.
Consulta la descripción general de ElevenAgents para saber cómo funciona ElevenAgents.
Instalación
Añade el SDK de ElevenLabs a tu proyecto de Android incluyendo la siguiente dependencia en el archivo build.gradle de tu app:
Puedes encontrar un ejemplo de app para Android que usa este SDK aquí
Requisitos
- Nivel de API de Android 21 (Android 5.0) o superior
- Permiso de Internet para llamadas a la API
- Permiso de micrófono para la entrada de voz
- Configuración de seguridad de red para llamadas HTTPS
Configuración
Configuración del manifiesto
Añade los permisos necesarios a tu AndroidManifest.xml:
Permisos en tiempo de ejecución
Para Android 6.0 (nivel de API 23) y versiones posteriores, debes solicitar permiso de micrófono en tiempo de ejecución:
Uso
Inicializa el SDK de ElevenLabs en tu clase Application o actividad principal:
Inicia una sesión de conversación con una de estas opciones:
- Agente público: pasa
agentId - Agente privado: pasa
conversationTokenaprovisionado desde tu backend (nunca expongas tu clave de API al cliente).
Ten en cuenta que ElevenAgents requiere acceso al micrófono. Valora explicar y solicitar permisos en la interfaz de tu app antes de iniciar la conversación, especialmente en Android 6.0+ donde los permisos en tiempo de ejecución son obligatorios.
Si una herramienta está configurada con expects_response=false en el servidor, devuelve null desde execute
para no enviar el resultado de la herramienta al agente.
Agentes públicos y privados
- Agentes públicos (sin autenticación): inicialízalos con
agentIdenConversationConfig. El SDK solicita un token de conversación a ElevenLabs sin necesidad de una clave de API en el dispositivo. - Agentes privados (con autenticación): inicialízalos con
conversationTokenenConversationConfig. Tu servidor solicita un token de conversación a ElevenLabs mediante tu clave de API de ElevenLabs.
Herramientas de cliente
Registra herramientas de cliente para permitir que el agente llame a funciones locales del dispositivo.
Cuando el agente emite una client_tool_call, el SDK ejecuta la herramienta correspondiente y responde con un client_tool_result. Si la herramienta no está registrada, se invoca onUnhandledClientToolCall y se devuelve un resultado de error al agente (si se espera una respuesta).
Descripción general de callbacks
- onConnect - Se llama cuando se establece la conexión WebRTC. Devuelve el ID de la conversación.
- onMessage - Se llama cuando se recibe un mensaje nuevo. Puede tratarse de transcripciones provisionales o finales de la voz del usuario, respuestas generadas por el LLM o mensajes de depuración. Proporciona la fuente (
"ai"o"user") y el mensaje JSON sin procesar. - onModeChange - Se llama cuando cambia el modo de conversación. Es útil para indicar si el agente está hablando (
"speaking") o escuchando ("listening"). - onStatusChange - Se llama cuando cambia el estado de la conversación (
"connected","connecting"o"disconnected"). - onCanSendFeedbackChange - Se llama cuando cambia la posibilidad de enviar feedback. Activa o desactiva los botones de feedback.
- onUnhandledClientToolCall - Se llama cuando el agente solicita una herramienta de cliente que no está registrada en el dispositivo.
- onVadScore - Se llama cuando cambia la puntuación de detección de actividad de voz. El intervalo va de 0 a 1, y los valores más altos indican una mayor confianza de que hay habla.
- onAudioAlignment - Se llama cuando se reciben datos de alineación de audio y proporciona información de tiempo a nivel de carácter para la voz del agente.
No todos los eventos de cliente están activados de forma predeterminada para un agente. Si has activado un callback pero no recibes eventos, asegúrate de que tu agente de ElevenLabs tiene activado el evento correspondiente. Puedes hacerlo en la pestaña “Advanced” de la configuración del agente en el panel de ElevenLabs.
Métodos
startSession
El método startSession inicia la conexión WebRTC y comienza a usar el micrófono para comunicarse con el agente de ElevenLabs Agents.
Agentes públicos
Para los agentes públicos (es decir, agentes que no tienen la autenticación activada), solo se necesita agentId. Puedes obtener el ID del agente desde la interfaz de ElevenLabs.
Agentes privados
Para los agentes privados, debes pasar un conversationToken obtenido mediante la API de ElevenLabs. Para generar este token necesitas una clave de API de ElevenLabs.
conversationToken es válido durante 10 minutos.A continuación, pasa el token al método startSession. Ten en cuenta que para los agentes privados solo se necesita conversationToken.
Opcionalmente, puedes pasar un ID de usuario para identificarlo en la conversación. Puede ser tu propio identificador de cliente. Se incluirá en los datos de inicio de la conversación enviados al servidor.
endSession
Método para finalizar manualmente la conversación. Se desconectará y finalizará la conversación.
sendUserMessage
Envía un mensaje de texto al agente durante una conversación activa. Esto activará una respuesta del agente.
sendContextualUpdate
Envía información contextual al agente que no activará una respuesta.
sendFeedback
Proporciona feedback sobre la calidad de la conversación. Esto ayuda a mejorar el rendimiento del agente. Usa onCanSendFeedbackChange para activar tu interfaz de pulgar arriba/abajo cuando se permita enviar feedback.
sendUserActivity
Notifica al agente sobre la actividad del usuario para evitar interrupciones. Es útil cuando el usuario está usando activamente la app 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.
getId
Obtén el ID de la conversación.
Silenciar/activar micrófono
Observa session.isMuted para actualizar la etiqueta de la interfaz entre “Silenciar” y “Activar micrófono”.
Propiedades
status
Obtén el estado actual de la conversación.
ProGuard / R8
Si reduces u ofuscas el código, asegúrate de conservar los modelos de Gson y LiveKit. Reglas de ejemplo (ajústalas según sea necesario):
Solución de problemas
- Asegúrate de que el permiso de micrófono se concede en tiempo de ejecución
- Si la reconexión se bloquea, verifica que tu app llama a
session.endSession()y que inicias una nueva instancia de sesión antes de volver a conectarte - En emuladores, verifica que las rutas de entrada y salida de audio funcionen; los dispositivos físicos suelen comportarse de forma más fiable
Implementación de ejemplo
Para ver una implementación de ejemplo, consulta la app de ejemplo en el repositorio del SDK de ElevenLabs para Android. La app muestra:
- Conexión y desconexión con un toque
- Indicador de hablando/escuchando
- Botones de feedback que se activan o desactivan en la interfaz
- Indicador de escritura mediante
sendUserActivity() - Mensajes contextuales y de usuario desde un campo de entrada
- Botón para silenciar/activar el micrófono