> ## 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.

# Referencia de nodos

> Cada tipo de nodo del flow builder, con sus campos y su comportamiento

## Inicio

Punto de entrada de cualquier flow. Define el **saludo** y el **modo de saludo**:

* `agent speaks first`: el saludo se dice en cuanto se conecta la llamada (lo habitual en entrantes).
* `user speaks first`: el asistente espera a que hable quien llama (lo habitual en salientes: la persona que contesta dice "¿Hola?" primero).

## Agente

Un agente conversacional con su propio **nombre**, sus **instrucciones** y una **voz alternativa** opcional. La conversación se queda con este agente hasta que hace un handoff por uno de sus bordes de salida.

* Cada borde de salida se convierte en una **herramienta de handoff**; la etiqueta del borde es la descripción que usa el LLM para decidir. Consulta [por qué importan las etiquetas de bordes y agentes](/flow-builder/overview#why-edge-and-agent-labels-matter).
* Si dejas las instrucciones vacías, se usa el prompt del sistema del asistente (Prompt avanzado) como base: el texto del nodo se **añade**, no lo sustituye.
* La voz alternativa permite que cada agente hable con una voz distinta.

## Condición

Un punto de decisión forzada. Escribes una **descripción** de qué se está decidiendo; el LLM tiene que elegir exactamente un borde de salida según las etiquetas de los bordes. Úsala cuando el enrutamiento tenga que resolverse *ahora*, y no cuando al agente le parezca buen momento para hacer un handoff.

## Herramienta

Llama a un **endpoint HTTP** en mitad de la conversación y devuelve el resultado al LLM.

| Campo                                                       | Para qué sirve                                                                                                  |
| ----------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| `name` / `description`                                      | Cómo entiende el LLM qué hace la herramienta                                                                    |
| `url`, `method`, `headers`                                  | La solicitud HTTP (GET/POST/PUT/PATCH/DELETE)                                                                   |
| `params_schema`                                             | JSON Schema de los parámetros que el LLM debe extraer de la conversación                                        |
| `timeout_ms`                                                | Tiempo de espera de la solicitud                                                                                |
| `speak_during`                                              | Aviso que se dice cuando arranca la herramienta                                                                 |
| `async`                                                     | `true` → la conversación sigue mientras la herramienta se ejecuta; el resultado llega después, como seguimiento |
| `filler_phrases`, `filler_delay_sec`, `filler_interval_sec` | Frases rotativas que se dicen durante esperas largas                                                            |

<Tip>
  Para webhooks de ejecución larga (escrituras en el CRM, comprobaciones de disponibilidad), activa `async` y añade dos o tres frases de relleno. Quien llama mantiene una conversación fluida mientras la solicitud se completa en segundo plano.
</Tip>

## Transferencia (ciega)

Transfiere la llamada de inmediato a un **número de teléfono o URI SIP** (SIP REFER), opcionalmente después de un breve **aviso**. El asistente sale de la llamada; no hay ningún briefing para quien la recibe.

## Transferencia cálida

El traspaso premium: a quien llama se le pone **música de espera**, el asistente marca al destino (un empleado), lo pone al día con un **resumen generado por IA** de la conversación hasta ese momento, y solo entonces conecta a ambas partes. El empleado puede aceptar o rechazar la llamada; si hay buzón de voz en el destino, se detecta.

| Campo                    | Para qué sirve                                                                                                                                                   |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `number`                 | Destino (E.164 o URI `sip:`)                                                                                                                                     |
| `announcement_to_caller` | Lo que escucha quien llama antes de quedar en espera                                                                                                             |
| `briefing_instructions`  | Instrucciones extra que se añaden al briefing automático del resumen                                                                                             |
| `ringing_timeout_sec`    | Cuánto tiempo suena el destino (5–120 s, 30 por defecto)                                                                                                         |
| `hold_music`             | Música de espera integrada, activada o desactivada (o tu propio audio de espera configurado)                                                                     |
| `fallback`               | Qué pasa si el destino no responde o rechaza: `continue` sigue la conversación, `end` cuelga la llamada, o `cold_transfer` (transferencia ciega al mismo número) |

Los resultados de la transferencia cálida (`started` / `completed` / `failed`) quedan registrados como eventos de llamada.

## Recopilar

Captura de datos estructurados con **validación, repetición de preguntas y confirmación integradas**: mucho más fiable que confiar en que el LLM transcriba bien una dirección de correo.

* **Tipos:** `name`, `email`, `phone`, `address`, `date of birth`, `dtmf` (dígitos por teclado), `credit_card` (tarjeta de pago).
* **Variable** (obligatorio): el resultado se guarda con este nombre y se incluye en el webhook `call.completed`.
* **Prompt**: instrucciones extra opcionales, además del diálogo integrado.
* **Intentos máximos** (3 por defecto): tras el fallo final, el flow sigue por el borde etiquetado `failed`, si existe.
* **Dígitos DTMF**: para el tipo `dtmf`, cuántos dígitos hay que recoger.
* **Tarjeta de pago** (`credit_card`): requiere la herramienta integrada **Recopilar tarjeta de pago** asignada al asistente (sujeta al plan), con una cuenta de Stripe conectada y seleccionada. Durante la llamada, el agente recoge los datos de la tarjeta de forma segura; la plataforma crea un método de pago de Stripe en esa cuenta. Solo se guardan `card_last4` / `card_brand` / `stripe_payment_method_id`, nunca el PAN ni el CVV. Conecta Stripe primero en Herramientas → App Store. Usa después el ID del método de pago para cobrar a través de Stripe.

## DTMF

Le pide a quien llama que introduzca una cantidad fija de **dígitos en el teclado del teléfono** (30 s de tiempo de espera). Usa `collect` con el tipo `dtmf` cuando quieras validación y reintentos; usa este nodo más simple para menús rápidos de opciones.

## Fin

Termina la llamada, diciendo antes una **despedida** si quieres. Da siempre a tus flows un final explícito: genera estados de llamada limpios y evita que la conversación siga a la deriva una vez terminado su trabajo.

## Herramienta en línea vs. herramienta asignada

Los nodos **Herramienta**, **Transferencia**, **Transferencia cálida**, **DTMF** y **Recopilar (tipo `dtmf`)** tienen todos un interruptor de **Origen de la herramienta** en la parte superior de su panel de configuración:

* **En línea** (por defecto): configuras los campos del nodo directamente, tal como se describe arriba. Es el comportamiento original; nada cambia para los flows ya existentes.
* **Herramienta asignada**: en vez de los campos en línea, el nodo reutiliza una **herramienta reutilizable** ya asignada a este asistente (creada en la [página de Herramientas](/assistants/built-in-tools) y asignada en **Configuración → Herramientas**). Los campos en línea se mantienen, pero se ignoran mientras este modo está activo.

El selector está **filtrado por tipo**, así que solo puedes elegir una herramienta que coincida con el nodo:

| Nodo                    | Tipo de herramienta asignada                                                                                                                         |
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Herramienta             | cualquier herramienta asignada: **API**, **MCP** o **Integrada** (MCP expone en este punto del flow todo el conjunto de herramientas de su servidor) |
| Transferencia           | **Transferencia de llamada** integrada (`call_transfer`)                                                                                             |
| Transferencia cálida    | **Transferencia cálida** integrada (`warm_call_transfer`)                                                                                            |
| DTMF                    | **Entrada DTMF** integrada (`dtmf_input`)                                                                                                            |
| Recopilar (tipo `dtmf`) | **Recopilar teclado** integrada (`collect_keypad`)                                                                                                   |

<Note>
  El origen **Herramienta asignada** solo aparece en nodos Recopilar de tipo `dtmf`; los demás tipos de recopilación (`name`, `email`, `phone`, `address`, `date of birth`) no tienen un equivalente integrado y se quedan solo en línea. Si cambias un nodo Recopilar para que deje de ser `dtmf`, se borra automáticamente cualquier herramienta asignada.
</Note>

Si más adelante una herramienta asignada se desasigna, se elimina, se desactiva o tiene el subtipo equivocado, el nodo **recurre a su configuración en línea** en el momento de la llamada (y registra un evento de llamada `flow_tool_ref_unresolved`); una llamada nunca falla por culpa de una referencia de herramienta que falta.

<Tip>
  Usa **Herramienta asignada** cuando el mismo número de transferencia, mensaje de teclado o endpoint de API se repite en muchos flows o asistentes: lo editas una vez en la página de Herramientas y se actualiza en todos los nodos que lo referencian. Usa **En línea** para un comportamiento puntual, específico de un flow.
</Tip>
