Renato 53b632c07c Agrega verificación de stock para ventas de kits múltiples
- Nueva tool verificar_stock_kit() para calcular cuántos kits se pueden armar
- Nueva función db_verificar_stock_kit() que verifica stock de todos los productos
- Calcula kits_posibles basado en el producto con menor stock relativo
- Actualiza skill armar_kits.md con proceso de verificación obligatoria
- Ahora advierte antes de vender: 'Solo podés armar X kits, pediste Y'
- Prevents ventas parciales no deseadas de kits
2026-02-15 22:48:48 +01:00

PymesBot Demo - Asistente de Ventas con IA

Demo funcional de asistente de ventas para librería con integración de IA.

Características

  • Chat en tiempo real con WebSocket
  • Búsqueda de productos en base de datos SQLite
  • Confirmación de ventas
  • IA integrada con Z.AI (GLM-4.7)
  • Interfaz web responsive

Tech Stack

  • Backend: FastAPI + Python 3.11
  • Base de datos: SQLite
  • Frontend: HTML/JS vanilla
  • IA: Z.AI API (GLM-4.7)
  • Proxy: Caddy

Estructura

pymesbot/
├── backend/
│   ├── main.py          # FastAPI app
│   ├── Dockerfile       # Imagen Docker
│   ├── requirements.txt # Dependencias
│   └── templates/
│       └── chat.html    # Interfaz
└── data/                # Base de datos SQLite

Deployment

Prerrequisitos

  • Docker y Docker Compose
  • Acceso a API de Z.AI (u otro provider)
  • Servidor con Caddy (u otro proxy)

Variables de Entorno

# API de Z.AI (requerido)
ZAI_API_KEY=tu_api_key_aqui
ANTHROPIC_MODEL=glm-4.7

Paso 1: Clonar el repositorio

git clone https://gitea.cbcren.online/renato97/demo.git
cd demo

Paso 2: Configurar variables de entorno

Crear archivo .env:

ZAI_API_KEY=tu_api_key

Paso 3: Iniciar contenedores

docker compose up -d --build

Paso 4: Configurar Caddy (proxy)

Agregar al Caddyfile:

demo.tudominio.com {
    reverse_proxy localhost:8201
}

Reiniciar Caddy:

docker exec caddy-ingress caddy reload

API Endpoints

Método Endpoint Descripción
GET /health Health check
GET /stock/search?q=producto Buscar productos
POST /venta/confirmar Confirmar venta
GET /stats/ventas?periodo=hoy Estadísticas
WS /chat/ws/{session_id} Chat en tiempo real

Ejemplo de búsqueda de productos

curl "http://localhost:8201/stock/search?q=birome"

Ejemplo de confirmar venta

curl -X POST "http://localhost:8201/venta/confirmar" \
  -H "Content-Type: application/json" \
  -d '{
    "producto_id": 1,
    "cantidad": 2,
    "precio_vendido": 850,
    "vendedor": "test"
  }'

Credenciales

  • PIN vendedor: 1234
  • Admin: /admin (password: admin123)

Configuración de IA

El sistema usa la API de Z.AI directamente. Para cambiar el modelo o API:

Editar main.py línea ~40:

ZAI_API_KEY = "tu_api_key"
ZAI_API_URL = "https://api.z.ai/api/anthropic/v1"
MODEL = "glm-4.7"

Known Issues / Bugs

1. Búsqueda limitada

  • Problema: La búsqueda en DB solo soporta términos simples
  • Solución: Usar la IA para búsquedas más complejas

2. Plurales no detectados

  • Problema: "lápices" no encuentra "lápiz"
  • Workaround: El sistema ahora tiene mapeo de plurales básico

3. Timeout en WebSocket

  • Problema: La conexión puede cerrarse por inactividad
  • Solución: El frontend reconecta automáticamente

4. Scope operator.write en OpenClaw

  • Problema: OpenClaw Gateway requiere scopes específicos para usar el agente
  • Solución actual: Se usa la API de Z.AI directamente en lugar de OpenClaw Gateway
  • Nota: Para usar OpenClaw Gateway, configurar con scopes: ["operator.read", "operator.write", "agent"]

5. PicoClaw no conecta

  • Problema: PicoClaw no reconoce modelos MiniMax
  • Solución: Usar OpenClaw o API directa

Mantenimiento

Ver logs

docker logs pygmesbot_backend

Reiniciar servicio

docker restart pygmesbot_backend

Ver productos en DB

docker exec pygmesbot_backend python3 -c "
import sqlite3
conn = sqlite3.connect('/app/data/stock.db')
for row in conn.execute('SELECT nombre, stock FROM productos LIMIT 5'):
    print(row)
"

##Licencia

MIT

Description
Repositorio demo con specs de PymesBot e inventario de ejemplo
Readme 179 KiB
Languages
HTML 100%