> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ouraicalling.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Crear asistentes

> Crea un nuevo asistente de IA con la configuración especificada

<Warning>
  **API de Famulor 1.0 (legado).** Esta página se aplica únicamente a Famulor 1.0 (`app.famulor.de`) y se conserva por compatibilidad. Para la plataforma actual, usa la [referencia de la API de Famulor 2.0](/es/api-reference/introduction).
</Warning>

> Crea un nuevo asistente de IA con la configuración especificada

Este endpoint te permite crear un nuevo asistente de IA con amplias opciones de configuración.

## Modos de motor

La API admite tres modos de motor con diferentes capacidades:

| Modo         | Descripción                                | Campos obligatorios   |
| ------------ | ------------------------------------------ | --------------------- |
| `pipeline`   | Pipeline clásica STT → LLM → TTS           | `llm_model_id`        |
| `multimodal` | IA multimodal en tiempo real               | `multimodal_model_id` |
| `dualplex`   | "Brain" multimodal + voz TTS personalizada | `multimodal_model_id` |

## Cuerpo de la solicitud

### Campos principales obligatorios

<ParamField body="name" type="string" required>
  El nombre del asistente (máx. 255 caracteres)
</ParamField>

<ParamField body="voice_id" type="integer" required>
  El ID de voz del asistente. Usa el endpoint [Obtener voces](/es/api-v1/assistants/voices) con el parámetro de consulta `mode` para obtener las voces compatibles con tu modo de motor.
</ParamField>

<ParamField body="language_id" type="integer" required>
  El ID de idioma del asistente. Usa el endpoint [Obtener idiomas](/es/api-v1/assistants/languages) para obtener los idiomas disponibles.
</ParamField>

<ParamField body="type" type="string" required>
  El tipo de asistente. Opciones: `inbound`, `outbound`
</ParamField>

<ParamField body="mode" type="string" required>
  El modo de motor. Opciones: `pipeline`, `multimodal`, `dualplex`
</ParamField>

<ParamField body="timezone" type="string" required>
  La zona horaria del asistente (p. ej., "Europe/Berlin", "America/New\_York")
</ParamField>

<ParamField body="initial_message" type="string" required>
  El primer mensaje que dice el asistente al inicio de la llamada (máx. 200 caracteres)
</ParamField>

<ParamField body="system_prompt" type="string" required>
  El prompt del sistema que define el comportamiento y la personalidad del asistente
</ParamField>

### Campos específicos del modo

<ParamField body="llm_model_id" type="integer">
  El ID del modelo LLM. **Obligatorio para el modo `pipeline`.**

  Usa el endpoint [Obtener modelos](/es/api-v1/assistants/models) para obtener los modelos disponibles.
</ParamField>

<ParamField body="multimodal_model_id" type="integer">
  El ID del modelo multimodal. **Obligatorio para los modos `multimodal` y `dualplex`.**

  Usa el endpoint [Obtener modelos](/es/api-v1/assistants/models) para obtener los modelos multimodales disponibles.
</ParamField>

<ParamField body="chat_llm_fallback_id" type="integer">
  ID del modelo LLM de respaldo para llamadas a herramientas en `multimodal`/`dualplex`. Opcional.
</ParamField>

<ParamField body="turn_detection_threshold" type="number">
  Sensibilidad de la detección de turnos en `multimodal`/`dualplex` (0-1). Predeterminado: automático
</ParamField>

### Idiomas secundarios

<ParamField body="secondary_language_ids" type="integer[]">
  Array de IDs de idiomas adicionales que el asistente puede hablar. El asistente reconoce automáticamente el idioma y cambia en consecuencia.

  ```json theme={null} theme={null}
  "secondary_language_ids": [2, 3, 4]
  ```
</ParamField>

### Ajustes de la base de conocimientos

<ParamField body="knowledgebase_id" type="integer">
  El ID de la base de conocimientos que se debe adjuntar a este asistente
