Design on the canvas
The canvas is where you draw the process once: which steps it has, who does each one, and which way the case goes depending on what happens. Before publishing you can validate it and simulate sample cases without running robots or creating tasks.
Create a flow
Section titled “Create a flow”- In Centro › Flujos › Flujos (Center › Flows › Flows), click Nuevo flujo (New flow).
- Enter the Nombre (Name), for example
Invoice approval, and optionally a Descripción (Description): what it solves, where cases come from and who is involved. - Click Crear y abrir el lienzo (Create and open the canvas). The flow starts with a connected Inicio (Start) and Fin (End); you add the steps on the canvas.
The list shows whether each flow is Sin publicar (Unpublished), Publicada (Published, with its version) or has Cambios sin publicar (Unpublished changes). You can filter by Activas, Archivadas or Todas (Active, Archived, All) and search by name.
The canvas
Section titled “The canvas”- Palette (left). Drag an element onto the canvas, or click it to drop it in the middle. It is grouped into Tareas (Tasks: Robot, Persona, IA, Integración), Decisiones (Decisions: Tabla de decisión), Esperas (Waits: Esperar, Esperar evento), Compuertas (Gateways: Exclusiva · una ruta, Paralela · todas), Eventos (Events: Inicio, Fin) and Organización (Carril, a lane).
- Diagram (center). Connect two steps by dragging from the edge of one to the other; while you drag, a guide line shows where it will land and the target step lights up if the connection is valid. To change where a connection goes, drag its tip to another step. If the connection makes no sense (a step to itself, an exit from an end, an entry into the start, a seventh decision for a person, a repeated connection), the canvas tells you why it is not allowed. On a step with a single exit, connecting again replaces the previous one, and
Ctrl+Zbrings it back. The toolbar has undo and redo, copy, cut, paste and delete, Organizar los pasos (auto-arrange), Ver todo (fit to screen), zoom in and out, and download or import the definition as JSON. - Properties (right). When you pick a step, a connection or a lane, you see its properties in collapsible sections. With nothing selected, the panel shows the flow itself: general data, variables, lanes and published versions.
Saving. Click Guardar (Save) or press Ctrl+S. The header reads Sin guardar (Unsaved) while you have changes and Guardado · rev. N (Saved) once they are stored. If someone else saved the same draft while you were editing, Zoan Cloud lets you choose: download your changes as JSON, reload what was saved, or save yours on top.
The steps
Section titled “The steps”Start and end
Section titled “Start and end”- Inicio (Start): where each case begins, with the variables marked as input. There is only one.
- Fin (End): where a path finishes. There can be several. Under Resultado del caso (Case result) you pick Completado (Completed) or Rechazado por una regla de negocio (Rejected by a business rule); if the case came from a queue, its item is closed with that result.
Runs a published process and keeps what it returns.
| Section | What you set |
|---|---|
| Proceso (Process) | The Proceso publicado (published process) that runs in this step. Only the environment’s active processes are listed. |
| Datos (Data) | Entradas del robot (robot inputs): the value of each process input, fixed or with {{variable}}. Salidas → variables del flujo (outputs → flow variables): which variable stores each output (+ creates a variable with that name). If the process does not publish its contract, you map inputs and outputs by name. When a variable’s type does not match the input’s, see Input types. |
| Dónde corre (Where it runs) | The Agente (agent), or Cualquier agente compatible (any compatible agent), and the Sesión de robot (robot session), required for a Windows process to run unattended. The headless worker does not use a session. |
| Tiempos y errores (Timing and errors) | Límite (minutos) (time limit): when it runs out, the step becomes an incident so someone can decide; the robot is not stopped. Intentos (attempts) and Espera entre intentos (segundos) (wait between attempts). Reintentar también ante error técnico del robot (also retry on a technical robot error): turn it on only if the robot can be repeated without duplicating anything. Atender los errores de negocio en otro camino (handle business errors on another path): see Business errors on another route. |
| Salida (Next) | The step that follows. |
With more than one attempt, Zoan Cloud relaunches the robot on its own only when it is certain the robot never ran (for example, no agent was connected) or, if you turned it on, after a technical error. A robot that might still be running is never relaunched automatically: the step becomes an incident for a person to decide. If no robot is free, the step waits and tries again; after 24 hours without one available, it becomes an incident. If Windows rejects the account of the robot session, the step is not retried on its own, so the account does not get locked: it becomes an incident with the action Actualizar la sesión de robot (Update the robot session).
Business errors on another route
Section titled “Business errors on another route”When the robot spots a case it should not process (an invalid tax ID, a duplicate order), you usually want the case to take another route, for example to a person who reviews it, instead of stopping as an incident.
- In the robot step, turn on Atender los errores de negocio en otro camino.
- Drag from the step’s lightning bolt (bottom right, «Error de negocio: arrastra desde aquí a quien lo atiende», business error: drag from here to whoever handles it) to the step that handles it.
- In the robot, flag those cases with Throw and the Excepción de negocio (business exception) error type (
BusinessRuleException).
A technical error never takes that route: it follows the step’s retry rules. If the step does not have an error route, a business error leaves the case as an incident so someone can decide whether to skip it or repeat it; it is never retried on its own, because repeating it would give the same result.
The error travels with the case. Every step on the error route, not just the first one, can use what the robot said with {{_error.mensaje}}, {{_error.tipo}} and {{_error.actividad}} (message, type, activity): the title of the person’s task, a notification through an API, a gateway that decides by type, even on retries. The error stops being available when the route merges with others in a parallel gateway, and a new business error replaces the previous one. If a person skips a step that failed with a business error, the next step receives it too.
Person
Section titled “Person”Creates a task in the Tareas (Tasks) inbox, and the case follows the decision.
| Section | What you set |
|---|---|
| Tarea (Task) | Título de la tarea (task title, required) and Detalle para quien decide (details for the decision maker). Use {{variable}} to show case data, for example Review invoice {{invoice_number}}. |
| Quién decide (Who decides) | Un rol (a role), Una persona (a person), Un grupo (a group), El responsable de un grupo (a group’s owner), Desde una variable del caso (from a case variable: the output of a decision table or a form field, read as a group, its owner or a person’s email) or El responsable del grupo de quien inició (the owner of the initiator’s group). No puede decidir quien inició el caso (on by default for approvals) leaves the case’s initiator out. See Groups, recipients and substitutes. |
| Decisiones (Decisions) | Between 2 and 6. Each decision is an exit of the step (for example, Approve and Reject) and leads to a different step. Under Si vence el plazo, seguir por… (if the deadline passes, continue to…) you choose where the case goes if nobody decides in time; with Nadie: queda como incidente (nobody: it becomes an incident), it stops so someone can handle it. |
| Formulario (Form) | Under Qué datos pide (what data it asks for) you choose: Campos sueltos (individual fields: Texto, Número, Fecha or Lista, each optional or Obligatorio, required, up to 20), De la biblioteca (from the library: a published form, pinned to its version) or Diseñado aquí (designed here: a form just for this step). See Use a form in a flow. Under Guardar la respuesta en (save the answer in) you pick the variable that stores the decision, the comment and the fields, for later steps to use. |
| Plazo y prioridad (Deadline and priority) | Plazo (horas) (deadline in hours); left empty, the organization’s default applies. Prioridad Normal or Alta (high). |
The variable that stores the answer becomes protected: it holds a person’s decision, and in the monitor only someone with the override permission can change it. The default deadline for these tasks is set in Administración › Organización y SSO › Plazos de atención de tareas (SLA) › Tareas de flujos (h) (Administration › Organization and SSO › task SLAs › flow tasks).
In the inbox, the task shows Del flujo «name» (from the flow), and once decided, the case carries on with that decision.
Uses a language model to read, classify or draft. Your plan must include AI Workflows.
| Section | What you set |
|---|---|
| Qué hace (What it does) | Modo (mode): Extraer datos con un esquema (extract data with a schema), Clasificar en categorías (classify into categories) or Redactar un texto (draft a text). Instrucción (instruction, required): what the model should do, in one or two sentences; it does not accept variables. Contexto (context): the text the AI should read, with {{variable}}. Depending on the mode, Categorías (one per line) or Esquema de salida (JSON Schema). |
| Conocimiento y modelo (Knowledge and model) | The environment’s Bases de conocimiento (knowledge bases) and Qué buscar (what to search for) in them. Modelo and Cuenta del modelo (model account); left empty, the environment’s defaults apply. |
| Salidas (Outputs) | Which field of the answer goes to which variable. Tick opc. if the field may be missing without failing the step. |
| Reintentos (Retries) | Intentos and Espera (s). If the model does not answer or does not return the requested shape, the step retries on its own. Unusable input data is not retried: it becomes an incident to review. |
The fields each mode returns are: when classifying, categoria and motivo (category and reason); when drafting, texto; when extracting, the fields of your schema.
The cost of these steps shows up in Consumo de IA (AI usage), under the Flujos (Flows) breakdown. If the plan’s AI budget runs out, the step waits and tries again later.
Integration
Section titled “Integration”Calls an operation of an API you connected in Centro › Recursos › Integraciones (Center › Resources › Integrations) with its OpenAPI specification (see API actions).
| Section | What you set |
|---|---|
| Operación (Operation) | The Integración and the Operación (method and path). Authentication comes from the integration’s connection. |
| Datos (Data) | The operation’s Entradas (inputs, fixed or with {{variable}}) and Salidas → variables (outputs → variables). |
| Reintentos (Retries) | Intentos and Espera (s). |
Outputs are read from the response: if it is an object, by each field’s name (dotted paths such as customer.id work); if it is a list, it arrives as items; if it is text, as texto. The HTTP status code is in _status.
On POST, PUT, PATCH and DELETE, Zoan Cloud also sends an Idempotency-Key header that stays the same for the step, so a retry does not repeat the effect on a system that honors it. If one of those calls is cut off without an answer, or the server replies with an internal error (5xx), the step becomes an incident instead of repeating itself, because there is no way to know whether it went through.
Gateways
Section titled “Gateways”- Exclusiva · una ruta (exclusive, one route). With two or more exits, it decides: under Rutas, en orden (routes, in order), conditions are checked top to bottom and the case takes the first one that holds; if none does, it takes the Ruta por defecto (cuando ninguna otra se cumple) (default route, when no other holds). With a single exit, it joins paths that split earlier.
- Paralela · todas (parallel, all). As a split, the case follows all its exits at once (for example, one robot enters the invoice while another notifies the supplier). As a join, it waits for every branch to arrive before moving on.
A gateway cannot split and join at the same time: if you need both, use two gateways.
- Esperar (wait). Pauses the case for a period (minutes, hours or days, optionally in business hours), until a fixed date or until the date in a variable.
- Esperar evento (wait for event). Pauses the case until a named signal arrives from the portal, the API or a robot, with its data and an optional time limit with a Vencida (expired) exit.
While it waits, the case ties up no robots or workers. See Waits.
Connections and conditions
Section titled “Connections and conditions”When you select a connection you see where it starts and ends, and you can give it an Etiqueta (label), such as “Yes”. Depending on where it starts:
- From an exclusive gateway: you set its condition or mark it as the default route.
- From a person task: it is a Decisión, or you mark it as Se toma al vencer el plazo de la tarea (taken when the task deadline passes).
- From a robot’s lightning bolt: it is the Error de negocio (business error) route.
Conditions are built without writing code. At the top you choose whether the route Se toma si (is taken if) the condition se cumple (holds) or no se cumple (does not hold), and whether todo (all rows) or algo (any one row) must hold. Each row is variable · comparison · value:
- Comparar con (compare with) a fixed valor (value) or another case variable. That way you compare, for example,
totalis greater thanapproval_limitwithout writing the limit into the diagram. - The sí/no (yes/no) button on each row inverts it: the row holds when that comparison does not hold.
- The variable can be a field inside an object, such as
respuesta.fields.total(the answer to a person task’s form). - Text in quotes is compared as text.
| Comparison | Example |
|---|---|
| es igual a / es distinto de (equals / differs from) | status equals approved |
| es mayor que / es mayor o igual que / es menor que / es menor o igual que (greater / less than, or equal) | total is greater than 1000 |
| contiene (contains) | notes contains urgent |
| es uno de (separados por coma) (is one of, comma-separated) | country is one of CO, MX, PE |
| tiene valor / está vacía / es verdadera (has a value / is empty / is true) | needs_approval is true |
Numbers are compared as numbers and dates as dates. If the variable does not exist or has a different type, that comparison counts as not met (and therefore, inverted with no se cumple, it does hold) and a notice is added to the case events. If the other variable you compare with does not exist, the comparison does not hold. Conditions with nested groups are edited with Editar como JSON (Edit as JSON): all is all, any is any, not is does not hold, and each leaf compares var with value or with another variable in ref.
Lanes are horizontal bands per actor that make the process easy to read at a glance. Add them from the palette (Carril) or from the panel’s Carriles section. Each has a name, Quién trabaja aquí (who works here: Robots, Personas, IA, Integraciones or Sistema) and an Alto (height); reorder them with Subir and Bajar (up, down). A step belongs to the lane its center falls in. Lanes do not change how the case runs.
Variables and templates
Section titled “Variables and templates”Variables are the data that travels with each case. You declare them in the flow panel (nothing selected), Variables section:
- Nombre (name): lowercase letters, digits and
_, starting with a letter (for example,invoice_number). - Tipo (type): Texto, Número, Entero, Sí/No, Fecha, Fecha y hora, Objeto, Lista or Archivo (text, number, integer, yes/no, date, date and time, object, list, file).
- Se pide al iniciar (asked at start): the variable is an input of the case; with Obligatoria (required), the case cannot start without it. Steps fill in the other variables.
- Descripción: shown on the start form.
In the General section you define the Título de cada caso (title of each case) and the Clave de negocio (business key), for example Invoice {{invoice_number}} · {{supplier}} and {{invoice_number}}. With a title and a key you can find each case in the monitor without opening it.
Templates. In any field that supports them, {{variable}} is replaced with the case’s value; {{customer.name}} reads a field inside an object. If the field is exactly one variable, the value goes through as is (a number stays a number); with text around it, the result is text. If the variable does not exist, it comes out empty and a notice is added to the case events. There is also read-only data:
| Template | Value |
|---|---|
{{_instancia.id}} | The case ID. |
{{_instancia.clave}} | The case’s business key. |
{{_paso.clave}} | The step’s idempotency key (the same across its automatic retries). |
{{_paso.intento}} | The step’s attempt number. |
{{_error.mensaje}}, {{_error.tipo}}, {{_error.actividad}} | In the steps of a business error route: the robot’s message, the error type (for example, business) and the activity where it happened. |
Validate, simulate and publish
Section titled “Validate, simulate and publish”- Validar (Validate) saves the draft and checks it. The result shows up in the canvas toolbar (for example, “1 error · 2 avisos”); clicking a problem takes you to the step. Errors block publishing: a step with no process, a person task with no assignee or fewer than two decisions, a variable used without being declared, a step that never reaches an end. Warnings can be accepted.
- Simular (Simulate) walks the draft with sample data, without running robots or creating tasks. You fill in the Datos de entrada (input data) and say what each step returns: whether the robot Termina bien (finishes fine, with its outputs as JSON), raises an Error de negocio or an Error técnico; what each person decides, or Vence sin decidir (expires undecided); what the AI or the API answers. You get the path, the incidents and the Variables al final (final variables), and the path is highlighted on the canvas.
- Publicar (Publish) saves and validates the draft and creates a new version with your Notas de la versión (release notes). If there are warnings, you can Publicar con estos avisos (publish with these warnings). Cases already running stay on their version; new ones use this one, and the draft remains free for further edits.
The panel’s Versiones publicadas (published versions) section lists each version with its date and notes, marks the vigente (current) one, and lets you download it as JSON or load it into the draft to roll back.
Next steps
Section titled “Next steps”- Start cases: by hand, through the API, with a trigger or from a queue.
- Robots in a flow: how to prepare the process behind a robot step.