Files
sales-bot-stacks/sales-bot
consultoria-as 3be46dbfa8 feat: Integrar analytics, reportes y predicciones en dashboard principal
Dashboard unificado con todas las funcionalidades:
- Grafica de tendencias de ventas (7/14/30 dias)
- Predicciones para proximos 7 dias con indicador de confianza
- Comparativas semanales y mensuales con graficas
- Barra de comparativas rapidas (vs semana/mes anterior)
- Tabla de Top Performers con % de meta y racha
- Botones para generar PDF (diario/ejecutivo)
- Modal de generacion de reportes
- Toast notifications
- Boton FAB de camara para mobile
- Auto-refresh cada 30 segundos

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 03:30:39 +00:00
..

Sales Bot - Aplicación Principal

Bot de automatización de ventas para Mattermost con procesamiento OCR de tickets.

Arquitectura

┌─────────────────────────────────────────────────────────────────┐
│                         Sales Bot                                │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌─────────────┐    ┌──────────────┐    ┌──────────────────┐   │
│  │   Flask     │    │  WebSocket   │    │   OCR Processor  │   │
│  │   (app.py)  │    │  Listener    │    │                  │   │
│  └──────┬──────┘    └──────┬───────┘    └────────┬─────────┘   │
│         │                  │                      │              │
│         └──────────────────┼──────────────────────┘              │
│                            │                                     │
│                    ┌───────┴───────┐                            │
│                    │   Handlers    │                            │
│                    │ (handlers.py) │                            │
│                    └───────┬───────┘                            │
│                            │                                     │
│         ┌──────────────────┼──────────────────┐                 │
│         │                  │                  │                 │
│  ┌──────┴──────┐    ┌─────┴──────┐    ┌─────┴──────┐          │
│  │ Mattermost  │    │   NocoDB   │    │   Utils    │          │
│  │   Client    │    │   Client   │    │            │          │
│  └─────────────┘    └────────────┘    └────────────┘          │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Módulos

app.py

Aplicación Flask principal con los siguientes endpoints:

  • GET /health - Health check
  • POST /webhook/mattermost - Recibe webhooks de Mattermost
  • POST /webhook/nocodb - Recibe webhooks de NocoDB
  • POST /comando/metas - Comando slash /metas
  • POST /comando/ranking - Comando slash /ranking

handlers.py

Manejadores de eventos de ventas:

  • handle_venta_message() - Procesa mensajes de venta
  • generar_reporte_diario() - Genera reportes diarios

mattermost_client.py

Cliente para la API de Mattermost:

client = MattermostClient(url, token)
client.test_connection()
client.post_message(channel_id, message)
client.add_reaction(post_id, emoji)
client.get_file(file_id)

nocodb_client.py

Cliente para la API de NocoDB:

client = NocoDBClient(url, token)
client.crear_vendedor(username, nombre, email)
client.registrar_venta(vendedor, monto, cliente, imagen)
client.get_ventas_dia(vendedor, fecha)
client.get_ranking_vendedores(mes)

ocr_processor.py

Procesador OCR para tickets:

processor = OCRProcessor()
resultado = processor.procesar_imagen(imagen_bytes)
# Retorna: monto, fecha, productos, tubos_detectados

websocket_listener.py

Listener para eventos en tiempo real de Mattermost:

listener = MattermostWebsocketListener(url, token, callback)
listener.start()  # Inicia en thread separado

utils.py

Funciones de utilidad:

extraer_monto(texto)      # "@monto 1500" → 1500.0
extraer_cliente(texto)    # "@cliente Juan" → "Juan"
extraer_tubos(texto)      # "@tubos 5" → 5
formatear_moneda(1500)    # → "$1,500.00"

Instalación con Docker

docker compose up -d

Instalación Manual

# Instalar Tesseract
apt-get install tesseract-ocr tesseract-ocr-eng tesseract-ocr-spa

# Instalar dependencias Python
pip install -r requirements.txt

# Ejecutar
python app.py

Variables de Entorno

Variable Descripción Ejemplo
MATTERMOST_URL URL de Mattermost http://192.168.10.204:8065
MATTERMOST_BOT_TOKEN Token del bot xxx
MATTERMOST_TEAM_NAME Nombre del team sales
MATTERMOST_WEBHOOK_SECRET Secret del webhook xxx
NOCODB_URL URL de NocoDB http://192.168.10.204:8080
NOCODB_TOKEN Token de API xxx
NOCODB_TABLE_* IDs de tablas xxx
FLASK_PORT Puerto de Flask 5000
LOG_LEVEL Nivel de logging INFO
TZ_OFFSET Offset de zona horaria -6

Formato de Mensajes de Venta

El bot reconoce varios formatos:

# Formato con @
venta @monto 1500 @cliente Juan @tubos 5

# Formato con etiquetas
venta monto: 1500 cliente: Juan

# Formato natural
venta $1,500 a Juan

Procesamiento OCR

El procesador OCR detecta automáticamente:

  • Monto total
  • Fecha del ticket
  • Lista de productos
  • Cantidad de tubos de tinte

Marcas de Tinte Reconocidas

  • Alfaparf Evolution
  • Wella Koleston
  • Loreal
  • Matrix
  • Schwarzkopf
  • Revlon
  • Igora
  • Majirel

Sistema de Comisiones

META_DIARIA_TUBOS = 3
COMISION_POR_TUBO = 10  # $10 MXN

def calcular_comision(tubos_vendidos):
    if tubos_vendidos > META_DIARIA_TUBOS:
        return (tubos_vendidos - META_DIARIA_TUBOS) * COMISION_POR_TUBO
    return 0

Logs

Los logs se escriben en /app/logs/sales-bot.log con formato:

2024-01-15 10:30:45 INFO [app] Venta registrada: $1,500.00 - Juan - vendedor1

Health Check

curl http://localhost:5000/health

Respuesta:

{
  "status": "healthy",
  "timestamp": "2024-01-15T10:30:45",
  "version": "1.0.0"
}