> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Personalización del widget

Los **widgets** permiten integrar al instante ElevenAgents en cualquier sitio web. Puedes personalizar tu widget desde la interfaz o mediante nuestros [SDK de ElevenAgents](/docs/es/eleven-api/resources/libraries) con tipado seguro para tener un control total sobre el estilo y el comportamiento. Las anulaciones del SDK tienen prioridad sobre la personalización desde la interfaz.
Nuestro widget es multimodal y puede procesar tanto texto como audio.

> **Note**
>
> También puedes obtener la configuración del widget de un agente y su enlace compartible desde Claude u otro
> cliente MCP a través del [servidor MCP alojado](/docs/es/eleven-agents/operate/hosted-mcp).

## Configuración de modalidad

El widget admite modos de entrada flexibles para adaptarse a tu caso de uso. Configura estas opciones en el panel, en **Canales** → **Widget** → **Interfaz**.

> **Note**
>
> La multimodalidad es totalmente compatible con nuestros SDK de cliente. Consulta más información
> [aquí](/docs/es/eleven-api/resources/libraries).

![Opciones de interfaz del widget](/docs/_fern-img/cf851dd7a29b4bd23f7d36097ebf57c0bfe1b6a7a3b35687ddea20d9920a93c0.webp)

**Modos disponibles:**

* **Solo voz** (predeterminado): usuarios interactúan únicamente mediante voz.
* **Voz + texto**: usuarios pueden alternar entre la entrada de voz y texto durante las conversaciones.
* **Modo de chat**: las conversaciones comienzan en modo de chat (solo texto), sin capacidades de voz, cuando se inician con un mensaje de texto.

Para obtener más información sobre cómo usar el modo de chat (solo texto) con nuestros SDK, consulta nuestra [guía del modo de chat](/docs/es/eleven-agents/guides/chat-mode).

> **Note**
>
> El widget usa el modo de solo voz de forma predeterminada. Activa el interruptor de entrada de texto para permitir interacciones
> multimodales, o habilita el modo de solo texto para conversaciones exclusivamente basadas en texto cuando se inicien
> mediante texto.

## Insertar el widget

> **Note**
>
> Actualmente, los widgets requieren agentes públicos con la autenticación desactivada. Asegúrate de desactivarla en
> la pestaña **Avanzado** de la configuración de tu agente.

Añade este fragmento de código a la sección `<body>` de tu sitio web. Colócalo en tu archivo principal `index.html` para que esté disponible en todo el sitio:

**`Código de inserción del widget`**

```html title="Código de inserción del widget"
<elevenlabs-convai agent-id="<replace-with-agent_7101k5zvyjhmfg983brhmhkd98n6>"></elevenlabs-convai>
<script
  src="https://unpkg.com/@elevenlabs/convai-widget-embed"
  async
  type="text/javascript"
></script>
```

> **Info**
>
> Para mejorar la seguridad, define los dominios permitidos en la **Lista de permitidos** de tu agente (en la
> pestaña **Seguridad**). Esto restringe el acceso únicamente a los hosts especificados.

## Atributos del widget

Este código de inserción básico mostrará el widget con la configuración predeterminada definida en el panel del agente.
El widget admite varios atributos HTML para personalizarlo aún más:

#### Configuración básica

```html
<elevenlabs-convai
  agent-id="agent_id"              // Required: Your agent ID
  signed-url="signed_url"          // Alternative to agent-id
  server-location="us"             // Optional: "us" or default
  variant="expanded"               // Optional: Widget display mode
  dismissible="true"               // Optional: Allow the user to minimize the widget
></elevenlabs-convai>
```

#### Personalización visual

```html
<elevenlabs-convai
  avatar-image-url="https://..." // Optional: Custom avatar image
  avatar-orb-color-1="#6DB035" // Optional: Orb gradient color 1
  avatar-orb-color-2="#F5CABB" // Optional: Orb gradient color 2
></elevenlabs-convai>
```

