Nuevo Bot

La sección Nuevo Bot te guía paso a paso en el proceso completo de creación y subida de nuevos bots Python a la plataforma Unimate. Aquí cargas archivos ZIP con tu código y configuras los parámetros iniciales.

Interfaz de Creación

La interfaz de creación de nuevos bots presenta un formulario completo para configurar todos los aspectos del bot:

Formulario de creación de nuevo bot

Secciones del formulario

  1. Información General

    • Nombre del bot: Identificador único y descriptivo

    • Descripción: Explicación de la funcionalidad del bot

    • Versión: Control de versiones del bot

  2. Configuración de Archivo

    • Subida de ZIP: Selector de archivo con validaciones

    • Script principal: Archivo .py de entrada dentro del ZIP

    • Validación: Verificación automática de estructura

  3. Configuración de Parámetros

    • Parámetros dinámicos: Lista configurable de argumentos

    • Tipos de datos: Texto, número, booleano, lista

    • Valores por defecto: Configuración de valores iniciales

    • Validaciones: Reglas para cada parámetro

Preparación del Bot

Estructura recomendada del proyecto

mi_bot.zip
│
├── main.py              # ← Archivo principal (configurado en el formulario)
├── requirements.txt     # Dependencias del proyecto
├── config.json          # Configuraciones del bot (opcional)
├── README.md            # Documentación del bot
├── modules/             # Módulos adicionales del bot
│   ├── __init__.py
│   ├── data_processor.py
│   └── utils.py
└── assets/              # Recursos adicionales (opcional)
    ├── templates/
    └── data/

Requisitos del bot

  1. Punto de entrada: Debe especificarse en el formulario (ej: main.py)

  2. Compatibilidad: Python 3.8+ con soporte para argparse

  3. Dependencias: Listadas en requirements.txt

  4. Argumentos: Compatible con parámetros dinámicos configurados

Proceso de Creación Paso a Paso

Paso 1: Información General

Información Básica del Bot
├── Nombre: Mi Bot Procesador de Datos
├── Descripción: Procesa archivos Excel y genera reportes CSV
├── Versión: 1.0.0
└── Autor: [Tu nombre/equipo]

Campos obligatorios:

  • Nombre: Identificador único y descriptivo

  • Descripción: Explicación clara de la funcionalidad

  • Versión: Sistema de versionado semántico (1.0.0)

Paso 2: Subida del Archivo ZIP

Configuración de Archivo
├── Archivo ZIP: [ Seleccionar archivo... ] → mi_bot.zip
├── Tamaño: 2.3 MB
├── Validación: Estructura correcta
└── Script principal: main.py

Validaciones automáticas:

  • Estructura del ZIP: Verifica archivos obligatorios

  • Script principal: Debe existir y ser ejecutable

  • requirements.txt: Verifica dependencias válidas

  • Sintaxis Python: Valida que el código compile

Paso 3: Configuración del Script Principal

Configuración Python
├── Archivo principal: main.py
├── Punto de entrada: main()
├── Argumentos soportados: Sí (argparse detectado)
└── Dependencias: pandas, openpyxl, requests

Paso 4: Configuración de Parámetros

Ejemplo de configuración como se ve en el formulario:

Parámetros Dinámicos Configurados
│
├──archivo_entrada
│    ├── Tipo: Texto (String)
│    ├── Obligatorio: Sí
│    └── Desc: Ruta del archivo Excel a procesar
│
├──formato_salida
│    ├── Tipo: Lista de opciones
│    ├── Opciones: CSV, JSON, XLSX
│    ├── Obligatorio: No
│    ├── Por defecto: CSV
│    └── Desc: Formato del archivo de salida
│
└──limite_registros
     ├── Tipo: Número entero
     ├── Obligatorio: No
     ├── Por defecto: 1000
     ├── Mínimo: 1, Máximo: 100000
     └── Desc: Cantidad máxima de registros a procesar

Ejemplo de Código Compatible

Ejemplo completo de main.py optimizado para Unimate:

import argparse
import sys
import os
import pandas as pd
import json
from datetime import datetime

