Bots

La sección Bots del portal es donde puedes gestionar, editar y ejecutar todos tus bots personalizados ya cargados en la plataforma. Es el centro de control principal para la administración de bots existentes.

Vista Principal de Bots

La interfaz principal muestra todos tus bots personalizados organizados en una lista:

Lista principal de bots personalizados

En la vista principal puedes ver:

  • Lista de bots con información básica de cada uno

  • Estado actual de cada bot (Activo/Inactivo)

  • Información del archivo ZIP y script principal

  • Botones de acción para gestionar cada bot (Editar, Ejecutar, Ver detalles)

  • Última ejecución y su resultado

Información mostrada por cada bot:

  • Nombre descriptivo del bot

  • Archivo ZIP original cargado

  • Script principal configurado (.py)

  • Fecha de carga y última modificación

  • Estado de conexión con agentes

Detalles del Bot

Al hacer clic en un bot específico, puedes ver sus detalles completos:

Vista detallada de un bot individual

La vista de detalles incluye:

  • Información general del bot (nombre, descripción, versión)

  • Configuración del archivo principal dentro del ZIP

  • Parámetros personalizados configurables

  • Historial de ejecuciones recientes

  • Opciones de gestión (editar, eliminar, clonar)

Configuración del script principal:

  • Ruta dentro del ZIP: Especifica cuál archivo .py es el punto de entrada

  • Descripción: Funcionalidad del bot

  • Parámetros: Argumentos configurables que el bot puede recibir

Configuración de Parámetros

Los bots pueden tener parámetros personalizados que se envían como argumentos:

Configuración de parámetros del bot

Sistema de parámetros dinámicos

Los parámetros se configuran una vez y luego pueden modificarse en cada ejecución. Se envían al script Python con el formato –argumento valor.

Tipos de parámetros soportados

  • Texto: Para nombres, rutas, descripciones

  • Número: Para cantidades, límites, porcentajes

  • Booleano: Para activar/desactivar funcionalidades

  • Lista: Para múltiples valores del mismo tipo

  • Archivo: Para especificar rutas de archivos

Ejemplo de configuración

Parámetros Configurados
├── archivo_entrada (Texto, Obligatorio)
├── limite_registros (Número, Opcional: 1000)
├── formato_salida (Lista: CSV, JSON, XLSX)
├── debug_mode (Booleano, Opcional: False)
└── fecha_corte (Texto, Opcional)

Ejecución de Bots

Cuando ejecutas un bot, se muestra la interfaz de configuración de parámetros:

Interfaz de ejecución con parámetros configurables

Proceso de ejecución

  1. Selecciona el bot a ejecutar

  2. Configura parámetros según las necesidades de esta ejecución específica

  3. Elige el agente donde se ejecutará (si hay múltiples disponibles)

  4. Confirma la ejecución

Los parámetros configurados se envían al script Python como:

python script_principal.py --archivo_entrada "datos.xlsx" --limite_registros 1000 --formato_salida "CSV" --debug_mode True

Monitoreo en Tiempo Real

Durante la ejecución, puedes monitorear el progreso en tiempo real:

Monitor de ejecución en tiempo real

Información en tiempo real:

  • Estado actual del bot (Ejecutando, Completado, Error)

  • Logs en vivo generados por los print() del script

  • Tiempo transcurrido desde el inicio

  • Progreso (si el bot lo reporta)

  • Recursos utilizados (CPU, memoria)

Los logs muestran:

  • Timestamp de cada mensaje

  • Nivel de log (INFO, WARNING, ERROR)

  • Mensaje completo generado por print() en el script

  • Número de línea donde se generó el mensaje (si está disponible)

Historial y Logs Completos

Al finalizar la ejecución, puedes revisar los logs completos:

Historial completo de logs y resultados

El historial incluye:

  • Log completo de toda la ejecución

  • Archivos generados por el bot (si los hay)

  • Tiempo total de ejecución

  • Estado final (éxito, error, cancelado)

  • Parámetros utilizados en esta ejecución específica

  • Código de salida del script Python

Acciones disponibles:

  • Descargar logs en formato .txt

  • Descargar archivos generados por el bot

  • Reejecutar con los mismos parámetros

  • Editar bot si hubo problemas

  • Ver métricas de rendimiento

Ejemplo de Bot Básico

Estructura del archivo ZIP a cargar:

mi_bot_procesador.zip
│
├── main.py              # ← Script principal configurado en Unimate
├── requirements.txt     # Dependencias necesarias
├── config.json         # Configuración opcional
├── modules/            # Módulos auxiliares
│   ├── __init__.py
│   ├── procesador.py
│   └── utils.py
└── README.md           # Documentación

Ejemplo de main.py con parámetros y logs:

import argparse
import sys
import json
import pandas as pd
from modules.procesador import procesar_datos
from modules.utils import validar_archivo