#### Personalización del texto

```html
<elevenlabs-convai
  action-text="Need assistance?" // Optional: CTA button text
  start-call-text="Begin conversation" // Optional: Start call button
  end-call-text="End call" // Optional: End call button
  expand-text="Open chat" // Optional: Expand widget text
  listening-text="Listening..." // Optional: Listening state
  speaking-text="Assistant speaking" // Optional: Speaking state
></elevenlabs-convai>
```

#### Renderizado de Markdown

El widget renderiza Markdown en las respuestas del agente. De forma predeterminada, los enlaces se muestran como texto sin formato para evitar el phishing.

```html
<elevenlabs-convai
  markdown-link-allowed-hosts="example.com"  // Domains where links are clickable (use "*" for all)
  markdown-link-include-www="true"           // Also allow www variants (default: true)
  markdown-link-allow-http="true"            // Allow http:// links (default: true)
  syntax-highlight-theme="dark"              // Code block theme: "dark", "light", or "auto"
></elevenlabs-convai>
```

## Configuración en tiempo de ejecución

Puedes usar otros dos atributos HTML para personalizar el comportamiento del agente en tiempo de ejecución. Estas dos funciones pueden utilizarse juntas, por separado o no utilizarse.

### Variables dinámicas

Las variables dinámicas te permiten insertar valores de tiempo de ejecución en los mensajes, prompts del sistema y herramientas de tu agente.

```html
<elevenlabs-convai
  agent-id="agent_7101k5zvyjhmfg983brhmhkd98n6"
  dynamic-variables='{"user_name": "John", "account_type": "premium"}'
></elevenlabs-convai>
```

Debes pasar al widget todas las variables dinámicas que requiera el agente.

> **Info**
>
> Consulta más información en nuestra [guía de variables dinámicas](/docs/es/eleven-agents/customization/personalization/dynamic-variables).

### Anulaciones

Las anulaciones permiten personalizar por completo el comportamiento de tu agente en tiempo de ejecución:

```html
<elevenlabs-convai
  agent-id="agent_7101k5zvyjhmfg983brhmhkd98n6"
  override-language="es"
  override-prompt="Custom system prompt for this user"
  override-first-message="Hi! How can I help you today?"
  override-voice-id="axXgspJ2msm3clMCkdW3"
></elevenlabs-convai>
```

Puedes habilitar anulaciones para campos específicos y son totalmente opcionales.

> **Info**
>
> Consulta más información en nuestra [guía de anulaciones](/docs/es/eleven-agents/customization/personalization/overrides).

## Personalización visual

Personaliza la apariencia del widget, el contenido de texto, la selección de idioma y mucho más.

#### Actualizar desde el panel

Abre tu agente en el panel y ve a la pestaña **Widget** para personalizar la apariencia, el avatar, el texto, los términos, la compatibilidad con idiomas y mucho más.

![Personalización del widget](/docs/_fern-img/1f773d01a3c0925a47f11cf57153db23bc8bc03b93efe5d7085919886ae392cf.webp)

#### Actualizar mediante la CLI

#### Obtener la configuración del agente

```bash
elevenlabs agents pull --agent "<agent-name>"
```

#### Editar \`agent_configs/\<agent-name>.json\`

Configura los campos en `platform_settings.widget`. Por ejemplo, para cambiar los colores de la esfera y el modo de feedback:

```json
{
  "platform_settings": {
    "widget": {
      "variant": "full",
      "placement": "bottom-right",
      "avatar": {
        "type": "orb",
        "color_1": "#6DB035",
        "color_2": "#F5CABB"
      },
      "feedback_mode": "during",
      "bg_color": "#ffffff",
      "text_color": "#000000",
      "btn_color": "#000000",
      "btn_text_color": "#ffffff"
    }
  }
}
```

#### Enviar tus cambios

```bash
elevenlabs agents push --agent "<agent-name>"
```

#### Actualizar mediante la API