</ParamField>

<ParamField body="knowledgebase_mode" type="string">
  Cómo se usa la base de conocimientos. Opciones:

  * `function_call` - la IA llama a una función para buscar (obligatorio para multimodal/dualplex)
  * `prompt` - el conocimiento se inyecta en el prompt (solo pipeline)
</ParamField>

### Organización

<ParamField body="folder_id" type="integer">
  ID de una [carpeta](/es/api-v1/folders/create) en la que colocar este asistente. Debe pertenecer a tu cuenta. Envía `null` para dejar el asistente sin categorizar.
</ParamField>

<ParamField body="label_ids" type="integer[]">
  Array de IDs de [etiquetas](/es/api-v1/labels/create) que se aplicarán a este asistente. Cada etiqueta debe pertenecer a tu cuenta.

  ```json theme={null} theme={null}
  "label_ids": [3, 5]
  ```
</ParamField>

### Número de teléfono

<ParamField body="phone_number_id" type="integer">
  El ID de un número de teléfono para asignar al asistente. Debe pertenecer a tu cuenta.

  <Warning>
    En los asistentes `inbound`, el número de teléfono no debe ser de tipo caller ID y no debe estar ya asignado a otro asistente `inbound`.
  </Warning>
</ParamField>

### Herramientas personalizadas durante la llamada

<ParamField body="tool_ids" type="integer[]">
  Array de IDs de herramientas personalizadas durante la llamada que se deben adjuntar. Cada herramienta debe pertenecer a tu cuenta.

  ```json theme={null} theme={null}
  "tool_ids": [1, 5, 12]
  ```
</ParamField>

### Herramientas integradas

