Commit inicial: Sales Bot - Sistema de Automatización de Ventas
- Stack completo con Mattermost, NocoDB y Sales Bot - Procesamiento OCR de tickets con Tesseract - Sistema de comisiones por tubos de tinte - Comandos slash /metas y /ranking - Documentación completa del proyecto Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
296
docs/INSTALACION.md
Normal file
296
docs/INSTALACION.md
Normal file
@@ -0,0 +1,296 @@
|
||||
# Guía de Instalación
|
||||
|
||||
## Requisitos del Sistema
|
||||
|
||||
### Hardware Mínimo
|
||||
- CPU: 2 cores
|
||||
- RAM: 4 GB
|
||||
- Disco: 20 GB
|
||||
|
||||
### Software
|
||||
- Docker 20.10+
|
||||
- Docker Compose 2.0+
|
||||
- Git
|
||||
|
||||
### Red
|
||||
- Puerto 5000 (Sales Bot)
|
||||
- Puerto 8065 (Mattermost)
|
||||
- Puerto 8080 (NocoDB)
|
||||
|
||||
---
|
||||
|
||||
## Instalación Paso a Paso
|
||||
|
||||
### 1. Clonar el Repositorio
|
||||
|
||||
```bash
|
||||
git clone https://git.consultoria-as.com/<usuario>/stacks.git
|
||||
cd stacks
|
||||
```
|
||||
|
||||
### 2. Configurar Variables de Entorno
|
||||
|
||||
Copiar el archivo de ejemplo y editar:
|
||||
|
||||
```bash
|
||||
cd sales-bot
|
||||
cp .env.example .env
|
||||
nano .env
|
||||
```
|
||||
|
||||
Configurar las siguientes variables:
|
||||
|
||||
```env
|
||||
# Mattermost
|
||||
MATTERMOST_URL=http://<IP>:8065
|
||||
MATTERMOST_BOT_TOKEN=<tu_token>
|
||||
MATTERMOST_TEAM_NAME=sales
|
||||
MATTERMOST_WEBHOOK_SECRET=<tu_secret>
|
||||
MATTERMOST_WEBHOOK_URL=http://<IP>:8065/hooks/<hook_id>
|
||||
|
||||
# NocoDB
|
||||
NOCODB_URL=http://<IP>:8080
|
||||
NOCODB_TOKEN=<tu_token>
|
||||
NOCODB_TABLE_VENDEDORES=<table_id>
|
||||
NOCODB_TABLE_VENTAS=<table_id>
|
||||
NOCODB_TABLE_VENTAS_DETALLE=<table_id>
|
||||
NOCODB_TABLE_METAS=<table_id>
|
||||
|
||||
# Flask
|
||||
FLASK_PORT=5000
|
||||
LOG_LEVEL=INFO
|
||||
TZ_OFFSET=-6
|
||||
```
|
||||
|
||||
### 3. Iniciar Mattermost
|
||||
|
||||
```bash
|
||||
cd ../mattermost
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Esperar a que inicie completamente:
|
||||
```bash
|
||||
docker compose logs -f
|
||||
# Esperar mensaje "Server is listening"
|
||||
```
|
||||
|
||||
Acceder a http://<IP>:8065 y completar la configuración inicial:
|
||||
1. Crear cuenta de administrador
|
||||
2. Crear team "sales"
|
||||
3. Crear canales necesarios
|
||||
|
||||
### 4. Configurar Bot en Mattermost
|
||||
|
||||
1. Ir a **Integraciones > Bot Accounts**
|
||||
2. Crear nuevo bot:
|
||||
- Username: `salesbot`
|
||||
- Copiar el token generado
|
||||
|
||||
3. Ir a **Integraciones > Outgoing Webhooks**
|
||||
4. Crear webhook:
|
||||
- Canal: canal de ventas
|
||||
- URL: `http://<IP>:5000/webhook/mattermost`
|
||||
- Copiar el token
|
||||
|
||||
5. Ir a **Integraciones > Slash Commands**
|
||||
6. Crear comandos:
|
||||
- `/metas` → `http://<IP>:5000/comando/metas`
|
||||
- `/ranking` → `http://<IP>:5000/comando/ranking`
|
||||
|
||||
### 5. Iniciar NocoDB
|
||||
|
||||
```bash
|
||||
cd ../nocodb
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Acceder a http://<IP>:8080 y:
|
||||
1. Crear cuenta
|
||||
2. Crear base de datos
|
||||
3. Crear tablas (ver estructura en docs/ARQUITECTURA.md)
|
||||
4. Obtener API token en Settings
|
||||
|
||||
### 6. Configurar Tablas en NocoDB
|
||||
|
||||
Crear las siguientes tablas:
|
||||
|
||||
**Vendedores:**
|
||||
```
|
||||
- Id (Auto)
|
||||
- username (Text, Required)
|
||||
- nombre_completo (Text)
|
||||
- email (Email)
|
||||
- meta_diaria_tubos (Number, Default: 3)
|
||||
- activo (Checkbox, Default: true)
|
||||
- fecha_registro (DateTime)
|
||||
```
|
||||
|
||||
**Ventas:**
|
||||
```
|
||||
- Id (Auto)
|
||||
- vendedor_username (Text, Required)
|
||||
- monto (Currency)
|
||||
- cliente (Text)
|
||||
- fecha_venta (DateTime)
|
||||
- estado (SingleSelect: pendiente, completada, cancelada)
|
||||
- canal (Text)
|
||||
- mensaje_id (Text)
|
||||
- imagen_ticket (Attachment)
|
||||
- descripcion (LongText)
|
||||
```
|
||||
|
||||
**Ventas Detalle:**
|
||||
```
|
||||
- Id (Auto)
|
||||
- venta_id (Number)
|
||||
- producto (Text)
|
||||
- marca (Text)
|
||||
- cantidad (Number)
|
||||
- precio_unitario (Currency)
|
||||
- importe (Currency)
|
||||
```
|
||||
|
||||
**Metas:**
|
||||
```
|
||||
- Id (Auto)
|
||||
- vendedor_username (Text)
|
||||
- mes (Text)
|
||||
- tubos_vendidos (Number)
|
||||
- comision (Currency)
|
||||
- meta_diaria (Number)
|
||||
- porcentaje_completado (Percent)
|
||||
- total_vendido (Currency)
|
||||
```
|
||||
|
||||
### 7. Obtener IDs de Tablas
|
||||
|
||||
En NocoDB, para cada tabla:
|
||||
1. Abrir la tabla
|
||||
2. Copiar el ID de la URL: `/table/<TABLE_ID>`
|
||||
|
||||
Actualizar estos IDs en el archivo `.env`.
|
||||
|
||||
### 8. Iniciar Sales Bot
|
||||
|
||||
```bash
|
||||
cd ../sales-bot
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Verificar que esté corriendo:
|
||||
```bash
|
||||
curl http://localhost:5000/health
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Verificación de la Instalación
|
||||
|
||||
### 1. Verificar Servicios
|
||||
|
||||
```bash
|
||||
# Mattermost
|
||||
curl http://localhost:8065/api/v4/system/ping
|
||||
|
||||
# NocoDB
|
||||
curl http://localhost:8080/api/v2/health
|
||||
|
||||
# Sales Bot
|
||||
curl http://localhost:5000/health
|
||||
```
|
||||
|
||||
### 2. Probar Flujo Completo
|
||||
|
||||
1. Enviar mensaje en Mattermost:
|
||||
```
|
||||
venta @monto 100 @cliente Prueba
|
||||
```
|
||||
|
||||
2. Verificar que el bot responda
|
||||
3. Verificar registro en NocoDB
|
||||
|
||||
---
|
||||
|
||||
## Solución de Problemas
|
||||
|
||||
### Sales Bot no responde
|
||||
|
||||
```bash
|
||||
# Ver logs
|
||||
docker compose -f sales-bot/compose.yaml logs -f
|
||||
|
||||
# Reiniciar
|
||||
docker compose -f sales-bot/compose.yaml restart
|
||||
```
|
||||
|
||||
### Error de conexión a Mattermost
|
||||
|
||||
Verificar:
|
||||
1. Token del bot es correcto
|
||||
2. Bot tiene permisos en el canal
|
||||
3. URL de Mattermost es accesible
|
||||
|
||||
### Error de conexión a NocoDB
|
||||
|
||||
Verificar:
|
||||
1. Token de API es correcto
|
||||
2. IDs de tablas son correctos
|
||||
3. URL de NocoDB es accesible
|
||||
|
||||
### OCR no funciona
|
||||
|
||||
Verificar:
|
||||
1. Tesseract está instalado en el contenedor
|
||||
2. Imagen es legible
|
||||
3. Ver logs para errores específicos
|
||||
|
||||
---
|
||||
|
||||
## Actualización
|
||||
|
||||
```bash
|
||||
# Detener servicios
|
||||
docker compose -f sales-bot/compose.yaml down
|
||||
docker compose -f mattermost/compose.yaml down
|
||||
docker compose -f nocodb/compose.yaml down
|
||||
|
||||
# Actualizar código
|
||||
git pull
|
||||
|
||||
# Reconstruir imágenes
|
||||
docker compose -f sales-bot/compose.yaml build
|
||||
|
||||
# Iniciar servicios
|
||||
docker compose -f mattermost/compose.yaml up -d
|
||||
docker compose -f nocodb/compose.yaml up -d
|
||||
docker compose -f sales-bot/compose.yaml up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Backup y Restauración
|
||||
|
||||
### Backup
|
||||
|
||||
```bash
|
||||
# Backup de Mattermost
|
||||
docker compose -f mattermost/compose.yaml exec postgres \
|
||||
pg_dump -U consultoria-as mattermost > mattermost_backup.sql
|
||||
|
||||
# Backup de NocoDB
|
||||
docker compose -f nocodb/compose.yaml exec postgres \
|
||||
pg_dump -U consultoria-as nocodb > nocodb_backup.sql
|
||||
```
|
||||
|
||||
### Restauración
|
||||
|
||||
```bash
|
||||
# Restaurar Mattermost
|
||||
cat mattermost_backup.sql | docker compose -f mattermost/compose.yaml exec -T postgres \
|
||||
psql -U consultoria-as mattermost
|
||||
|
||||
# Restaurar NocoDB
|
||||
cat nocodb_backup.sql | docker compose -f nocodb/compose.yaml exec -T postgres \
|
||||
psql -U consultoria-as nocodb
|
||||
```
|
||||
Reference in New Issue
Block a user