# @smartuy/builderbot-provider-waha

## Versión 1.2.7

### Desarrollado por SmartUY
Este paquete fue creado y es mantenido por [SmartUY](https://smartuy.com), empresa líder en soluciones tecnológicas. Desarrollado por Juan Pablo (BigJuanPa) de SmartUY.

### Nuevas características
- Manejo mejorado de eventos de sesión y mensajes
- Soporte para estados de conexión
- Mejor manejo de errores y logging
- Integración completa con BuilderBot
- Validación de emails y entradas con fallBack()
- Configuración segura con variables de entorno

### Instalación
Para un nuevo proyecto:

```
npx @smartuy/builderbot-provider-waha init mi-bot
```

Para un proyecto existente:

```
npm install @smartuy/builderbot-provider-waha@latest
```

**IMPORTANTE**: Después de instalar, ejecuta `npm install` para instalar todas las dependencias necesarias.

## Configuración

Crea un archivo `.env` con las siguientes variables:

```
WAHA_API_URL=https://tu-servidor-waha.com
WAHA_API_KEY=tu-api-key
WAHA_SESSION=default
```

## Uso

### Flujo simple

```typescript
import { createBot, createFlow, MemoryDB, addKeyword } from '@builderbot/bot';
import { WahaProvider } from '@smartuy/builderbot-provider-waha';
import express from 'express';
import dotenv from 'dotenv';

// Cargar variables de entorno
dotenv.config();

// Crear app Express para webhook
const app = express();
app.use(express.json());

// Definir un flujo simple
const bienvenidaFlow = addKeyword(['hola', 'buenas', 'saludos'])
  .addAnswer('¡Hola! Bienvenido al bot de SmartUY. ¿En qué podemos ayudarte hoy?');

// Inicializar el bot
const main = async () => {
  // Configurar el provider
  const wahaConfig = {
    url: process.env.WAHA_API_URL,
    token: process.env.WAHA_API_KEY,
    session: process.env.WAHA_SESSION
  };
  
  // Crear provider
  const adapterProvider = new WahaProvider(wahaConfig);
  
  // Inicializar webhook
  adapterProvider.initWebhook(app);
  
  // Crear flow
  const adapterFlow = createFlow([bienvenidaFlow]);
  
  // Crear base de datos
  const adapterDB = new MemoryDB();
  
  // Crear bot
  const bot = await createBot({
    flow: adapterFlow,
    provider: adapterProvider,
    database: adapterDB,
  });
  
  // Iniciar servidor
  app.listen(3000, () => {
    console.log('¡Servidor webhook de SmartUY ejecutándose en puerto 3000!');
  });
};

main();
```

### Verificar estado de conexión

El provider verifica automáticamente el estado de la sesión de WhatsApp y la inicia si es necesario.

## Eventos

El provider maneja los siguientes eventos:

### 1. Estado de Sesión
- Verifica si la sesión está activa
- Inicia la sesión automáticamente si está detenida
- Maneja errores de conexión

### 2. Mensajes
- Recibe mensajes a través del webhook
- Procesa y formatea los mensajes para BuilderBot
- Emite los mensajes al flujo del bot

## Características

- **Webhook integrado**: Recibe mensajes de WhatsApp automáticamente
- **Manejo de estado**: Almacena información del usuario entre mensajes
- **Validación de entradas**: Utiliza fallBack() para validar emails y otras entradas
- **Flujos de conversación**: Implementa flujos de bienvenida, registro y ayuda
- **Seguridad**: Usa variables de entorno para datos sensibles
- **CLI**: Herramienta para crear proyectos rápidamente

## Migración

Si vienes de una versión anterior, asegúrate de:
1. Actualizar a la última versión con `npm install @smartuy/builderbot-provider-waha@latest`
2. Ejecutar `npm install` para actualizar todas las dependencias
3. Usar las nuevas funciones de validación con fallBack()
4. Configurar correctamente las variables de entorno

## Recursos

- [Documentación de BuilderBot](https://builderbot.dev)
- [API de WAHA](https://github.com/waha-api/waha)
- [SmartUY](https://smartuy.com)

## Soporte

Para soporte, contacta a SmartUY o abre un issue en el repositorio.
Desarrollado con ❤️ por Juan Pablo (BigJuanPa) de SmartUY.

## Licencia

MIT