```python
from elevenlabs import ElevenLabs

elevenlabs = ElevenLabs()

elevenlabs.conversational_ai.agents.update(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    platform_settings={
        "widget": {
            "variant": "full",
            "placement": "bottom-right",
            "avatar": {
                "type": "orb",
                "color_1": "#6DB035",
                "color_2": "#F5CABB",
            },
            "feedback_mode": "during",
        },
    },
)
```

```typescript
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";

const elevenlabs = new ElevenLabsClient();

await elevenlabs.conversationalAi.agents.update("agent_7101k5zvyjhmfg983brhmhkd98n6", {
  platformSettings: {
    widget: {
      variant: "full",
      placement: "bottom-right",
      avatar: {
        type: "orb",
        color1: "#6DB035",
        color2: "#F5CABB",
      },
      feedbackMode: "during",
    },
  },
});
```

#### Apariencia

Personaliza los colores y las formas del widget para que encajen con la identidad de tu marca.

![Apariencia del widget](/docs/_fern-files/elevenlabs.docs.buildwithfern.com/0c07c4569f8c5ad3b93933711c268601af411085aa7df1bb8e8ec547a01f2d8e/assets/images/conversational-ai/appearance.gif)

#### Feedback

Recopila información de usuarios para mejorar el rendimiento del agente. Puedes usarla para ajustar la base de conocimiento y el prompt del sistema de tu agente.

![Feedback del widget](/docs/_fern-img/d7117399e23f06522b3112ff5c5ead23f66d3ea4700c011ff75e5dcd6cce875c.webp)

**Modos de recopilación**

* **Ninguno**: desactiva por completo la recopilación de feedback.
* **Durante la conversación**: permite recibir feedback en tiempo real durante las conversaciones. Se recopilarán metadatos adicionales, como la respuesta del agente que provocó el feedback, para ayudar a identificar mejor las carencias.
* **Después de la conversación**: muestra una única solicitud de feedback después de la conversación.

> **Note**
>
> Envía feedback mediante programación a través de la [API](/docs/es/eleven-agents/api-reference/conversations/create) cuando uses implementaciones personalizadas con SDK.

#### Avatar

Configura la esfera de voz o proporciona tu propio avatar.

![Personalización de la esfera del widget](/docs/_fern-files/elevenlabs.docs.buildwithfern.com/7530f28ad124fc4533911eca4a2269ac1df19dffd2b6dab1e8b56d95cc1eb53c/assets/images/conversational-ai/avatar.gif)

**Opciones disponibles**