<ParamField body="tools" type="array">
  Array de herramientas integradas. Cada herramienta tiene un campo `type` y campos específicos de la herramienta. En [Actualizar asistente](/es/api-v1/assistants/update), esto **sustituye todas las herramientas integradas existentes**: envía un array vacío `[]` para eliminarlas todas.

  <Expandable title="Tipos de herramienta">
    **call\_transfer** - Transferir la llamada a otro número de teléfono

    * `phone_number` (obligatorio): número de teléfono al que transferir
    * `description`: cuándo transferir la llamada
    * `custom`: si es `true`, la IA puede determinar el número de transferencia de forma dinámica
    * `timezone`: zona horaria para la disponibilidad de la transferencia
    * `warm_transfer`: enviar un mensaje a quien llama antes de transferir (predeterminado: `false`)
    * `warm_transfer_message`: instrucción que indica a la IA qué decir antes de transferir (p. ej., "Indica a quien llama que la llamada se está transfiriendo.")

    **warm\_call\_transfer** - Transferencia asistida con aviso previo al supervisor

    * `supervisor_phone` (obligatorio): número de teléfono al que llamar para la transferencia asistida (p. ej., "+14155552001"). Si `custom_sip` está activado, esto es una dirección SIP o una extensión interna en su lugar.
    * `outbound_phone_id` (obligatorio): ID del número de teléfono usado para llamar al supervisor. Consulta [Obtener números de teléfono](/es/api-v1/assistants/phone-numbers).
    * `description` (obligatorio): cuándo transferir; describe cuándo la IA debe iniciar la transferencia asistida (p. ej., "Transfiere la llamada a un supervisor humano cuando quien llama solicite hablar con una persona real.")
    * `custom_sip`: actívalo para introducir una dirección SIP personalizada o una extensión interna en lugar de un número de teléfono (predeterminado: `false`)
    * `caller_id_mode`: qué número de teléfono ve el supervisor al recibir la llamada. Opciones: `outbound_number` (predeterminado; muestra el número de teléfono saliente), `customer_number` (muestra el número de quien llama), `custom` (muestra un número personalizado)
    * `custom_caller_id`: número de teléfono personalizado que se muestra al supervisor. Solo se usa cuando `caller_id_mode` es `custom`.
    * `hold_music`: audio que se reproduce a quien llama mientras espera. Opciones: `hold_music` (predeterminado; reproduce la música de espera predeterminada), `none` (silencio, sin música)
    * `hold_music_volume`: nivel de volumen de la música de espera, 0-100 (predeterminado: `80`)
    * `hold_message`: mensaje que se dice a quien llama antes de ponerlo en espera (predeterminado: "Por favor, espera mientras te conecto con un supervisor.")
    * `summary_instructions`: instrucciones sobre cómo debe informar la IA al supervisor sobre la llamada (predeterminado: "Presenta la conversación desde tu perspectiva:\n- QUIÉN llama (nombre, empresa si se menciona)\n- POR QUÉ ha llamado (su objetivo o problema)\n- POR QUÉ se necesita una persona en este momento\n\nSé breve (2-3 frases).")
    * `briefing_initial_message`: el primer mensaje que dice la IA al supervisor cuando responde (predeterminado: "¡Hola! Tengo a alguien en línea que necesita tu ayuda. ¿Puedo ponerte al día sobre la situación?")
    * `connected_message`: mensaje que se dice a quien llama después de conectar con el supervisor (predeterminado: "Ya estás conectado con un supervisor. Te dejo con él.")

    **end\_call** - Finalizar la llamada de forma programática

    * `description`: cuándo debe la IA finalizar la llamada

    **dtmf\_input** - Enviar tonos DTMF (entrada de teclado)

    * `description`: cuándo usar la entrada DTMF (para navegación por IVR)

    **collect\_keypad** - Recopilar la entrada de teclado de quien llama

    * `timeout`: segundos de espera para la entrada, 1-30 (predeterminado: `5`)
    * `stop_key`: tecla que finaliza la entrada. Opciones: `#` (predeterminado), `*`

    **calendar\_integration** - Programar citas mediante Cal.com

    * `calcom_api_key` (obligatorio): tu clave de API de Cal.com
    * `calcom_event_slug` (obligatorio): el slug del tipo de evento de Cal.com
    * `calcom_team_slug`: slug del equipo si el evento pertenece a un equipo de Cal.com
    * `calcom_endpoint`: región de la API de Cal.com. Opciones: `us` (predeterminado; `https://api.cal.com`), `eu` (`https://api.cal.eu`), `custom` (usa `calcom_custom_endpoint`)
    * `calcom_custom_endpoint`: URL base personalizada de la API de Cal.com. Solo se usa cuando `calcom_endpoint` es `custom` (p. ej., `https://my-calcom-instance.com`).
    * `calcom_booking_fields`: array de campos de reserva personalizados para el evento. Cada campo tiene: `slug` (obligatorio), `type` (obligatorio, p. ej. "text", "email", "phone", "select"), `label` (obligatorio), `required` (predeterminado: `false`), `options` (array de opciones para campos select)
    * `description`: cuándo ofrecer la programación

    **assistant\_transfer** - Entregar la conversación a otro asistente de IA durante la llamada (cambia la voz, el LLM y el STT al asistente de destino)

    * `assistant_id` (obligatorio): ID del asistente de destino. Debe pertenecer a tu cuenta y no puede ser el asistente que se está actualizando (no se permite la autotransferencia).
    * `description`: cuándo transferir (máx. 500 caracteres, predeterminado: "Transfiere la conversación a este asistente cuando corresponda.")
    * `message_before_transfer`: mensaje opcional que dice la IA antes de cambiar al asistente de destino (máx. 500 caracteres).
    * `speak_transfer_greeting`: si es `true`, el asistente de destino dice su mensaje inicial configurado después de completar la transferencia (predeterminado: `true`)
  </Expandable>

  ```json theme={null} theme={null}
  "tools": [
    {
      "type": "dtmf_input",
      "description": "Navigate IVR when needed"
    },
    {
      "type": "warm_call_transfer",
      "supervisor_phone": "+1234567890",
      "outbound_phone_id": 7,
      "description": "Transfer the call to a human supervisor when the customer requests to speak with a real person.",
      "custom_sip": false,
      "caller_id_mode": "outbound_number",
      "hold_music": "hold_music",
      "hold_music_volume": 80,
      "hold_message": "Please hold while I connect you with a supervisor.",
      "summary_instructions": "Introduce the conversation from your perspective:\n- WHO is calling (name, company if mentioned)\n- WHY they called (their goal or problem)\n- WHY a human is needed at this point\n\nKeep it brief (2-3 sentences).",
      "briefing_initial_message": "Hello! I have a caller on the line who needs your assistance. May I brief you on the situation?",
      "connected_message": "You are now connected with a supervisor. I'll leave you to it."
    },
    {
      "type": "collect_keypad",
      "timeout": 5,
      "stop_key": "#"
    },
    {
      "type": "assistant_transfer",
      "assistant_id": 14765,
      "description": "Transfer to the Support Assistant when the customer needs technical help.",
      "message_before_transfer": "Sure — let me transfer you to our support specialist.",
      "speak_transfer_greeting": true
    },
    {
      "type": "end_call",
      "description": "End call when done"
    }
  ]
  ```

  <Note>
    Cuando [enumeras los asistentes](/es/api-v1/assistants/list), cada herramienta configurada se devuelve como `{ "type": "...", "data": { ... } }`, con los mismos nombres de campo anidados bajo `data` (no en el nivel superior).
  </Note>
