- Introducción
- Primeros pasos con los agentes de UiPath
- Primeros pasos con los agentes de UiPath utilizando LangGraph
- Crear un agente de código bajo en Studio Web
- Añadir herramientas a tu agente de UiPath
- Primeros pasos con UiPath Maestro Flow
Probar el flujo
Pruebe el flujo de observación de precios utilizando Depurar para cargarlo y ejecutarlo en su cuenta de UiPath Cloud como una sesión de depuración para comprobar las salidas.
Probaremos nuestro flujo ejecutándolo dos veces para probar cada una de las ramas en función del tipo de cambio actual. Una ejecución de depuración ejecuta el flujo de la misma manera que lo haría si lo hubiésemos publicado e implementado. El nodo de solicitud HTTP llama a Frankfurter, el nodo de script ejecuta el JavaScript y el nodo de decisión toma una de sus dos rutas. Las ejecuciones de depuración se ejecutan en el lado del servidor en el tenant en el que has iniciado sesión, y se ejecutan en la nube en lugar de en tu máquina.
Una ejecución de depuración es una ejecución real. La llamada a la API se produce y cualquier efecto secundario que tenga un flujo es un efecto secundario real. Frankfurter es un servicio público de solo lectura, por lo que una ejecución de Observación de precios no incurre en ningún coste por la llamada a la API de Frankfurter, pero trata una ejecución de depuración como tráfico de producción una vez que un flujo escribe en un sistema.
Paso 4: probar el flujo
Hay dos formas de probar el flujo: utilizando el botón Depurar en VS Code (Opción 1) o utilizando los comandos CLI (Opción 2). Puedes elegir una opción o ambas, dependiendo de tu preferencia.
Las tasas se mueven durante cada día de negociación, y la API de Frankfurt solo proporciona la tasa final para los días históricos. Tus números diferirán de los de este tutorial dependiendo de cuándo llames a la API.
Opción 1: usar VS Code para probar el flujo
-
Selecciona Depurar en la barra de herramientas del lienzo (el botón de reproducción - ▶️).
-
Proporciona valores para las tres entradas del desencadenador cuando se te solicite: los valores predeterminados que establecimos anteriormente deben establecerse para cada una.
-
Observa el panel de ejecución en la parte inferior del editor a medida que se rellena el seguimiento, nodo por nodo.
Cada nodo muestra un indicador de éxito o error cuando finaliza la ejecución. Así es como debería ser la ejecución correcta cuando el nodo endAlert1 era el nodo final:
Sigue los mismos pasos para probar el nodo endNoAction1, cambiando alertThreshold a un valor por debajo de la tasa actual (esto variará con el tiempo). Así es como se verá una ejecución correcta cuando se utiliza 0.1 para confirmar la opción "Sin acción" rama:
Opción 2: utilizar la CLI para probar el flujo
Para realizar una ejecución de depuración desde el terminal con el comando uip , debemos ejecutarlo dos veces para probar ambas ramas. Utiliza lo siguiente del directorio de nivel superior de la solución, no el directorio PriceWatch para probar primero la rama Alert :
uip maestro flow debug PriceWatch \
--inputs '{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.9}' \
--output table \
--output-filter 'elementExecutions'
uip maestro flow debug PriceWatch \
--inputs '{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.9}' \
--output table \
--output-filter 'elementExecutions'
La respuesta debe terminar con "Debug completed with status: Completed" y lleva un ID de instancia para correlacionar registros y seguimientos.
Con los valores anteriores, la tasa USD a EUR era 0.86111 en el momento de escribir esto, que está por debajo de 0.9, por lo que el nodo de decisión toma la ruta de alerta y la ejecución termina en endAlert1. En la siguiente respuesta, Data.elementExecutions contiene esta información, y solo la mostramos añadiendo --output-filter 'elementExecutions' al comando:
elementId | elementType | status | startedAt | completedAt
--------------------------------------|------------------|-----------|------------------------------|-----------------------------
start | StartEvent | Completed | 2026-09-09T14:45:11.1800316Z | 2026-09-09T14:45:11.5424344Z
fetchRate1 | SubProcess | Completed | 2026-09-09T14:45:12.0084766Z | 2026-09-09T14:45:15.4191562Z
_Implicit_StartEvent_fetchRate1 | StartEvent | Completed | 2026-09-09T14:45:12.5480076Z | 2026-09-09T14:45:12.811941Z
_Implicit_HttpTask_fetchRate1 | SendTask | Completed | 2026-09-09T14:45:13.1623209Z | 2026-09-09T14:45:14.0727369Z
_Implicit_EndEvent_Default_fetchRate1 | EndEvent | Completed | 2026-09-09T14:45:14.6862017Z | 2026-09-09T14:45:14.9360746Z
reshapeRate1 | ScriptTask | Completed | 2026-09-09T14:45:15.6366731Z | 2026-09-09T14:45:15.973426Z
belowThreshold1 | InclusiveGateway | Completed | 2026-09-09T14:45:16.3758949Z | 2026-09-09T14:45:16.4578181Z
endAlert1 | EndEvent | Completed | 2026-09-09T14:45:16.7053678Z | 2026-09-09T14:45:17.0385488Z
elementId | elementType | status | startedAt | completedAt
--------------------------------------|------------------|-----------|------------------------------|-----------------------------
start | StartEvent | Completed | 2026-09-09T14:45:11.1800316Z | 2026-09-09T14:45:11.5424344Z
fetchRate1 | SubProcess | Completed | 2026-09-09T14:45:12.0084766Z | 2026-09-09T14:45:15.4191562Z
_Implicit_StartEvent_fetchRate1 | StartEvent | Completed | 2026-09-09T14:45:12.5480076Z | 2026-09-09T14:45:12.811941Z
_Implicit_HttpTask_fetchRate1 | SendTask | Completed | 2026-09-09T14:45:13.1623209Z | 2026-09-09T14:45:14.0727369Z
_Implicit_EndEvent_Default_fetchRate1 | EndEvent | Completed | 2026-09-09T14:45:14.6862017Z | 2026-09-09T14:45:14.9360746Z
reshapeRate1 | ScriptTask | Completed | 2026-09-09T14:45:15.6366731Z | 2026-09-09T14:45:15.973426Z
belowThreshold1 | InclusiveGateway | Completed | 2026-09-09T14:45:16.3758949Z | 2026-09-09T14:45:16.4578181Z
endAlert1 | EndEvent | Completed | 2026-09-09T14:45:16.7053678Z | 2026-09-09T14:45:17.0385488Z
Solo aparece un Nodo final, que es la forma de confirmar qué rama se ejecutó. Las entradas _Implicit_* anidadas bajo fetchRate1 son el nodo HTTP gestionado que se expande en un subproceso.
Para ver lo que contenía cada variable global (en Data.variables.globals) cuando finalizó la ejecución, ejecútala de nuevo sin la opción --output table para mostrar la salida JSON completa:
uip maestro flow debug PriceWatch \
--inputs '{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.9}' \
--output-filter 'variables.globals'
uip maestro flow debug PriceWatch \
--inputs '{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.9}' \
--output-filter 'variables.globals'
Busca estas secciones en el JSON devuelto, específicamente la línea con "belowThreshold": true.
{
"reshapeRate1.output": {
"pair": "USD/EUR",
"rate": 0.85946,
"asOf": "2026-09-10",
"belowThreshold": true
},
"start.output.baseCurrency": "USD",
"start.output.quoteCurrency": "EUR",
"start.output.alertThreshold": 0.9,
"watchResult": {
"pair": "USD/EUR",
"rate": 0.85946,
"asOf": "2026-09-10",
"belowThreshold": true
}
}
{
"reshapeRate1.output": {
"pair": "USD/EUR",
"rate": 0.85946,
"asOf": "2026-09-10",
"belowThreshold": true
},
"start.output.baseCurrency": "USD",
"start.output.quoteCurrency": "EUR",
"start.output.alertThreshold": 0.9,
"watchResult": {
"pair": "USD/EUR",
"rate": 0.85946,
"asOf": "2026-09-10",
"belowThreshold": true
}
}
--output-filter 'elementExecutions' y --output-filter 'variables.globals' se incluyen en los comandos anteriores para devolver solo la parte de la respuesta que nos interesa: si la omites, verás la respuesta JSON completa con todos los detalles. El parámetro --output table se utiliza en el primer comando para formatear también la salida JSON en una tabla de texto fácilmente legible. No se utiliza en el segundo comando debido a los campos JSON anidados, sería difícil de leer: pruébalo tú mismo añadiendo --output table.
Ahora probaremos la rama No action . Para tomar la ruta falsa deliberadamente, realiza otra depuración con alertThreshold establecido en 0.1. La tasa está entonces por encima del umbral, belowThreshold es false y la ejecución termina en endNoAction1.
uip maestro flow debug PriceWatch \
--inputs '{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.1}' \
--output table \
--output-filter 'elementExecutions'
uip maestro flow debug PriceWatch \
--inputs '{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.1}' \
--output table \
--output-filter 'elementExecutions'
Si observas el resultado a continuación, en la última línea, puedes ver que se ejecutó endNoAction1 en lugar de endAlert:
elementId | elementType | status | startedAt | completedAt
--------------------------------------|------------------|-----------|------------------------------|-----------------------------
start | StartEvent | Completed | 2026-09-09T19:35:16.9481084Z | 2026-09-09T19:35:17.8183474Z
fetchRate1 | SubProcess | Completed | 2026-09-09T19:35:18.2733427Z | 2026-09-09T19:35:23.0056514Z
_Implicit_StartEvent_fetchRate1 | StartEvent | Completed | 2026-09-09T19:35:19.2552152Z | 2026-09-09T19:35:19.6644838Z
_Implicit_HttpTask_fetchRate1 | SendTask | Completed | 2026-09-09T19:35:20.0168686Z | 2026-09-09T19:35:21.5714821Z
_Implicit_EndEvent_Default_fetchRate1 | EndEvent | Completed | 2026-09-09T19:35:21.8821048Z | 2026-09-09T19:35:22.2081364Z
reshapeRate1 | ScriptTask | Completed | 2026-09-09T19:35:23.7685642Z | 2026-09-09T19:35:24.3541723Z
belowThreshold1 | InclusiveGateway | Completed | 2026-09-09T19:35:24.6927348Z | 2026-09-09T19:35:24.8111957Z
endNoAction1 | EndEvent | Completed | 2026-09-09T19:35:25.393084Z | 2026-09-09T19:35:26.086936Z
elementId | elementType | status | startedAt | completedAt
--------------------------------------|------------------|-----------|------------------------------|-----------------------------
start | StartEvent | Completed | 2026-09-09T19:35:16.9481084Z | 2026-09-09T19:35:17.8183474Z
fetchRate1 | SubProcess | Completed | 2026-09-09T19:35:18.2733427Z | 2026-09-09T19:35:23.0056514Z
_Implicit_StartEvent_fetchRate1 | StartEvent | Completed | 2026-09-09T19:35:19.2552152Z | 2026-09-09T19:35:19.6644838Z
_Implicit_HttpTask_fetchRate1 | SendTask | Completed | 2026-09-09T19:35:20.0168686Z | 2026-09-09T19:35:21.5714821Z
_Implicit_EndEvent_Default_fetchRate1 | EndEvent | Completed | 2026-09-09T19:35:21.8821048Z | 2026-09-09T19:35:22.2081364Z
reshapeRate1 | ScriptTask | Completed | 2026-09-09T19:35:23.7685642Z | 2026-09-09T19:35:24.3541723Z
belowThreshold1 | InclusiveGateway | Completed | 2026-09-09T19:35:24.6927348Z | 2026-09-09T19:35:24.8111957Z
endNoAction1 | EndEvent | Completed | 2026-09-09T19:35:25.393084Z | 2026-09-09T19:35:26.086936Z
Ejecuta el siguiente comando para recuperar los valores establecidos para variables.globals:
uip maestro flow debug PriceWatch --output-filter 'variables.globals' --inputs \
'{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.1}'
uip maestro flow debug PriceWatch --output-filter 'variables.globals' --inputs \
'{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.1}'
Busca estas secciones en el JSON devuelto, específicamente la línea con "belowThreshold": false:
{
"reshapeRate1.output": {
"pair": "USD/EUR",
"rate": 0.85946,
"asOf": "2026-09-10",
"belowThreshold": false
},
"start.output.baseCurrency": "USD",
"start.output.quoteCurrency": "EUR",
"start.output.alertThreshold": 0.1,
"watchResult": {
"pair": "USD/EUR",
"rate": 0.85946,
"asOf": "2026-09-10",
"belowThreshold": false
}
}
{
"reshapeRate1.output": {
"pair": "USD/EUR",
"rate": 0.85946,
"asOf": "2026-09-10",
"belowThreshold": false
},
"start.output.baseCurrency": "USD",
"start.output.quoteCurrency": "EUR",
"start.output.alertThreshold": 0.1,
"watchResult": {
"pair": "USD/EUR",
"rate": 0.85946,
"asOf": "2026-09-10",
"belowThreshold": false
}
}
Ejecutar ambas rutas una vez es la forma más rápida de confirmar que el nodo de decisión está conectado correctamente en ambas ramas. Confirma que la segunda ejecución termina en endNoAction1 y que watchResult vuelve con belowThreshold establecido en false.
(Opcional) Prueba con una moneda diferente
Pruebe una tercera ejecución con una moneda de cotización diferente, como "quoteCurrency": "GBP", para confirmar que la búsqueda del nodo de script no está vinculada de forma silenciosa a EUR. pair y rate en watchResult deben seguir la moneda que solicitó.
uip maestro flow debug PriceWatch --output-filter 'variables.globals' --inputs \
'{"baseCurrency": "USD", "quoteCurrency": "GBP", "alertThreshold": 0.9}'
uip maestro flow debug PriceWatch --output-filter 'variables.globals' --inputs \
'{"baseCurrency": "USD", "quoteCurrency": "GBP", "alertThreshold": 0.9}'
{
"reshapeRate1.output": {
"pair": "USD/GBP",
"rate": 0.73782,
"asOf": "2026-09-10",
"belowThreshold": true
},
"start.output.baseCurrency": "USD",
"start.output.quoteCurrency": "GBP",
"start.output.alertThreshold": 0.9,
"watchResult": {
"pair": "USD/GBP",
"rate": 0.73782,
"asOf": "2026-09-10",
"belowThreshold": true
}
}
{
"reshapeRate1.output": {
"pair": "USD/GBP",
"rate": 0.73782,
"asOf": "2026-09-10",
"belowThreshold": true
},
"start.output.baseCurrency": "USD",
"start.output.quoteCurrency": "GBP",
"start.output.alertThreshold": 0.9,
"watchResult": {
"pair": "USD/GBP",
"rate": 0.73782,
"asOf": "2026-09-10",
"belowThreshold": true
}
}
Siguiente paso
Ahora que hemos confirmado que funciona como se esperaba, es el momento de implementar el flujo en el tenant de tu cuenta de UiPath Cloud.