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:
En la vista principal puedes ver:
Nombre del bot, su entidad y su categoría
Última ejecución: fecha de inicio de la corrida más reciente
Próxima ejecución: próximo disparo real calculado entre todas las tareas de Calendario que usan ese bot
Indicador de ejecución: un ícono animado marca los bots que están corriendo en este momento, y el estado se actualiza en vivo sin recargar la página
Botones de acción para gestionar cada bot: Ejecutar, Editar Bot, Descargar Bot, Calendario (ver sus tareas programadas) y Eliminar Bot
Mientras un bot está corriendo, su botón de ejecutar se transforma en Cancelar ejecución, que detiene la corrida en curso. La cancelación solo es posible una vez que el agente reportó el inicio del proceso.
Ejecuciones de cada bot: al expandir una fila se muestra una tabla con las últimas ejecuciones de ese bot (ID, usuario, agente, inicio, fin, estado, indicadores de calendarizado, reintento y cadena). Las corridas en estado Pendiente o Procesando tienen la acción Forzar cierre, pensada para ejecuciones que quedaron colgadas: tras confirmar, la ejecución se cierra y el bot queda libre para nuevas corridas. El detalle de cada corrida se puede ver también en Ejecuciones.
Detalle operativo sin salir del listado: al hacer clic en una fila (o en la acción Ver detalle operativo del menú) se abre un panel lateral con la información del bot, sin necesidad de entrar al formulario de edición. El panel muestra:
Última ejecución: duración, agente, estado y acceso a Ver logs (o «No posee ejecución» si nunca corrió)
Proceso y Responsable asignados
Crítico: sí/no
Bots previos y Bots posteriores declarados en la información extendida
Contingencia, Comentario y Archivos utilizados
Los campos sin datos cargados se muestran como «No posee…». El panel no es modal: se cierra con la X, la tecla Escape o un clic fuera, y al hacer clic en otra fila se actualiza con ese bot sin cerrarse.
Detalles del Bot¶
Al hacer clic en un bot específico, puedes ver sus detalles completos:
La vista de detalles incluye:
Información general del bot: Nombre del Bot, Entidad, Categoría y Descripción
Archivo del bot: el .zip que contiene el código (con botón Seleccionar archivo para reemplazarlo)
Archivo: el script principal dentro del ZIP que actúa como punto de entrada
Modo de ejecución: Primer plano o Segundo plano
Parámetros: tabla de argumentos configurables del bot (ver Configuración de Parámetros)
Información extendida: datos operativos y dependencias entre bots (ver Información extendida del bot)
Sistema de notificaciones: activa alertas por correo para ese bot; al habilitarlo se elige el estatus que dispara el aviso (Error, Finalizado o Procesando) y los usuarios que lo reciben
Configuración de Parámetros¶
Los bots pueden tener parámetros personalizados que se envían como argumentos:
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)
Información extendida del bot¶
Al crear o editar un bot, la sección Información extendida permite cargar datos operativos y dependencias entre bots. Todos los campos son opcionales:
Proceso: proceso de negocio al que pertenece el bot
Responsable: usuario responsable del bot
Crítico: marca el bot como crítico para la operación
Archivos utilizados: archivos o rutas que el bot usa durante su ejecución
Bots previos requeridos: bots que deben haber corrido antes (informativo, para documentar dependencias)
Bots posteriores: bots que suelen correr después (informativo; un bot no puede referenciarse a sí mismo)
Contingencia: qué hacer si el bot falla
Comentarios: notas libres sobre el bot
Estatus de bot: estado operativo del bot
Estos campos son descriptivos: no cambian cómo se ejecuta el bot, pero permiten documentar la operativa y navegar las dependencias entre bots.
Ejecución de Bots¶
Cuando ejecutas un bot, se muestra la interfaz de configuración de parámetros:
Proceso de ejecución¶
Selecciona el bot a ejecutar
Configura parámetros según las necesidades de esta ejecución específica
Elige el agente donde se ejecutará (si hay múltiples disponibles)
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:
Información en tiempo real:
Indicador de ejecución en la fila del bot mientras está corriendo
Estados en vivo en la tabla de ejecuciones expandida (Procesando, Pendiente, Cancelando…) que se actualizan sin recargar
Forzar cierre disponible en corridas Pendiente o Procesando que quedaron colgadas
Al terminar, el log completo queda disponible para consulta y descarga desde Ejecuciones
Los logs guardan cada print() del script con su timestamp, y se revisan desde el historial de Ejecuciones (vista previa del final del log o descarga del archivo completo).
Historial y Logs Completos¶
Al finalizar la ejecución, puedes revisar los logs completos:
En la tabla de ejecuciones de cada bot (fila expandida) la acción de lupa abre el Output del log: una vista previa con el final del log de esa corrida y un botón de descarga.
La vista previa muestra solo los últimos caracteres del log; para verlo completo se descarga el archivo
.log.El detalle completo de cada corrida (origen, parámetros utilizados, cadena, tiempos) se consulta en Ejecuciones.
Los logs se conservan por un tiempo limitado según la política de retención del historial.
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¶
Cargas el ZIP a través de «Nuevo Bot»
Especificas main.py como script principal
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)
Al ejecutar, Unimate llama:
python main.py --archivo_entrada "datos.xlsx" --limite_registros 500 --formato_salida "JSON" --debug_mode
Los `print()` del script se guardan en el log al cual se podrá acceder desde Ejecuciones
Los archivos generados se pueden descargar desde la interfaz
Los logs completos quedan guardados para consultas posteriores
Estados¶
Finalizado: El bot se ejecutó exitosamente y generó un log completo con los prints y mensajes de consola de Python.
Procesando: El bot se está ejecutando actualmente; su estado se actualiza en vivo en el listado.
Pendiente / Cancelando / Cancelado / Omitida: estados de cola y cancelación gestionados por el calendario y las políticas de instancias (ver Ejecuciones).
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