⚙️ Automatización

Optimizador de Flujos de Trabajo

Analice flujos de trabajo existentes y cree scripts de automatización optimizados

★★★ Avanzado 40 min 13 de enero de 2025

Caso de Uso

Los flujos de trabajo repetitivos desperdician tiempo e introducen errores. Cowork puede analizar sus procesos documentados y crear scripts automatizados que optimicen las operaciones.

Ejemplo de Prompt

Tengo un flujo de trabajo documentado en ~/Workflows/daily_report.md que describe mi proceso de generación de informes diarios. Actualmente incluye:

1. Exportar datos de 3 Google Sheets
2. Descargar logs del servidor
3. Procesar CSVs para extraer KPIs
4. Generar gráficos
5. Compilar en documento Word
6. Enviar por correo a las partes interesadas

Por favor:
1. Analice este flujo de trabajo para oportunidades de automatización
2. Cree un script único que automatice todo lo posible
3. Identifique los pasos que aún requieren intervención manual
4. Estime el ahorro de tiempo
5. Cree la automatización en ~/Scripts/daily_report/

Qué Hace Cowork

  1. Análisis de Procesos: Lee y analiza la documentación del flujo de trabajo
  2. Evaluación de Automatización: Identifica pasos automatizables
  3. Generación de Scripts: Crea automatización integral
  4. Configuración de Integración: Conecta con los servicios requeridos
  5. Documentación: Proporciona instrucciones de uso y limitaciones

Salida de Ejemplo

# Análisis de Flujo de Trabajo: Generación de Informe Diario

## Proceso Actual (Manual)
| Paso | Descripción | Tiempo | Automatizable |
|------|-------------|--------|---------------|
| 1 | Exportar Google Sheets | 10 min | Sí |
| 2 | Descargar logs del servidor | 5 min | Sí |
| 3 | Procesar CSVs | 20 min | Sí |
| 4 | Generar gráficos | 15 min | Sí |
| 5 | Compilar documento | 20 min | Sí |
| 6 | Enviar correo a interesados | 5 min | Sí |

**Tiempo Manual Total**: 75 minutos/día
**Tiempo Automatizado Estimado**: 5 minutos (tiempo de ejecución del script)
**Ahorro de Tiempo**: 70 minutos/día (~93%)

## Limitaciones de la Automatización
- Google Sheets requiere credenciales de API
- El correo puede necesitar revisión manual antes de enviar
- Los gráficos pueden necesitar verificación visual
#!/usr/bin/env python3
# daily_report.py - Generación Automatizada de Informe Diario

import os
import sys
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
from pathlib import Path
import subprocess
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email import encoders

# Configuración
CONFIG = {
    'output_dir': Path.home() / 'Reports',
    'sheets_ids': [
        '1ABC...', '1DEF...', '1GHI...'
    ],
    'server': 'logs.example.com',
    'recipients': ['team@example.com', 'manager@example.com'],
}

def export_sheets():
    """Exportar datos de Google Sheets"""
    print("Exportando Google Sheets...")
    dfs = []
    for sheet_id in CONFIG['sheets_ids']:
        url = f"https://docs.google.com/spreadsheets/d/{sheet_id}/export?format=csv"
        df = pd.read_csv(url)
        dfs.append(df)
    return dfs

def download_logs():
    """Descargar logs del servidor"""
    print("Descargando logs del servidor...")
    today = datetime.now().strftime('%Y-%m-%d')
    log_path = CONFIG['output_dir'] / f'logs_{today}.txt'

    subprocess.run([
        'scp', f"{CONFIG['server']}:/var/log/app/app.log", str(log_path)
    ], check=True)

    return log_path

def process_data(dfs, log_path):
    """Procesar datos y extraer KPIs"""
    print("Procesando datos...")

    # Combinar dataframes
    combined = pd.concat(dfs, ignore_index=True)

    # Calcular KPIs
    kpis = {
        'total_users': combined['user_id'].nunique(),
        'total_revenue': combined['revenue'].sum(),
        'avg_order_value': combined['revenue'].mean(),
        'conversion_rate': combined['converted'].mean() * 100,
    }

    # Procesar logs
    with open(log_path) as f:
        logs = f.read()
        kpis['error_count'] = logs.count('ERROR')
        kpis['warning_count'] = logs.count('WARNING')

    return combined, kpis

def generate_charts(df, kpis):
    """Generar gráficos de visualización"""
    print("Generando gráficos...")

    fig, axes = plt.subplots(2, 2, figsize=(12, 10))

    # Tendencia de ingresos
    df.groupby('date')['revenue'].sum().plot(ax=axes[0,0], title='Ingresos Diarios')

    # Distribución de usuarios
    df['segment'].value_counts().plot.pie(ax=axes[0,1], title='Segmentos de Usuario')

    # Resumen de KPIs
    kpi_df = pd.DataFrame([kpis])
    kpi_df[['total_revenue', 'avg_order_value']].plot.bar(ax=axes[1,0])
    axes[1,0].set_title('Métricas de Ingresos')

    # Embudo de conversión
    axes[1,1].bar(['Visitas', 'Registros', 'Compras'],
                  [10000, 2500, 500])
    axes[1,1].set_title('Embudo de Conversión')

    plt.tight_layout()

    chart_path = CONFIG['output_dir'] / f'charts_{datetime.now():%Y%m%d}.png'
    plt.savefig(chart_path, dpi=150)
    plt.close()

    return chart_path

def compile_report(kpis, chart_path):
    """Compilar informe final"""
    print("Compilando informe...")

    report = f"""# Informe Diario
Generado: {datetime.now():%Y-%m-%d %H:%M}

## Indicadores Clave de Rendimiento

| Métrica | Valor |
|---------|-------|
| Total Usuarios | {kpis['total_users']:,} |
| Ingresos Totales | ${kpis['total_revenue']:,.2f} |
| Valor Medio de Pedido | ${kpis['avg_order_value']:,.2f} |
| Tasa de Conversión | {kpis['conversion_rate']:.1f}% |

## Estado del Sistema
- Errores: {kpis['error_count']}
- Advertencias: {kpis['warning_count']}

## Gráficos
Consulte la visualización adjunta.
"""

    report_path = CONFIG['output_dir'] / f'report_{datetime.now():%Y%m%d}.md'
    report_path.write_text(report)

    return report_path

def send_email(report_path, chart_path):
    """Enviar informe por correo"""
    print("Enviando informe...")
    # Lógica de envío de correo aquí
    print(f"Informe enviado a {len(CONFIG['recipients'])} destinatarios")

def main():
    print("Iniciando Generación de Informe Diario")
    print("=" * 50)

    try:
        dfs = export_sheets()
        log_path = download_logs()
        df, kpis = process_data(dfs, log_path)
        chart_path = generate_charts(df, kpis)
        report_path = compile_report(kpis, chart_path)

        # Solicitar revisión antes de enviar
        print(f"\nInforme listo: {report_path}")
        if input("¿Enviar correo? (y/n): ").lower() == 'y':
            send_email(report_path, chart_path)

        print("\n¡Informe diario completado!")

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

if __name__ == '__main__':
    main()

Consejos

  • Comience documentando el proceso actual
  • Identifique primero los cuellos de botella y pasos manuales
  • Pruebe la automatización con datos de muestra antes de producción
  • Mantenga la supervisión humana para decisiones críticas
  • Agregue registro de logs para solución de problemas