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

# Workflows

> Formularios guiados multi-step que el agente conduce paso a paso

Un **workflow** es un flujo guiado por pasos secuenciales. El agente le pregunta al usuario en orden los datos que necesita (text, email, telefono, fecha, select, etc.), opcionalmente ejecuta tools en el medio para validar/enriquecer, y al final cierra con una tool de submit que persiste o procesa el resultado.

<Note>
  Disponible desde **Starter**.
</Note>

## Cuando usar workflows vs instrucciones HITL

| Caso                                                                                             | Mejor opcion                                                          |
| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------- |
| El agente necesita confirmar una accion puntual                                                  | [Instruccion con accion HITL](/platform/instructions)                 |
| El agente necesita una decision Si/No o eleccion entre opciones                                  | [Instruccion con accion `confirm` / `select`](/platform/instructions) |
| El agente necesita **multiples campos en orden** (alta de cliente, ticket detallado, cotizacion) | **Workflow**                                                          |
| El flujo tiene que hacer un tool\_call en medio (validar codigo postal, buscar producto)         | **Workflow** con step `tool_call`                                     |

## Como llegar

`thaliq.com/agents/:agentId/workflows` (tab Workflows del agente).

## Anatomia de un workflow

| Campo                     | Descripcion                                                                                  |
| ------------------------- | -------------------------------------------------------------------------------------------- |
| **Nombre**                | Identificador del workflow (ej: "Alta de cliente")                                           |
| **Description**           | Descripcion para humanos                                                                     |
| **Trigger Intent**        | Frase descriptiva del intent que dispara el workflow (ej: *"el usuario quiere registrarse"*) |
| **Steps**                 | Lista ordenada de pasos                                                                      |
| **Completion tool**       | Tool que se invoca al final con los datos recolectados                                       |
| **Output schema**         | Mapeo de campos del workflow a parametros de la completion tool                              |
| **Confirm before submit** | Si pide confirmacion al usuario antes de invocar la completion tool                          |
| **Success message**       | Mensaje que el agente muestra al cerrar exitosamente                                         |
| **Priority**              | Orden vs otros workflows del mismo agente                                                    |

## Tipos de step

| `fieldType` | Que hace                                                                           |
| ----------- | ---------------------------------------------------------------------------------- |
| `text`      | Pregunta texto libre                                                               |
| `email`     | Pregunta email con validacion de formato                                           |
| `phone`     | Pregunta telefono                                                                  |
| `number`    | Pregunta numero                                                                    |
| `date`      | Pregunta fecha                                                                     |
| `textarea`  | Pregunta texto largo                                                               |
| `select`    | Presenta opciones (`options[]`)                                                    |
| `tool_call` | Invoca una tool en medio del flujo (`toolId`, `toolInputMapping`, `storeResultAs`) |
| `display`   | Muestra info al usuario sin pedir input (`displayTemplate`)                        |

### Step tool\_call

Permite ejecutar una tool en el medio del workflow. Util para validar (codigo postal -> ciudad), enriquecer (DNI -> datos del cliente) o consultar (precio del producto antes de cerrar pedido).

| Campo              | Descripcion                                                             |
| ------------------ | ----------------------------------------------------------------------- |
| `toolId`           | Tool a invocar                                                          |
| `toolInputMapping` | Mapeo `{ paramName: fieldName }` desde campos previos                   |
| `storeResultAs`    | Nombre de variable para usar el resultado en steps siguientes           |
| `onError`          | `continue`, `stop`, `retry`                                             |
| `onErrorMessage`   | Mensaje al usuario si la tool falla                                     |
| `resultTemplate`   | Template para mostrar el resultado al usuario (con variables `{{var}}`) |

## Ejemplo: alta de cliente

```
Step 1 (text)        -> name = "Cual es tu nombre completo?"
Step 2 (email)       -> email = "Cual es tu email?"
Step 3 (phone)       -> phone = "Cual es tu telefono?"
Step 4 (select)      -> country = "Pais? [Peru, Mexico, Argentina]"
Step 5 (tool_call)   -> validate_email (toolInputMapping: { email })
                        storeResultAs: emailValid
Step 6 (display)     -> "Email validado: {{emailValid.message}}"
Step 7 (date)        -> birthdate = "Fecha de nacimiento?"
Completion tool      -> create_customer
                        outputSchema: { name, email, phone, country, birthdate }
Confirm before submit: true
Success message: "Cliente {{name}} creado correctamente."
```

## Limites por plan

| Plan       | Workflows max |
| ---------- | :-----------: |
| Free       |       0       |
| Starter    |       3       |
| Growth     |       10      |
| Scale      |       30      |
| Enterprise |   Ilimitados  |

## Buenas practicas

* **Pasos atomicos** — un campo por step, no combines varios datos en un mismo prompt
* **Validacion temprana** — pone los `tool_call` apenas tengas los datos necesarios, no al final
* **Mensajes de error claros** — `onErrorMessage` debe explicar como corregir, no solo decir "fallo"
* **Confirm antes de submit** — si el flujo crea registros o cobra, siempre pide confirmacion final
* **Trigger Intent especifico** — describe el intent en la voz del usuario, no en la del agente

## Que sigue

<CardGroup cols={2}>
  <Card title="Tools" icon="wrench" href="/platform/tools">
    La tool de submit y las tools que usas en `tool_call` steps.
  </Card>

  <Card title="Instrucciones" icon="list-check" href="/platform/instructions">
    Para confirmaciones y consents puntuales (no formularios).
  </Card>
</CardGroup>