</ParamField>

### Ajustes de voz y TTS

<ParamField body="tts_emotion_enabled" type="boolean" default="true">
  Si la síntesis de voz emocional (TTS) está habilitada
</ParamField>

<ParamField body="voice_stability" type="number" default="0.70">
  Estabilidad de la voz (0-1). Más alto = más consistente
</ParamField>

<ParamField body="voice_similarity" type="number" default="0.50">
  Similitud de voz (0-1). Más alto = más cercano al original
</ParamField>

<ParamField body="speech_speed" type="number" default="1.00">
  Multiplicador de velocidad de habla (0.7-1.2)
</ParamField>

<ParamField body="llm_temperature" type="number" default="0.10">
  Temperatura del LLM (0-1). Más bajo = más determinista
</ParamField>

<ParamField body="synthesizer_provider_id" type="integer">
  ID del proveedor de TTS personalizado. Si no se indica, se selecciona automáticamente según el idioma. Consulta [Obtener proveedores de síntesis de voz](/es/api-v1/assistants/synthesizer-providers).
</ParamField>

<ParamField body="transcriber_provider_id" type="integer">
  ID del proveedor de STT personalizado. Si no se indica, se selecciona automáticamente según el idioma. Solo para `pipeline`. Consulta [Obtener proveedores de transcripción](/es/api-v1/assistants/transcriber-providers).
</ParamField>

### Ajustes de comportamiento de la llamada

<ParamField body="allow_interruptions" type="boolean" default="true">
  Si se permiten las interrupciones de quien llama.

  <Warning>No se puede desactivar en `multimodal` y `dualplex`.</Warning>
</ParamField>

<ParamField body="fillers" type="boolean" default="false">
  Si se deben usar frases de relleno en audio durante el procesamiento (p. ej., "eh", "un momento").

  <Warning>Solo disponible en el modo `pipeline`.</Warning>
</ParamField>

