- FastAPI backend with WebSocket chat - SQLite database for products - Z.AI (GLM-4.7) integration for AI responses - Docker deployment ready - Caddy proxy configuration
177 lines
3.8 KiB
Markdown
177 lines
3.8 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
# API de Z.AI (requerido)
|
|
ZAI_API_KEY=tu_api_key_aqui
|
|
ANTHROPIC_MODEL=glm-4.7
|
|
```
|
|
|
|
### Paso 1: Clonar el repositorio
|
|
|
|
```bash
|
|
git clone https://gitea.cbcren.online/renato97/demo.git
|
|
cd demo
|
|
```
|
|
|
|
### Paso 2: Configurar variables de entorno
|
|
|
|
Crear archivo `.env`:
|
|
```bash
|
|
ZAI_API_KEY=tu_api_key
|
|
```
|
|
|
|
### Paso 3: Iniciar contenedores
|
|
|
|
```bash
|
|
docker compose up -d --build
|
|
```
|
|
|
|
### Paso 4: Configurar Caddy (proxy)
|
|
|
|
Agregar al Caddyfile:
|
|
```caddy
|
|
demo.tudominio.com {
|
|
reverse_proxy localhost:8201
|
|
}
|
|
```
|
|
|
|
Reiniciar Caddy:
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
curl "http://localhost:8201/stock/search?q=birome"
|
|
```
|
|
|
|
### Ejemplo de confirmar venta
|
|
|
|
```bash
|
|
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:
|
|
```python
|
|
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
|
|
```bash
|
|
docker logs pygmesbot_backend
|
|
```
|
|
|
|
### Reiniciar servicio
|
|
```bash
|
|
docker restart pygmesbot_backend
|
|
```
|
|
|
|
### Ver productos en DB
|
|
```bash
|
|
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
|