def main():
    # Configurar argumentos (los que se configuran en Unimate)
    parser = argparse.ArgumentParser(description='Bot Procesador de Datos')

    # Parámetros obligatorios
    parser.add_argument('--archivo_entrada',
                       type=str,
                       required=True,
                       help='Ruta del archivo Excel a procesar')

    # Parámetros opcionales con valores por defecto
    parser.add_argument('--limite_registros',
                       type=int,
                       default=1000,
                       help='Cantidad máxima de registros a procesar')

    parser.add_argument('--formato_salida',
                       type=str,
                       default='CSV',
                       choices=['CSV', 'JSON', 'XLSX'],
                       help='Formato del archivo de salida')

    parser.add_argument('--debug_mode',
                       action='store_true',
                       help='Activar modo debug')

    parser.add_argument('--fecha_corte',
                       type=str,
                       help='Fecha de corte en formato YYYY-MM-DD')

    args = parser.parse_args()

    # Logs iniciales (aparecen en tiempo real en Unimate)
    print("Bot Procesador de Datos iniciado")
    print(f"Archivo de entrada: {args.archivo_entrada}")
    print(f"Límite de registros: {args.limite_registros}")
    print(f"Formato de salida: {args.formato_salida}")

    if args.debug_mode:
        print("Modo DEBUG activado")

    try:
        # Validar archivo de entrada
        print("Validando archivo de entrada...")
        if not validar_archivo(args.archivo_entrada):
            print("ERROR: Archivo no válido o no encontrado")
            sys.exit(1)

        # Cargar datos
        print("Cargando datos...")
        df = pd.read_excel(args.archivo_entrada)
        total_registros = len(df)
        print(f"Cargados {total_registros} registros")

        # Aplicar límite si es necesario
        if total_registros > args.limite_registros:
            df = df.head(args.limite_registros)
            print(f" Aplicando límite: procesando {args.limite_registros} de {total_registros}")

        # Filtrar por fecha si se especifica
        if args.fecha_corte:
            print(f"Aplicando filtro de fecha: {args.fecha_corte}")
            # Lógica de filtrado aquí

        # Procesar datos
        print("Iniciando procesamiento...")
        resultado = procesar_datos(df, debug=args.debug_mode)

        # Progreso cada 10% (opcional)
        for i in range(0, len(df), len(df)//10):
            porcentaje = int((i/len(df)) * 100)
            print(f"Progreso: {porcentaje}%")

        print("Guardando resultado...")

        # Generar archivo de salida según formato
        nombre_salida = f"resultado_{args.formato_salida.lower()}"

        if args.formato_salida == 'CSV':
            resultado.to_csv(f"{nombre_salida}.csv", index=False)
        elif args.formato_salida == 'JSON':
            resultado.to_json(f"{nombre_salida}.json", orient='records')
        elif args.formato_salida == 'XLSX':
            resultado.to_excel(f"{nombre_salida}.xlsx", index=False)

        print(f"Proceso completado exitosamente")
        print(f"Archivo generado: {nombre_salida}.{args.formato_salida.lower()}")
        print(f"Total de registros procesados: {len(resultado)}")

    except Exception as e:
        print(f" ERROR durante el procesamiento: {str(e)}")
        if args.debug_mode:
            import traceback
            print("Traceback completo:")
            traceback.print_exc()
        sys.exit(1)

if __name__ == "__main__":
    main()

requirements.txt del ejemplo:

pandas>=1.3.0
openpyxl>=3.0.9
argparse

Cómo funciona Unimate

  1. Cargas el ZIP a través de «Nuevo Bot»

  2. Especificas main.py como script principal

  3. Configuras parámetros en la interfaz web: - archivo_entrada (obligatorio, tipo texto) - limite_registros (opcional, tipo número, valor por defecto: 1000) - formato_salida (opcional, lista de opciones: CSV, JSON, XLSX) - debug_mode (opcional, tipo booleano) - fecha_corte (opcional, tipo texto)

  4. Al ejecutar, Unimate llama:

python main.py --archivo_entrada "datos.xlsx" --limite_registros 500 --formato_salida "JSON" --debug_mode
  1. Los `print()` del script se guardan en el log al cual se podrá acceder desde Ejecuciones

  2. Los archivos generados se pueden descargar desde la interfaz

  3. Los logs completos quedan guardados para consultas posteriores

Estados

  • Finalizado: El bot se ejecutó exitosamente y genero un log completo con los prints y mensajes de consola de Python.

  • En Proceso: El bot se está ejecutando actualmente y los logs se enviarán al finalizar la ejecución

  • Con errores: El bot terminó con errores y el log contiene mensajes de error y traceback obtenido de la consola.

Mejores Prácticas para Bots

Estructura de Código

  • Usa argparse para manejar parámetros

  • Incluye print() informativos para el monitoreo, no necesitas usar librerias especificas de logs.

  • Maneja excepciones apropiadamente

  • Valida parámetros de entrada

  • Incluye requirements.txt completo

Logging Efectivo

  • Incluye timestamps si es necesario

  • Reporta progreso en procesos largos

  • Diferencia entre información, warnings y errores

  • Incluye detalles de archivos generados

Rendimiento

  • Valida datos antes de procesamiento pesado

  • Usa límites configurables para datasets grandes

  • Limpia recursos (archivos temporales, conexiones)

  • Optimiza operaciones repetitivas

  • Maneja memoria eficientemente para archivos grandes