def main():
    # Configuración de argumentos (debe coincidir con parámetros configurados)
    parser = argparse.ArgumentParser(description='Bot Procesador de Datos Avanzado')

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

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

    parser.add_argument('--limite_registros',
                       type=int,
                       default=1000,
                       help='Cantidad máxima de registros a procesar')

    args = parser.parse_args()

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

    try:
        # Validación de entrada
        print("Validando archivo de entrada...")
        if not os.path.exists(args.archivo_entrada):
            print(f"ERROR: Archivo no encontrado: {args.archivo_entrada}")
            sys.exit(1)

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

        # Aplicar límite
        if total > args.limite_registros:
            df = df.head(args.limite_registros)
            print(f"Aplicando límite: {args.limite_registros} de {total}")

        # Procesamiento principal
        print("Procesando datos...")
        # Tu lógica de procesamiento aquí
        resultado = df  # Placeholder

        # Generar salida
        timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
        nombre_archivo = f"resultado_{timestamp}.{args.formato_salida.lower()}"

        print(f"Guardando resultado: {nombre_archivo}")

        if args.formato_salida == 'CSV':
            resultado.to_csv(nombre_archivo, index=False)
        elif args.formato_salida == 'JSON':
            resultado.to_json(nombre_archivo, orient='records')
        elif args.formato_salida == 'XLSX':
            resultado.to_excel(nombre_archivo, index=False)

        print(f"Proceso completado exitosamente")
        print(f"Archivo generado: {nombre_archivo}")
        print(f"Total procesados: {len(resultado)} registros")

    except Exception as e:
        print(f"ERROR: {str(e)}")
        sys.exit(1)

if __name__ == "__main__":
    main()

Validación Final y Envío

Antes de crear el bot, el sistema valida:

Validación Final
├── Información general completa
├── Archivo ZIP válido y procesable
├── Script principal ejecutable
├── Parámetros correctamente definidos
├── Dependencias resolubres
└── Sintaxis Python válida

Una vez validado:

  1. Hace clic en «Crear Bot»

  2. El sistema procesa y almacena el bot

  3. Se crea la entrada en la lista de bots

  4. Se instalan las dependencias automáticamente

  5. El bot queda listo para ejecutar o programar

Consejos para Desarrollo

Estructura Recomendada

  • Usa logging con print() para monitoreo

  • Valida argumentos al inicio del script

  • Maneja excepciones apropiadamente

  • Incluye progress indicators para procesos largos

  • Documenta parámetros en el help de argparse

Optimizaciones

  • Procesa en chunks datasets grandes

  • Usa paths relativos cuando sea posible

  • Limpia archivos temporales al finalizar

  • Optimiza imports para reduir tiempo de carga

  • Usa caché para cálculos costosos repetitivos

Consideraciones Importantes

  • No uses paths absolutos hardcodeados

  • No asumas estructura de directorios del agente

  • Incluye timeouts en operaciones de red

  • Maneja encodings de archivos apropiadamente

  • Testea con diferentes tamaños de datos

    print(f"- Parámetro 1: {args.parametro1}")
    print(f"- Parámetro 2: {args.parametro2}")

    # Lógica principal del bot
    ejecutar_proceso(args.parametro1, args.parametro2)

def ejecutar_proceso(param1, param2):
    # Tu código aquí
    pass

    if __name__ == "__main__":
        main()

Compresión del Proyecto

Pasos para crear el archivo ZIP:

  1. Selecciona todos los archivos del proyecto (no la carpeta contenedora)

  2. Comprime en formato ZIP estándar

  3. Verifica que el archivo no exceda el tamaño máximo permitido

  4. Nombra el archivo de forma descriptiva: mi_bot_v1.0.zip

Importantes consideraciones:

  • No incluir archivos innecesarios (.pyc, __pycache__, .git)

  • Verificar que todas las dependencias estén en requirements.txt

  • Probar localmente antes de subir a la plataforma

  • Documentar parámetros y configuraciones en README.md

Proceso de Subida

Desde el Portal Unimate:

  1. Accede al módulo «Gestión de Bots Personalizados»

  2. Haz clic en «Subir Nuevo Bot»

  3. Selecciona el archivo ZIP de tu proyecto

  4. Completa la información del bot: - Nombre descriptivo - Descripción de funcionalidad - Versión - Categoría

  5. Define los parámetros configurables (opcional)

  6. Guarda y verifica la carga exitosa

Validaciones automáticas:

La plataforma verificará:

  • Formato ZIP válido

  • Presencia de archivo principal ejecutable

  • Sintaxis Python correcta

  • Estructura de proyecto coherente

  • Tamaño dentro de límites permitidos

Estados del bot tras la subida:

  • Validado: Listo para ejecución

  • Pendiente: En proceso de validación

  • Error: Requiere corrección de problemas detectados

Una vez subido exitosamente, el bot estará disponible para su ejecución y calendarización desde el portal.

Mejores Prácticas

Para optimizar la compatibilidad:

  • Usa rutas relativas en el código

  • Maneja excepciones apropiadamente

  • Incluye logging para facilitar el debugging

  • Documenta claramente los parámetros requeridos

  • Testa el bot con diferentes conjuntos de parámetros

Ejemplo de requirements.txt:

pandas>=1.3.0
requests>=2.25.0
openpyxl>=3.0.0
python-dotenv>=0.19.0