<ParamField body="filler_config" type="object">
  Perfiles de frases de relleno personalizados por categoría. Si no se especifica, se usan los valores predeterminados según el idioma. Cada categoría es un array de frases cortas.

  * `positive`: frases de relleno para respuestas afirmativas (p. ej., "¡Genial!", "¡Perfecto!")
  * `negative`: frases de relleno para respuestas negativas o neutras (p. ej., "Mmm.", "Ajá.")
  * `question`: frases de relleno mientras se procesa una pregunta (p. ej., "Buena pregunta.", "Un momento.")
  * `neutral`: frases de relleno para confirmaciones neutras (p. ej., "Vale.", "Entendido.")

  ```json theme={null} theme={null}
  "filler_config": {
    "positive": ["Great!", "Perfect!", "Very good!"],
    "negative": ["Hmm.", "Understood.", "Okay."],
    "question": ["Good question.", "One moment.", "Let me check."],
    "neutral": ["Okay.", "Understood.", "Noted."]
  }
  ```
</ParamField>

<ParamField body="record" type="boolean" default="false">
  Si la llamada debe grabarse
</ParamField>

<ParamField body="enable_noise_cancellation" type="boolean" default="true">
  Si se debe habilitar la cancelación de ruido
</ParamField>

<ParamField body="wait_for_customer" type="boolean" default="false">
  Si es `true`, el asistente espera a que quien llama hable primero
</ParamField>

### Ajustes de tiempo

<ParamField body="max_duration" type="integer" default="600">
  Duración máxima de la llamada en segundos (20-1200)
</ParamField>

<ParamField body="max_silence_duration" type="integer" default="40">
  Duración máxima del silencio antes del reenganche, en segundos (1-360)
</ParamField>

<ParamField body="max_initial_silence_duration" type="integer">
  Silencio máximo justo después de iniciar la llamada antes de finalizarla (1-120 segundos). Opcional.
</ParamField>

<ParamField body="ringing_time" type="integer" default="30">
  Tiempo máximo de timbre antes de cancelar (1-60 segundos)
</ParamField>

### Ajustes de reenganche

<ParamField body="reengagement_interval" type="integer" default="30">
  Intervalo de reenganche en segundos (7-600)
</ParamField>

<ParamField body="reengagement_prompt" type="string">
  Prompt personalizado para los mensajes de reenganche (máx. 1000 caracteres)

  Ejemplo: `"¿Sigues ahí? ¿Tienes alguna otra pregunta?"`
</ParamField>

### Ajustes de buzón de voz

<ParamField body="end_call_on_voicemail" type="boolean" default="true">
  Si se debe finalizar la llamada al detectar un buzón de voz
</ParamField>

<ParamField body="voice_mail_message" type="string">
  Mensaje que se deja en el buzón de voz (máx. 1000 caracteres)
</ParamField>

### Detección de fin de turno

<ParamField body="endpoint_type" type="string" default="vad">
  Tipo de detección de actividad de voz. Opciones: `vad`, `ai`
</ParamField>

<ParamField body="endpoint_sensitivity" type="number" default="0.5">
  Sensibilidad de fin de turno (0-5)
</ParamField>

<ParamField body="interrupt_sensitivity" type="number" default="0.5">
  Sensibilidad a la interrupción (0-5)
</ParamField>

<ParamField body="min_interrupt_words" type="integer">
  Número mínimo de palabras antes de permitir la interrupción (0-10). Defínelo para activarlo.
</ParamField>

### Sonido ambiental

<ParamField body="ambient_sound" type="string">
  Sonido ambiental de fondo. Opciones: `off`, `office`, `city`, `forest`, `crowded_room`, `cafe`, `nature`
</ParamField>

<ParamField body="ambient_sound_volume" type="number" default="0.5">
  Volumen del sonido ambiental (0-1)
</ParamField>

### Configuración del webhook

<ParamField body="is_webhook_active" type="boolean" default="false">
  Si las notificaciones de webhook están habilitadas
</ParamField>

<ParamField body="webhook_url" type="string">
  La URL del webhook para las notificaciones posteriores a la llamada. **Obligatoria si `is_webhook_active` es `true`.**
</ParamField>

<ParamField body="send_webhook_only_on_completed" type="boolean" default="true">
  Si se deben enviar webhooks solo para las llamadas completadas (no para las fallidas o sin respuesta)
