Herramientas de código

Ejecuta lógica personalizada de JavaScript directamente en la infraestructura de ElevenLabs.

Las herramientas de código permiten que tu agente ejecute JavaScript personalizado en un entorno aislado del lado del servidor, sin que tengas que configurar y alojar tu propia ruta de webhook. Escribe la lógica una vez en el editor de código integrado y ElevenLabs la ejecutará cada vez que el agente llame a la herramienta.

Esta función solo está disponible para empresas.

Descripción general

Una herramienta de código es una función de JavaScript que se ejecuta cuando el agente la llama. Tú escribes todo el cuerpo de la función, así que la herramienta puede hacer tanto o tan poco como requiera la tarea:

  • Cálculos personalizados: aplica reglas de precios, conversiones de unidades, lógica de puntuación o cálculos de fechas usando solo los parámetros de llamada a la herramienta. No requiere acceso a la red.
  • Llamadas a API externas: usa fetch desde dominios permitidos, con secretos del espacio de trabajo y conexiones de autenticación inyectados en el contexto de la función.
  • Combinación de varias fuentes: llama a dos o tres API y combina, compara o concilia sus resultados antes de devolver una única respuesta.
  • Ramificación condicional: ejecuta lógica distinta según los parámetros de llamada a la herramienta, sin necesidad de una herramienta independiente para cada rama.
  • Transformación de datos: devuelve exactamente la estructura que quieres que vea el agente, en lugar de una respuesta sin procesar del sistema de origen.

Para una única llamada a una API externa sin lógica personalizada, las herramientas de webhook suelen ser más fáciles de configurar. Para activar acciones en el navegador o la app de un usuario, utiliza las herramientas de cliente .

Cómo funciona

Tu código es un módulo de JavaScript que exporta una única función asíncrona predeterminada. La función recibe un objeto ctx y devuelve el resultado de la herramienta:

export default async (ctx) => {
// ctx.args.<paramName> — the parameters the agent passed to this tool call
const { city } = ctx.args;
return { message: `Hello from ${city}!` };
};

El valor que devuelves se convierte en el resultado de la herramienta. Se devuelve al agente, se muestra en la transcripción de la conversación y puede utilizarse para la asignación dinámica de variables.

El objeto ctx

ctx es tu punto de acceso a todo lo que la herramienta puede consultar en el momento de la llamada. Los parámetros que proporciona el agente siempre llegan en ctx.args; los secretos, valores de configuración y conexiones de autenticación son opcionales y solo aparecen si los asignas en la sección Objeto de contexto de la herramienta.

PropiedadDescripción
ctx.argsLos parámetros de llamada a la herramienta proporcionados por el agente.
ctx.configVariables de cadena simples que has asignado al contexto de esta herramienta.
ctx.secretsSecretos del espacio de trabajo que has asignado al contexto de esta herramienta para usarlos en cabeceras de solicitud. El secreto sin procesar nunca se expone a tu código; la inyección se produce en la salida y exclusivamente en las cabeceras.
ctx.auth_connectionsReferencias a conexiones de autenticación configuradas que has asignado al contexto de esta herramienta, para usarlas en la cabecera de solicitud X-With-Auth-Connection. La credencial subyacente nunca se expone a tu código; la inyección se produce en la salida y exclusivamente en las cabeceras.

Solo ctx.args es visible para el agente cuando llama a la herramienta. Los secretos, valores de configuración y conexiones de autenticación nunca se revelan al agente.

Configurar parámetros

Los parámetros son los valores que proporciona el agente cuando llama a la herramienta y llegan en ctx.args. Defínelos en la sección Parámetros del formulario de configuración de la herramienta o en el editor de código, en la pestaña Params, dentro de la subpestaña Define Params. Cada parámetro requiere un tipo de datos, un identificador y una descripción que el agente usa para determinar el valor correcto a partir de la conversación. Tu código lee ese valor mediante el identificador, como ctx.args.appointment_datetime a continuación.

Definir un parámetro de una herramienta de código

Configurar el objeto de contexto

Añade secretos, valores de configuración y conexiones de autenticación en la sección Objeto de contexto de la herramienta. Cada entrada requiere un tipo y un nombre. El panel muestra el acceso exacto para cada entrada, como ctx.secrets.DEMO_KEY a continuación.

Asignar un secreto del espacio de trabajo al objeto de contexto de una herramienta de código

Acceso a la red

El código que se ejecuta en el entorno aislado solo puede acceder a dominios que tu espacio de trabajo haya permitido explícitamente. Añade los dominios a los que debe llamar tu código en Configuración general de tu espacio de trabajo, en Dominios permitidos para herramientas de código. Las solicitudes a cualquier otro dominio fallarán.

Para editar la lista de Dominios permitidos para herramientas de código se necesitan permisos de administrador del espacio de trabajo.

Límites de ejecución

  • Tiempo de espera: cada ejecución debe completarse dentro del tiempo de espera de respuesta configurado para la herramienta, de 1 a 30 segundos.
  • Sin paquetes externos: actualmente, las herramientas de código se ejecutan sin dependencias de npm.

Probar tu código

Antes de guardar, usa Run en el editor de código para ejecutar tu código con valores de parámetros de ejemplo:

  • Params: establece valores de prueba para cada parámetro definido por tu herramienta.
  • Output: consulta el resultado devuelto o el error si la ejecución falló.
  • Logs: consulta cualquier contenido escrito con console.log, console.warn o console.error, además de los tiempos de compilación y ejecución.