* **Esfera**: elige dos colores de degradado (p. ej., #6DB035 y #F5CABB).
* **Enlace/imagen**: usa una imagen de avatar personalizada.

#### Texto mostrado

Personaliza todos los elementos de texto mostrados en el widget, por ejemplo para modificar las etiquetas de los botones.

![Contenido de texto del widget](/docs/_fern-files/elevenlabs.docs.buildwithfern.com/4ad66ecae5df29e587afcf6e1898ccb41ca197abdaa2fde3ada4b10d256f8b7c/assets/images/conversational-ai/textcontents.gif)

#### Términos

Muestra términos y condiciones personalizados antes de la conversación.

![Configuración de los términos](/docs/_fern-img/58dfd0abf92615f85c7314e8baec1bf4dd401cc88a04f1096baf817f05edb39d.webp)

**Opciones disponibles**

* **Contenido de los términos**: usa Markdown para dar formato al texto de tu política.
* **Clave de almacenamiento local**: una clave (p. ej., "terms_accepted") para evitar mostrarlos de nuevo a usuarios que regresan.

**Uso**

Los términos se muestran a usuarios en una ventana modal antes de iniciar la llamada:

![Visualización de los términos](/docs/_fern-img/ca7511c60f1f6a29ee8bdd5c40083c73ef701f6cfd7ce1672161d73559a0c9b0.webp)

Los términos pueden escribirse en Markdown, lo que te permite:

* Añadir enlaces a políticas externas
* Dar formato al texto con encabezados y listas
* Incluir énfasis y estilos

Para obtener más ayuda con Markdown, consulta la [guía de ayuda de CommonMark](https://commonmark.org/help/).

> **Info**
>
> Una vez aceptados, el estado se almacena localmente y no se volverán a mostrar al usuario en visitas
> posteriores.

#### Idioma

Activa la compatibilidad con varios idiomas en el widget.

![Idioma del widget](/docs/_fern-files/elevenlabs.docs.buildwithfern.com/049e871eb0f609b071599e405c3da76351ee4ea38e52400fc416194930c42327/assets/images/conversational-ai/language.gif)

> **Note**
>
> Para activar la selección de idioma, primero debes [añadir idiomas adicionales](/docs/es/eleven-agents/customization/voice/customization/language) a tu agente.

#### Silenciar

Permite que usuarios silencien su audio en el widget.

![Botón para silenciar del widget](/docs/_fern-img/e6968e4ba057d98857fb41125bb57f92570ed7c49711ce423add1ea558de5919.webp)

Para añadir el botón para silenciar, actívalo en la tarjeta `interface` de la configuración del
`widget` del agente.

![Botón para silenciar del widget](/docs/_fern-img/7db9df78926f3f3b3db7c286d4efc033356ec9b79cabe20670f65a52a624fae8.webp)

#### Página compartible

Personaliza la página de destino pública de tu widget (enlace compartible).

![Página compartible del widget](/docs/_fern-img/9d8b23aa816f4b7d727b3c0511ef91d046796bb57b8299382c53b6bcff746c50.webp)

**Opciones disponibles**

* **Descripción**: proporciona un breve párrafo que explique el propósito de la llamada.

---

## Implementación avanzada

> **Note**
>
> Para una personalización más avanzada, deberías utilizar los [SDK de ElevenAgents ](/docs/es/eleven-api/resources/libraries) con tipado seguro en una aplicación de Next.js, React o Python.

### Herramientas de cliente

Las herramientas de cliente te permiten ampliar la funcionalidad del widget añadiendo detectores de eventos. Esto permite que el widget realice acciones como:

* Redirigir al usuario a una página específica
* Enviar un correo electrónico a tu equipo de soporte
* Redirigir al usuario a una URL externa

Para ver ejemplos de estas herramientas en acción, inicia una llamada con el agente en la esquina inferior derecha de esta página. El [código fuente está disponible en GitHub](https://github.com/elevenlabs/elevenlabs-dx/blob/main/fern/assets/scripts/widget.js) como referencia.

#### Crear una herramienta de cliente

Para crear tu primera herramienta de cliente, sigue la [guía de herramientas de cliente](/docs/es/eleven-agents/customization/tools/client-tools).

#### Ejemplo: crear la herramienta \`redirectToExternalURL\`

![Configuración de la herramienta de cliente](/docs/_fern-img/d800b8c60cba2ab0a1d0aaaecc0652a678998a4161adaf10d83df51b928a7734.webp)

#### Ejemplo de implementación

A continuación tienes un ejemplo de cómo gestionar la herramienta `redirectToExternalURL` activada por el widget en tu código JavaScript:

**`index.js`**

```javascript title="index.js"
document.addEventListener("DOMContentLoaded", () => {
  const widget = document.querySelector("elevenlabs-convai");

  if (widget) {
    // Listen for the widget's "call" event to trigger client-side tools
    widget.addEventListener("elevenlabs-convai:call", (event) => {
      event.detail.config.clientTools = {
        // Note: To use this example, the client tool called "redirectToExternalURL" (case-sensitive) must have been created with the configuration defined above.
        redirectToExternalURL: ({ url }) => {
          window.open(url, "_blank", "noopener,noreferrer");
        },
      };
    });
  }
});
```

> **Info**
>
> Explora nuestros [SDK](/docs/es/eleven-api/resources/libraries) con tipado seguro para implementaciones con React, Next.js y Python.