</ParamField>

<ParamField body="include_recording_in_webhook" type="boolean" default="true">
  Si se debe incluir la URL de la grabación en el payload del webhook
</ParamField>

### Evaluación posterior a la llamada

<ParamField body="post_call_evaluation" type="boolean" default="true">
  Si la evaluación de IA posterior a la llamada está habilitada
</ParamField>

<ParamField body="post_call_schema" type="array">
  Definición del esquema para la extracción de datos posteriores a la llamada

  <Expandable title="Propiedades de post_call_schema">
    <ParamField body="name" type="string" required>
      Nombre del campo (3-16 caracteres, minúsculas, solo alfanumérico y guiones bajos)
    </ParamField>

    <ParamField body="type" type="string" required>
      Tipo de dato. Opciones: `string`, `number`, `bool`
    </ParamField>

    <ParamField body="description" type="string" required>
      Descripción de lo que representa este campo (3-255 caracteres)
    </ParamField>
  </Expandable>

  ```json theme={null} theme={null}
  "post_call_schema": [
    {"name": "status", "type": "bool", "description": "Whether the call objective was met"},
    {"name": "summary", "type": "string", "description": "Brief summary of the call"}
  ]
  ```
</ParamField>

### Variables

<ParamField body="variables" type="object">
  Pares clave-valor de variables personalizadas que se pueden usar en los prompts mediante `{{variable_name}}`

  ```json theme={null} theme={null}
  "variables": {
    "company_name": "Acme GmbH",
    "product": "Premium Widget",
    "support_email": "support@acme.com"
  }
  ```
</ParamField>

### Ajustes de fin de conversación

<ParamField body="conversation_inactivity_timeout" type="integer" default="30">
  Minutos de inactividad del chat antes de considerar que la conversación ha finalizado (1–1440)
</ParamField>

<ParamField body="conversation_ended_retrigger" type="boolean" default="false">
  Si la conversación se puede reiniciar después de finalizar por inactividad
</ParamField>

<ParamField body="conversation_ended_webhook_url" type="string">
  URL del webhook que se invoca cuando una conversación de chat finaliza por inactividad. Independiente del webhook de llamadas.
</ParamField>

***

## Ejemplos de solicitud

### Asistente en modo `pipeline`

```json theme={null} theme={null}
{
  "name": "Sales Assistant",
  "voice_id": 1,
  "language_id": 1,
  "type": "outbound",
  "mode": "pipeline",
  "timezone": "Europe/Berlin",
  "initial_message": "Hello! How can I assist you today?",
  "system_prompt": "You are a professional sales assistant...",
  "llm_model_id": 2,
  "secondary_language_ids": [2, 3],
  "knowledgebase_id": 1,
  "knowledgebase_mode": "prompt",
  "fillers": true,
  "filler_config": {
    "positive": ["Great!", "Perfect!", "Very good!"],
    "negative": ["Hmm.", "Understood."],
    "question": ["Good question.", "One moment."],
    "neutral": ["Okay.", "Noted.", "Understood."]
  },
  "tool_ids": [1, 5],
  "tools": [
    {"type": "dtmf_input", "description": "Navigate IVR when needed"},
    {
      "type": "warm_call_transfer",
      "supervisor_phone": "+1234567891",
      "outbound_phone_id": 7,
      "description": "Transfer the call to a human supervisor when the customer requests to speak with a real person.",
      "custom_sip": false,
      "caller_id_mode": "outbound_number",
      "hold_music": "hold_music",
      "hold_music_volume": 80,
      "hold_message": "Please hold while I connect you with a supervisor.",
      "summary_instructions": "Introduce the conversation from your perspective:\n- WHO is calling (name, company if mentioned)\n- WHY they called (their goal or problem)\n- WHY a human is needed at this point\n\nKeep it brief (2-3 sentences).",
      "briefing_initial_message": "Hello! I have a caller on the line who needs your assistance. May I brief you on the situation?",
      "connected_message": "You are now connected with a supervisor. I'll leave you to it."
    },
    {"type": "collect_keypad", "timeout": 5, "stop_key": "#"},
    {
      "type": "assistant_transfer",
      "assistant_id": 14765,
      "description": "Transfer to the Support Assistant when the customer needs technical help.",
      "message_before_transfer": "Sure — let me transfer you to our support specialist.",
      "speak_transfer_greeting": true
    },
    {"type": "end_call", "description": "End call when the customer is satisfied"}
  ],
  "reengagement_interval": 20,
  "reengagement_prompt": "Are you still there?"
}
```