Guía

En esta guía, crearemos una herramienta de código que convierte una temperatura y devuelve una cadena con formato fácil de entender:

1

Crea una herramienta de código nueva

En la sección Agent de la página de configuración de tu agente, elige Add Tool. Selecciona Code como tipo de herramienta y, después, establece un nombre y una descripción:

CampoValor
Nombreconvert_temperature
DescripciónConvierte una temperatura entre Celsius y Fahrenheit
2

Define los parámetros

Añade dos parámetros para que el LLM sepa qué debe proporcionar:

Tipo de datosIdentificadorObligatorioDescripción
numbervaluetrueEl valor de temperatura que se va a convertir
stringfrom_unittrueLa unidad de origen: "C" o "F"
3

Escribe el código

Abre el editor de código y sustituye el código fuente predeterminado por:

export default async (ctx) => {
const { value, from_unit } = ctx.args;
if (from_unit === "C") {
const fahrenheit = (value * 9) / 5 + 32;
return { result: `${value}°C is ${fahrenheit.toFixed(1)}°F` };
}
const celsius = ((value - 32) * 5) / 9;
return { result: `${value}°F is ${celsius.toFixed(1)}°C` };
};

Usa Run con algunos valores de ejemplo (p. ej., value: 100, from_unit: "C") para confirmar el resultado antes de guardar.

4

Orquestación

Actualiza el prompt del sistema de tu agente para que sepa cuándo usar la herramienta:

Prompt del sistema
When the user asks to convert a temperature, call convert_temperature with the
value and its unit ("C" or "F"), and read back the result naturally.
5

Pruebas

Inicia una conversación y prueba lo siguiente:

¿A cuánto equivalen 100 grados Celsius en Fahrenheit?

El agente debería llamar a la herramienta y comunicar el valor convertido.

Ejemplos de autenticación

Llamar a una API con un secreto

export default async (ctx) => {
const { order_id } = ctx.args;
const response = await fetch(`https://api.example.com/orders/${order_id}`, {
headers: {
Authorization: `Bearer ${ctx.secrets.EXAMPLE_API_KEY}`,
},
});
if (!response.ok) {
throw new Error(`Upstream error: ${response.status}`);
}
return await response.json();
};

Asigna EXAMPLE_API_KEY a un secreto del espacio de trabajo en la sección Objeto de contexto de la herramienta y, después, añade api.example.com a Dominios permitidos para herramientas de código para que se permita la salida de la solicitud. El valor al que haces referencia es un marcador de posición: el secreto real se sustituye en la cabecera durante la salida y nunca es visible para tu código.

Llamar a una API con una conexión de autenticación OAuth

export default async (ctx) => {
const { customer_id } = ctx.args;
const response = await fetch(`https://api.example.com/customers/${customer_id}`, {
headers: {
"X-With-Auth-Connection": ctx.authConnections.EXAMPLE_CRM,
},
});
if (!response.ok) {
throw new Error(`Upstream error: ${response.status}`);
}
return await response.json();
};

Asigna EXAMPLE_CRM a una conexión de autenticación configurada en la sección Objeto de contexto de la herramienta. El valor al que haces referencia es un marcador de posición: la credencial real se sustituye en la cabecera durante la salida y nunca es visible para tu código.

Buenas prácticas

Asigna nombres intuitivos a las herramientas y añade descripciones detalladas

Si el asistente no llama a las herramientas correctas, quizá tengas que actualizar sus nombres y descripciones para que entienda con mayor claridad cuándo debe seleccionar cada herramienta. Evita usar abreviaturas o acrónimos para acortar los nombres de las herramientas y los argumentos.

También puedes incluir descripciones detalladas sobre cuándo debe llamarse a una herramienta. Para herramientas complejas, incluye descripciones de cada argumento para ayudar al asistente a saber qué debe pedir al usuario para obtener ese argumento.

Asigna nombres intuitivos a los parámetros de las herramientas y añade descripciones detalladas

Usa nombres claros y descriptivos para los parámetros de las herramientas. Si procede, especifica en la descripción el formato esperado para un parámetro (por ejemplo, AAAA-mm-dd o dd/mm/aa para una fecha).

Plantéate proporcionar información adicional sobre cómo y cuándo llamar a las herramientas en el prompt del sistema de tu asistente

Proporcionar instrucciones claras en el prompt del sistema puede mejorar significativamente la precisión con la que el asistente llama a las herramientas. Por ejemplo, guía al asistente con instrucciones como las siguientes:

Use `check_order_status` when the user inquires about the status of their order, such as 'Where is my order?' or 'Has my order shipped yet?'.

Proporciona contexto para situaciones complejas. Por ejemplo:

Before scheduling a meeting with `schedule_meeting`, check the user's calendar for availability using check_availability to avoid conflicts.

Selección de LLM

Al usar herramientas, recomendamos elegir modelos de alta inteligencia como GPT 5.2, Gemini-2.5-Flash o Claude Sonnet 4.5 y evitar Gemini-2.0-Flash.

Es importante tener en cuenta que la elección del LLM influye en el éxito de las llamadas a funciones. Algunos LLM pueden tener dificultades para extraer de la conversación los parámetros relevantes.