En este post vamos a abarcar las tres posibles conexiones entre AiStudio y las aplicaciones de Google: Gmail, Google Drive y Google Sheets durante la creación de tareas.
Gmail
Al seleccionar como tipo de tarea Email, se visualizará el proveedor Gmail. Ahora al seleccionarlo, solicitará el Client ID y Client Secret, podemos seguir los pasos del siguiente link para obtener estos datos: https://docs.rocketbot.com/2025/09/15/saturn-studio-credencial-gmail/. Los scopes necesarios para que la aplicación funcione correctamente son
https://www.googleapis.com/auth/gmail.readonly
https://www.googleapis.com/auth/gmail.labels
https://www.googleapis.com/auth/userinfo.email
openid
El redirect uri que se debe configurar en la credencial, debe ser https://aistudio.rocketbot.com
Al seleccionar Gmail se mostrará un modal para ingresar el Client ID y Client Secret. Después de ingresarlos le damos a Login. Esto abrirá una nueva ventana donde debemos conectarnos a la aplicación utilizando la cuenta de Google elegida.
Google Drive
Al seleccionar como tipo de tarea una diferente a Email, se visualizará el proveedor Google Drive. Ahora al seleccionarlo, solicitará el Client ID y Client Secret, podemos seguir los pasos del siguiente link para obtener estos datos: https://docs.rocketbot.com/2025/09/15/saturn-studio-credencial-google-drive/ Los scopes necesarios para que la aplicación funcione correctamente son
En Orígenes autorizados de JavaScript y URIs de redireccionamiento autorizados que se debe configurar en la credencial, debe ingresarse la url de AiStudio: https://aistudio.rocketbot.com
Al seleccionar Google Drive se mostrará un modal para ingresar el Client ID y Client Secret. Después de ingresarlos le damos a Login. Esto abrirá una nueva ventana donde debemos conectarnos a la aplicación utilizando la cuenta de Google elegida. Al terminar el proceso de autenticación, volverá a AiStudio y se presentará un modal mostrando las carpetas que tienes en drive, deberás seleccionar una. Esta carpeta será donde deberás subir los archivos que quieras procesar con AiStudio.
En Orígenes autorizados de JavaScript y URIs de redireccionamiento autorizados que se debe configurar en la credencial, debe ingresarse la url de AiStudio: https://aistudio.rocketbot.com
Al seleccionar Google Sheets se mostrará un modal para ingresar el Client ID y Client Secret. Después de ingresarlos le damos a Login. Esto abrirá una nueva ventana donde debemos conectarnos a la aplicación utilizando la cuenta de Google elegida. Al terminar el proceso de autenticación, volverá a AiStudio y se presentará un modal mostrando las carpetas y archivos spreadsheet que tienes en drive, deberás seleccionar uno. En el archivo elegido se escribirán los resultados de la tarea ejecutada.
Saturn Studio – Credencial Google Tasks
Este documento explica cómo integrar y autenticar el módulo Google Chat dentro de Saturn Studio, permitiendo acceder, leer y administrar chats de Google de forma segura. La integración puede realizarse mediante dos métodos OAuth 2.0 con Google Cloud.
Configuración OAuth 2.0 con Google Cloud
Este método brinda mayor control sobre los permisos y seguridad, ideal para entornos de trabajo colaborativos o producción.
Crea un nuevo proyecto o selecciona uno existente desde la barra superior.
Desde la barra de búsqueda, busca y habilita la siguiente API:
Google Tasks API (requerida para crear, editar y eliminar tareas y sus listas)
Verifica que la API quede con estado Habilitado. Si no lo está, la autenticación podría completarse, pero las llamadas devolverán errores del tipo access_not_configured.
Configurar la Pantalla de consentimiento OAuth
En el menú lateral, entra a: APIs y servicios → Pantalla de consentimiento OAuth → Configurar pantalla de consentimiento.
Completa los campos solicitados:
Nombre de la aplicación
Correo de soporte
(Opcional) Logo, dominio, enlaces de privacidad y términos.
Elige el tipo de usuario según tu caso:
Tipo de usuario
Descripción
Recomendación
Interno
Solo usuarios de tu organización (requiere dominio Google Workspace).
Úsalo si tu equipo pertenece al mismo dominio.
Externo
Permite acceso a cualquier cuenta de Google (modo de prueba).
Ideal para uso personal o con cuentas @gmail.com.
🔸 Nota: en modo Externo (prueba) deberás agregar manualmente a los usuarios de prueba, incluido tu propio correo. Solo esos usuarios podrán autorizar la app mientras esté en prueba.
Guarda los cambios al finalizar.
Agregar scopes (permisos) a la app
Desde la misma sección de Pantalla de consentimiento OAuth, ve a Acceso a los datos → Agregar o quitar permisos.
Añade los siguientes scopes recomendados:
Scope
Descripción
https://www.googleapis.com/auth/userinfo.email
Accede al correo del usuario autenticado.
openid
Requerido para la autenticación mediante OAuth 2.0.
https://www.googleapis.com/auth/tasks
Crear, editar, organizar y borrar todas tus tareas
https://www.googleapis.com/auth/tasks.readonly
Consultar tus tareas.
Actualiza y guarda los cambios.
Crear el Client ID y Client Secret
Ve a APIs y servicios → Credenciales → Crear credencial → ID de cliente de OAuth.
Completa los datos de la siguiente manera:
Tipo de aplicación: Aplicación web
Nombre:Saturn Studio
URIs de redirección:https://studio.rocketbot.com
Al guardar, Google generará:
Client ID
Client Secret Cópialos y resérvalos.
Cargar credenciales en Saturn Studio
Regresa al módulo Google Tasks en Saturn Studio y selecciona para crear una nueva credencial.
Pega el Client ID y Client Secret obtenidos en los campos correspondientes.
Guarda la credencial y realiza la conexión.
✅ Listo: tu credencial avanzada quedará configurada correctamente para el uso completo del módulo Google Tasks.
📌 Notas importantes
Usuarios externos (modo de prueba): agrega los correos de los usuarios en la lista de “Usuarios de prueba”. De lo contrario, no podrán autorizar la app.
Interno: solo disponible con cuentas de dominio empresarial (Google Workspace).
Scopes y APIs: los scopes otorgan permisos, pero las APIs habilitadas son las que permiten ejecutar las acciones.
URIs de redirección: deben coincidir exactamente con la configuración de Google Cloud.
Verificación: si deseas publicar la app (modo producción) y usas scopes sensibles, Google podría solicitar verificación del dominio, logo y políticas de privacidad.
Rocketbot Transaction Framework
Para acceder al comando, deben dirigirse a la sección nativa Frameworks, y dentro seleccionar Rocketbot Transaction Framework (RTFramework para abreviar). Al abrir se les mostrará la configuración del comando, tal cual la imagen de arriba, donde les permitirá seleccionar el robot que representará cada estado del proceso, ahondaremos en ello más adelante.
Durante la documentación estaremos revisando la base de datos RTFramework_example.db. El zip también incluye la base de datos RTFramework_template.db la cual es la estructura base, y el archivo Products_Table_framework.xlsx el cual se utiliza en la base de datos de ejemplo. Para poder probar la ejecución de ejemplo se debe dejar el archivo xlsx en la raíz de Rocketbot.
Vista general
Vista general del RTFrameworkVista de la asignación de variables de cada robot
Los robots utilizados en el Framework son ejecutados siguiendo la misma metodología que el comando Ejecutar robot Rocketbot (expose). Esto quiere decir que los robots no heredarán variables del padre, sino que se les asignará el valor desde el framework, además retornará el resultado de la ejecución, esto último deberá ser obligatorio en algunos de los robots que ejecutaremos para que todo funcione correctamente.
Robots del RTFramework
Main Robot
El robot principal es el que va a contener el comando del RTFramework.
Vista del comando del robot principal en la base de datos de ejemplo
Variables
RTFramework hace uso de diferentes variables durante su ejecución, en tu robot principal deberás crear las siguientes:
first_config: Variable opcional. En la db de ejemplo se envía como valor a la variable {Config} del robot First Execution Config. Su contenido es un diccionario con las llaves kill y resolution, datos que serán utilizados en el robot mencionado para matar procesos y para modificar la resolución de la pantalla respectivamente.
init_config: Variable opcional. En la db de ejemplo se envía como valor a la variable {Config} del robot Initialization. Su contenido es un diccionario con las llaves file y url, donde file es el archivo excel que se utilizará y url la página que se automatizará.
apps_opened: Variable opcional. En la db de ejemplo no tiene ningún valor por defecto, es utilizada para recibir parte del retorno de la ejecución de Initialization. Se utiliza como parámetro en el robot End Process para saber qué aplicaciones deben cerrarse al finalizar la ejecución.
TransactionData: Variable obligatoria. Se utiliza en el robot de Initialization y Get Transaction Data. En el retorno de información del robot Initialization debe asignarse la lista de información que será procesada en cada transacción.
TransactionItem: Variable obligatoria. Se utiliza en el robot Get Transaction Data para asignar un valor individual de la variable TransactionData. Este contenido que se obtenga se utilizará en el robot Process Transaction.
TransactionNumber: Variable obligatoria. Se utiliza en el robot Get Transaction Data y Process Transaction para indicar el número de transacción que se procesará. Su valor se generará automáticamente en base al número de transacción en curso durante la ejecución.
Status: Variable obligatoria. Se utiliza como variable de control en caso de que la ejecución falle en algún punto. Se debe utilizar en el catch de todos los robots del RTFramework, ahí se asignará el mensaje de error cuando un comando falla.
SystemException: Variable opcional. Acá se asignará el texto de cualquier excepción de sistema que ocurra durante la ejecución del RTFramework.
BusinessException: Variable opcional. Acá se asignará el texto de cualquier excepción de negocio que ocurra durante la ejecución del RTFramework.
First Execution Configuration
Vista de la selección de robot First Execution Config en base de datos de ejemplo
El primer robot que debemos seleccionar en el RTFramework es el de la primera configuración de ejecución. Este robot se encargará de preparar el ambiente donde ejecutaremos nuestro proceso.
Variables
Variables del robot en la db de ejemplo
Status: Variable obligatoria. Se utiliza como variable de control en caso de que la ejecución falle en algún punto. Se debe utilizar en el catch de todos los robots del RTFramework, ahí se asignará el mensaje de error cuando un comando falla.
killresolutionprocess: Variables opcionales. Son aquellas que se van a utilizar internamente dentro del robot de la db de ejemplo.
Config: Variable opcional expuesta que recibirá la información en la configuración del RTFramework.
En el ejemplo se le asigna el contenido de la variable {first_config} del robot principal
Estructura
El robot First Execution Config. debe seguir una estructura determinada para que el RTFramework funcione de manera correcta, a continuación la detallamos:
[Bloque TryCatch]
Try:
# Acá van los comandos que se ejecutarán como primer configuración
# de la ejecución
[Comandos de configuración]
# Al final de manera opcional puede ir un comando de
# Retornar informacion en caso de que necesitemos devolver
# algún dato al robot principal
[Retornar Informacion: Datos {var_retorno}]
Catch:
# El primer comando del Catch debe ser Último Estado.
# De esta manera obtenemos el código del error que pueda suceder y
# lo asignamos a la variable Status
[Último Estado: Variable Status]
# Luego pueden ir los comandos que podamos llegar a requerir para
# el manejo del error
[Comandos de manejo de error]
# Al igual que con el bloque try, debajo de todo el catch debe ir
# un comando de Retornar Informacion indicando en el input la
# variable Status
[Retornar informacion: Datos {Status}]
Initialization
Vista de la selección de robot Initialization en base de datos de ejemplo
El segundo robot que debemos seleccionar es el de la inicialización. Este robot se encargará de abrir las aplicaciones que se utilizarán en el RTFramework y obtener la información de las transacciones que se utilizarán durante el proceso.
Variables
Variables del robot en la db de ejemplo
La variable Status es la que recibirá el mensaje de error en caso de que algún comando falle. Config es una variable expuesta que recibirá la información en la configuración del RTFramework. data_list guardará la lista de información que se procesará y deberá ser devuelta como valor bajo la llave TransactionData en el último comando dentro del try en el robot. El resto de variables son específicas del ejemplo.
En el ejemplo se le asigna el contenido de la variable {init_config} del robot principal
Estructura
El robot Initialization debe seguir una estructura determinada para que el RTFramework funcione de manera correcta, a continuación la detallamos:
[Bloque TryCatch]
Try:
# Acá van los comandos que se ejecutarán como inicialización
[Comandos de inicializacion]
# Al final de manera obligatoria debe ir un comando de
# Retornar informacion que incluya un diccionario con, al menos,
# la llave TransactionData que contenga una lista de los datos que
# se utilizarán en el proceso. De manera opcional puede incluir
# otras llaves con valores que deseemos asignar en el padre.
[Retornar Informacion: Datos {"TransactionData": "{data_list}"}]
Catch:
# El primer comando del Catch debe ser Último Estado.
# De esta manera obtenemos el código del error que pueda suceder y
# lo asignamos a la variable Status
[Último Estado: Variable Status]
# Luego pueden ir los comandos que podamos llegar a requerir para
# el manejo del error
[Comandos de manejo de error]
# Al igual que con el bloque try, debajo de todo el catch debe ir
# un comando de Retornar Informacion indicando en el input la
# variable Status
[Retornar informacion: Datos {Status}]
Get Transaction Data
Vista de la selección de robot Get Transaction Data en base de datos de ejemplo
El tercer robot que debemos elegir es el encargado de obtener información de la transacción. Su tarea será identificar la próxima transacción a procesar, la cual será enviada al robot Process Transaction.
Variables
Variables del robot en la db de ejemplo
Status: Variable obligatoria. Se utiliza como variable de control en caso de que la ejecución falle en algún punto. Se debe utilizar en el catch de todos los robots del RTFramework, ahí se asignará el mensaje de error cuando un comando falla.
TransactionNumber: Variable obligatoria expuesta. Se utilizará internamente para saber qué numero de transacción se procesará a continuación.
TransactionItem: Variable obligatoria. Durante el proceso incluirá el contenido de la transacción que se procesará.
TransactionData: Variable obligatoria expuesta. Es la variable que contiene todas las transacciones que se utilizan durante el proceso.
En la db de ejemplo se asignan a ambas variables su valor correspondiente desde el padre.
Estructura
El robot Get Transaction Data debe seguir una estructura determinada para que el RTFramework funcione de manera correcta, a continuación la detallamos:
[Bloque TryCatch]
Try:
# Grupo de comando destinado a contener la lógica que obtiene la próxima
# transacción a procesar
Group:
# Si el número de transacción es menor al largo de la lista de
# transacciones, obtengo el siguiente item
IF: {TransactionNumber} < len({TransactionData})
[Asignar Variable: {TransactionData}[{TransactionNumber}
Dest.: TransactionItem]
# Si no se cumple significa que se procesaron todas las transacciones,
# entonces devolvemos None para dar paso a la finalización de la
# ejecución.
ELSE:
[Asignar variable: None
Dest.: TransactionItem]
# Acá aplicamos los comandos que necesitemos ejecutar (opcional)
[Comandos opcionales al obtener la información de la transacción]
# Al final de manera obligatoria debe ir un comando de
# Retornar informacion que incluya un diccionario con, al menos,
# la llave TransactionItem que contenga el valor de su respectiva variable.
# De manera opcional puede incluir otras llaves con valores que deseemos
# asignar en el padre.
[Retornar Informacion: Datos {"TransactionItem": "{TransactionItem}"}]
Catch:
# El primer comando del Catch debe ser Último Estado.
# De esta manera obtenemos el código del error que pueda suceder y
# lo asignamos a la variable Status
[Último Estado: Variable Status]
# Luego pueden ir los comandos que podamos llegar a requerir para
# el manejo del error
[Comandos de manejo de error]
# Al igual que con el bloque try, debajo de todo el catch debe ir
# un comando de Retornar Informacion indicando en el input la
# variable Status
[Retornar informacion: Datos {Status}]
Process Transaction
Vista de la selección del robot y la cantidad de reintentos del robot Process Transaction
El cuarto robot que debemos seleccionar es el que procesa una única transacción. Este robot recibirá como dato la transacción obtenida en el paso anterior, realizará los pasos que necesitemos y finalmente deberá devolver el item de transacción y el número de la misma. En la ejecución de cada transacción pueden haber tres posibles resultados:
Éxito: Este resultado ocurre cuando todo el proceso se ejecutó correctamente, sin errores ya sean controlados o no controlados. En este caso, se continúa con la siguiente transacción a procesar.
Business Exception: Este resultado ocurre cuando el proceso se encuentra con un error controlado. Son errores predecibles basados en las reglas de negocio que se conocen y se definen con antelación (ver cómo configurarlas en la sección Estructura> Catch). Si un proceso cae bajo este resultado, la transacción se reintentará el número de veces que le indiquemos en el input Max Retries.
System Exception: Este resultado ocurre cuando el proceso se encuentra con un error no controlado. Pueden ser causados por problemas en el entorno de ejecución o en el sistema. Si un proceso cae bajo este resultado, el proceso se cancela y se ejecuta el robot Initialization, para reintentar toda la ejecución del RTFramework nuevamente.
Variables
Status: Variable obligatoria. Se utiliza como variable de control en caso de que la ejecución falle en algún punto. Se debe utilizar en el catch de todos los robots del RTFramework, ahí se asignará el mensaje de error cuando un comando falla.
product, color, category, price: Variables opcionales de ejemplo que son utilizadas para manejar dentro del proceso la diferente información que contiene mi transacción.
Exception: Variable obligatoria. Cuando la ejecución no funciona de manera esperada, esta variable recibirá el mensaje de error. Esta variable es muy importante ya que forma parte del manejo de errores para decidir si es una excepción de negocio o excepción del sistema.
TransactionItem: Variable obligatoria (expuesta). Durante el proceso incluirá el contenido de la transacción que se procesará.
TransactionNumber: Variable obligatoria (expuesta). Es la variable que indica el número de transacción que se realiza.
En el ejemplo se asigna a cada una su variable correspondiente del bot padre.
Estructura
El robot Process Transaction debe seguir una estructura determinada para que el RTFramework funcione de manera correcta, a continuación la detallamos:
[Bloque TryCatch]
Try:
# Acá van los comandos que realizarán el proceso de la transacción
[Comandos de manejo de transación]
# Al final del try de manera obligatoria deben ir dos comandos:
# Asignar variable que sume uno a TransactionNumber
# El comando Retornar Información que devuelva TransactionItem y
# TransactionNumber, junto con cualquier otro contenido opcional
[Retornar Informacion: Datos {"TransactionItem": "{TransactionItem}",
"TransactionNumber": "{TransactionNumber}"}]
Catch:
# El primer comando del Catch debe ser Último Estado.
# De esta manera obtenemos el código del error que pueda suceder y
# lo asignamos a la variable Status
[Último Estado: Variable Status]
# Luego asignamos a la variable Exception el mensaje del error
[Asignar Variable: {Status}.get('message')
Dest: Exception]
# En este punto se deben establecer las reglas de negocio. En la db de
# ejemplo se utiliza un IF que comprueba si en el mensaje del error que
# ocurrió se encuentra el texto "Unable to locate element". Este error es
# muy común en automatizaciones web cuando un elemento no puede ser ubicado
# en la página. A veces se soluciona con un reintento, entonces quiero
# establecer este caso como un Business Exception.
IF: "Unable to locate element" in """{Exception}"""
True:
# En este punto debemos retornar un diccionario con, al menos, la
# llave BusinessException que contenga el texto del error.
[Retornar informacion: Datos {'BusinessException': '{Exception}'}]
False:
# Si llegamos a este punto es porque es un error no controlado.
# Por lo tanto, debemos retornar todo el contenido de la variable
# Status, generando un System Exception.
[Retornar informacion: Datos {Status}]
End Process
Vista de la selección del robot End Process en la base de datos de ejemplo.
El quinto y último robot que debemos seleccionar es el que finaliza la ejecución. Este robot se deberá encargar de enviar los reportes, cerrar los procesos que utilicemos durante la ejecución, etc…
Variables
No recibe ninguna variable obligatoria por parte del padre. En la db de ejemplo, se le comparte la variable apps_opened que indica las aplicaciones abiertas, de esta manera el robot se puede encargar de cerrarlas correctamente.
Estructura
Al igual que el resto de robots, End Process debe utilizar try catch, sin embargo dentro del try tendremos la libertad de utilizarlo como lo necesitemos, sin seguir una estructura predefinida ni devolviendo nada específico al padre. Por otro lado, en el catch debemos colocar como primer comando Último Estado y al final de todo el Retornar Información que devuelva dicha variable.
[Bloque TryCatch]
Try:
# Acá van los comandos que se ejecutarán para finalizar la ejecución
# (cierre de apps, envio de reportes, etc...)
[Comandos de finalización]
Catch:
# El primer comando del Catch debe ser Último Estado.
# De esta manera obtenemos el código del error que pueda suceder y
# lo asignamos a la variable Status
[Último Estado: Variable Status]
# Luego pueden ir los comandos que podamos llegar a requerir para
# el manejo del error
[Comandos de manejo de error]
# Debajo de todo el catch debe ir un comando de
# Retornar Informacion indicando en el input la
# variable Status
[Retornar informacion: Datos {Status}]
Rocketbot Picture in Picture
Descripción
Rocketbot Picture in Picture (PiP) es una herramienta que permite ejecutar robots cargados en el orquestador en una sesión hija de tu usuario local de Windows. Esto permite realizar ejecuciones en un entorno separado de tu sesión principal de Windows, pero a su vez ejecutándose con el mismo usuario, liberando la sesión principal para realizar cualquier otra actividad mientras se ejecuta tu robot.
💡Nota: Para poder utilizar Rocketbot PiP, es necesario tener instalado el cliente de noc versión 2.0 o superior.
Descarga Rocketbot Picture in Picture desde aqui: #soon
Configuración NOC y PiP
Una vez descargado el cliente noc 2.0 y Rocketbot PiP, agregar a las configuraciones del archivo noc.ini (ubicado en la instalación del cliente noc) lo siguiente:
Crear la sección [PIP] y dentro asignar los siguientes valores:
[PIP]
open = true/false
path = path_to_RocketbotPiP.NET.exe
user = tour_Windows_user
password = your_Windows_password
screenshot = true/false
open (obligatorio): indica si se ejecutarán robots del orquestador en PiP. Si se indica true al abrir noc.exe se abrirá PiP por un momento para iniciar la sesión hija.
path (obligatorio): en este campo se debe indicar la ruta hacia el ejecutable de RocketbotPiP.
user (opcional): indica el nombre del usuario local de Windows actual. Si no se guarda aquí se deberá iniciar sesión y en el proceso se guardará el dato en el baúl de credenciales de Windows.
password (opcional): indica la contraseña de tu usuario local de Windows actual. Al igual que el user, si no se guarda aquí se deberá iniciar sesión y en el proceso se guardará el dato en el baúl de credenciales de Windows.
screenshot (opcional): indica si el orquestador puede tomar capturas de pantalla en la sesión hija abierta por Rocketbot PiP.
💡Nota: Rocketbot PiP necesita tener acceso a las credenciales de Windows para automatizar el inicio de sesión. De manera opcional se pueden cargar en el archivo .ini. Si por seguridad se prefiere hacerlo, la primera vez que se ejecute RocketbotPiP se solicitarán las credenciales. Estas serán almacenadas dentro del Administrador de Credenciales de Windows como credenciales genéricas bajo el nombre de ‘pip_localhost’.
Terminado de configurar el archivo noc.ini, se debe agregar la aplicación noc.exe dentro de la lista de aplicaciones que se abren al iniciar Windows, de esta manera tanto en el inicio de la sesión principal y de la sesión secundaria en pip, abrirán el noc automáticamente. Los pasos son los siguientes:
Haz click derecho en la aplicación noc.exe y selecciona Copiar
Presiona Windows + R, escribe shell:startup y haz click en Aceptar. Se te abrirá la carpeta Inicio.
Haz click derecho sobre la carpeta y selecciona Pegar acceso directo. Si tienes Windows 11 al hacer click derecho deberás seleccionar primero Mostrar más opciones.
Así debe quedar la carpeta Startup
La primer configuración que se debe realizar al descargar Rocketbot PiP es ejecutar como administrador RocketbotPiP.NET.exe y hacer click en el botón Enable Child Session. Esto dará los permisos necesarios para poder abrir la sesión hija en Picture in Picture. Una vez realizado esto, se puede cerrar la aplicación y continuar con la configuración del servidor.
Configuración Servidor Orquestador
Para poder ejecutar diferentes procesos en PiP, se debe configurar el parámetro dentro de la línea de comandos de la instancia. Para ello hay que iniciar sesión en el servidor y dirigirse al proceso que deseamos ejecutar.
Al ingresar al proceso, en la instancia donde se ejecutará por PiP hacer click en los tres puntos para mostrar más opciones y elegir Set command Line
En el input agregar como primer parámetro --pip
Consideraciones
Rocketbot Picture in Picture está disponible solamente para sistemas operativos Windows y el usuario debe ser una cuenta local. Por limitaciones de Windows, PiP por el momento no funciona con usuarios cuya cuenta esté vinculada a una cuenta de Microsoft.
Si has decidido no guardar tus credenciales en el archivo noc.ini y no has iniciado sesión en el paso donde se debe dar click en Enable Child Session, la primera vez que se ejecute noc.exe se abrirá Rocketbot PiP y mostrará la siguiente ventana:
Al darle click a Accept se deben cargar las credenciales y luego click a connect. Esto hará que se guarden los datos de conexión en el baúl de credenciales de Windows, explicado aquí.
PiP funciona como un escritorio remoto y no permite ejecutar aplicaciones como administrador, por lo que se debe tener en cuenta antes de comenzar un desarrollo en el cual sea necesario ese nivel de privilegios.
Al ejecutar un robot en PiP que requiera de interfaz gráfica, ya sea porque se automatizan aplicaciones desktop (que interactúan con el mouse o el teclado) o bien porque se utiliza virtualización por ejemplo, se requiere tener en primer plano la aplicación. Si se desea ejecutar con PiP minimizado, se debe agregar un registro que permita mantener la interfaz. Siguiendo los pasos a continuación podrás realizarlo:
Cierra la aplicación de PiP
Presiona Win + R, escribe regedit y presiona enter
Ve hacia el registro que corresponda según tu sistema operativo (32 o 64 bits):
32 bits: HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Client
64 bits: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Terminal Server Client
En el recuadro blanco de la derecha haz click derecho y selecciona Nuevo > Valor de DWORD. Su nombre debe ser RemoteDesktop_SuppressWhenMinimized
Una vez creado y nombrado, haz doble click sobre dicho registro. En el input Información del valor colocar 2. Para finalizar haz click en Aceptar para guardar los cambios.
Cierra la ventana del editor de registro. Con este cambio, los robots ejecutados en PiP tendrán una interfaz para poder trabajar sin problemas aún cuando la aplicación esté minimizada.