### Asistente en modo `multimodal`

```json theme={null} theme={null}
{
  "name": "Support Bot",
  "voice_id": 41,
  "language_id": 1,
  "type": "inbound",
  "mode": "multimodal",
  "timezone": "America/New_York",
  "initial_message": "Hi! Welcome to support.",
  "system_prompt": "You are a helpful support agent...",
  "multimodal_model_id": 1,
  "chat_llm_fallback_id": 2,
  "turn_detection_threshold": 0.7,
  "knowledgebase_id": 1,
  "knowledgebase_mode": "function_call",
  "tts_emotion_enabled": false
}
```

### Asistente en modo `dualplex`

```json theme={null} theme={null}
{
  "name": "Premium Agent",
  "voice_id": 1,
  "language_id": 2,
  "type": "outbound",
  "mode": "dualplex",
  "timezone": "Europe/Berlin",
  "initial_message": "Good day!",
  "system_prompt": "You are a professional assistant...",
  "multimodal_model_id": 4,
  "chat_llm_fallback_id": 2,
  "secondary_language_ids": [1, 3],
  "knowledgebase_id": 1,
  "knowledgebase_mode": "function_call",
  "ambient_sound": "office",
  "ambient_sound_volume": 0.3
}
```

***

## Respuesta

<ResponseField name="message" type="string">
  Mensaje de éxito que confirma la creación del asistente
</ResponseField>

<ResponseField name="data" type="object">
  <Expandable title="propiedades">
    <ResponseField name="id" type="integer">
      El ID único del asistente creado
    </ResponseField>

    <ResponseField name="name" type="string">
      El nombre del asistente
    </ResponseField>

    <ResponseField name="status" type="string">
      El estado actual (`inactive` para los asistentes recién creados)
    </ResponseField>

    <ResponseField name="type" type="string">
      El tipo (`inbound` o `outbound`)
    </ResponseField>

    <ResponseField name="mode" type="string">
      El modo de motor (`pipeline`, `multimodal` o `dualplex`)
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseExample>
  ```json 201 Success Response theme={null} theme={null}
  {
    "message": "Assistant created successfully",
    "data": {
      "id": 789,
      "name": "Sales Assistant",
      "status": "inactive",
      "type": "outbound",
      "mode": "pipeline"
    }
  }
  ```

  ```json 422 Validation Error theme={null} theme={null}
  {
    "message": "Validation failed",
    "errors": {
      "name": ["The name field is required."],
      "voice_id": ["The selected voice is not compatible with the chosen engine type."],
      "knowledgebase_mode": ["Only function_call mode is available for multimodal assistants."]
    }
  }
  ```
</ResponseExample>

***

## Notas

* Todos los campos obligatorios deben proporcionarse para que la creación se realice correctamente
* Usa el endpoint [Obtener voces](/es/api-v1/assistants/voices) con el parámetro de consulta `mode` para obtener las voces compatibles
* Para `multimodal`/`dualplex`, `knowledgebase_mode` debe establecerse en `function_call`
* Para `multimodal`/`dualplex`, `allow_interruptions` está siempre habilitado
* `fillers` solo está disponible en el modo `pipeline`
* Los asistentes nuevos se crean con el estado `inactive` de forma predeterminada
